INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 1 Bewertungen - 1 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
6-Kanalschalter für Modellbau
26.06.2019, 17:06
Beitrag #1
6-Kanalschalter für Modellbau
Moinsen,

für ein Modellbauprojekt benötige ich einen Schaltfunktion, die über einen Kanal bzw. Steuerknüppel mit den Links- und Rechtsbewegungen.

Die Anwahl der Schaltausgänge erfolgt in 3 Gruppen:
- kurzes antippen Ausgang 1/2 aktiv
- zwischen 1s bis 3s tippen Ausgang 3/4 aktiv
- länger als 3s tippen Ausgang 5/6 aktiv oder Reset auf Null für die Ausgänge
1 bis 5.
Um die Ausgänge wieder auf LOW zu bringen, wird jeweils die Tip-Funktion für den entsprechenden Ausgang wiederholt.

Umgesetzt werden soll dies mit einem Sketch, den ich in einer Sammlung vom Franzis-Verlag gefunden habe. Nach dem Flashen reagieren die Ausgänge zwar auf die Tipp-Funktion (Kontrolle mit LED), blitzen aber nur kurz auf statt konstant bis zum deaktivieren des jeweiluigen Kanals zu leuchten.

Ich habe verschiedenes am Sketch ausprobiert, aber den Fehler konnte ich bisher nicht eingrenzen. Vielleicht findet jemand den Punkt an dem es happert und kann mich in die richtige Spur bringen.

Code:
#include <debug.h>
#include <makros.h>
#include <RCReceive.h>
/*

Schaltprogramm für den Arduino mit 5 bzw. 6 Kanälen.
Der Empfänger wird vom Pin 2 gelesen,
die Ausgänge sind auf Pin 4,5,6,7,8,9.

Progbrammablauf:
Der Nullpunkt wird zunächst durch Interpolation der ersten 10 Werte vom Empfänger festgestellt.

Fehlerhafte Werte, also Werte ausserhalb von 900-2100 werden ignoriert. Werden mehr als 3 fehlerhafte Werte hintereinander gefunden,
werden alle Ausgänge auf null geschaltet. (Failsafe)

Die Schaltschwelle für den Normalbetrieb ist auf 250ms festgelegt.
Gemessen wird die Zeit, wie lange der Hebel in die eine oder andere Richtung gelegt wurde.

Kurz - (<1s) werden Kanal 1 bzw. Kanal 2 geschaltet
Mittel - (1s>x>3s) werden die Kanäle 3 und 4 geschaltet
Lang - (>3s) werden die Kanäle 5/6 geschaltet

Statt dem Kanal 6 kann auch ein kompletter Reset aller Kanäle ausgelöst werden.
Dazu dient der Compilerschalter DO_RESET

Jeder Kanal kann mit einer Blinkfunktion ausgestattet werden.
Dazu muss in dem Feld BLINKTIME für den jeweiligen Kanal ein Wert <> 0 eingestellt werden.
Die Zahl wird dann als Zeitspanne gewertet. (Angabe in ms)

Für die Zuordnung von Kanälen zu Pins ist ads Feld CAN zuständig.

Die beiden Zeitschranken TIME_1 und TIME_2 definieren die Zeitschranken zwischen den Umschaltpunkten.
*/

// Statt Kanal 6 kann auch ein Reset aller Funktionen ausgeführt werden.
#define DO_RESET;

// Welcher Kanal soll Blinken? Blinkzeit > 0 in ms;
// HINWEIS: Die Felder gehen ab Index 0 los, d.h. Kanal 1 ist Index 0 Kanal 2 ist Index 1 ... Kanal 6 ist Index 5
const int BLINKTIME[] = {
  0, 0, 0, 0, 500, 0}; // ggf. Index 2 von 1000 aus 0 setzen

const byte PIN_RC = 2;

// Pins der Ausgänge
const byte CANNEL[] = {
  4, 5, 6, 7, 8, 9};

/* Konstante für die Erkennung des Schaltbefehls.
Bei Kanal 1 wäre das Nullpunkt + SWITCH_STEP bei Kanal 2 entsprechend Nullpunkt - SWITCH_STEP
*/
const int SWITCH_STEP = 64;

// erste Schaltschwelle
const unsigned long TIME_1 = 400;  // ursprünglich 1000
// zweite Schaltschwelle
const unsigned long TIME_2 = 1000; // ursprünglich 3000

RCReceive rcReceiver;

// Zwischenspeicher
int myRcValue;
int maxSwitch;
int minSwitch;

// aktueller Schaltzustand des jeweiligen Kanals
boolean can_on[6];

void setup() {
  // Kanäle auf Ausgang, und dann deaktivieren
  for (int i = 0; i < 6; i++) {
    pinMode(CANNEL[i], OUTPUT);    
    digitalWrite(CANNEL[i], LOW);
    can_on[i] = false;
  }
  // Eingang für RC
  rcReceiver.attach(PIN_RC);

  maxSwitch = 0;
  minSwitch = 0;
}

void loop() {
  // Aktuellen RC-Wert lesen
  rcReceiver.poll();

  // Fehlerfall
  if (rcReceiver.hasError()) {
    // failsafe ...
    switchAllOff();
  }
  else if (rcReceiver.hasNP()) {
    if (maxSwitch == 0) {
      // Schaltschwellen definieren, nur wenn noch nicht definiert
      maxSwitch = rcReceiver.getNP() + SWITCH_STEP;
      minSwitch = rcReceiver.getNP() - SWITCH_STEP;
    }
    doWork();
  }
  for (int i = 0; i < 6; i++) {
    doSwitch(i);
  }
}

boolean up, down = false;
unsigned long saveTime;

void doWork() {
  byte myRcValue = rcReceiver.getValue();

  if (myRcValue > maxSwitch) {
    if (!up) {
      up = true;
      down = false;
      saveTime = millis();
    }
  }
  else if (myRcValue < minSwitch) {
    if (!down) {
      down = true;
      up = false;
      saveTime = millis();
    }
  }
  else {
    if (up) {
      // Zurück vom vorwärts schalten
      up = false;
      saveTime = millis() - saveTime;
      if (saveTime < TIME_1) {
        can_on[0] = !can_on[0];
      }
      else if (saveTime < TIME_2) {
        can_on[2] = !can_on[2];
      }
      else {
        can_on[4] = !can_on[4];
      }
    }
    else
      if (down) {
      // Zurück vom vorwärts schalten
      down = false;
      saveTime = millis() - saveTime;
      if (saveTime < TIME_1) {
        can_on[1] = !can_on[1];
      }
      else if (saveTime < TIME_2) {
        can_on[3] = !can_on[3];
      }
      else {
#ifdef DO_RESET
        switchAllOff();
#else
        can_on[5] = !can_on[5];
#endif
      }
    }
  }
}
// RESET über Kanal 6
void switchAllOff() {
  for (int i = 0; i < 6; i++) {
    can_on[i] = false;
    doSwitch(i);
  }
}

void doSwitch(int can) {
  int blinktime = BLINKTIME[can];
  if (can_on[can]) {
    if (blinktime > 0) {
      if ((millis() % blinktime) < (blinktime / 2)) {
        digitalWrite(CANNEL[can], HIGH);      
      }
      else {
        digitalWrite(CANNEL[can], LOW);
      }
    }
    else {
      digitalWrite(CANNEL[can], HIGH);
    }
  }
  else {
    digitalWrite(CANNEL[can], LOW);
  }
}
[/
code]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.06.2019, 18:13
Beitrag #2
RE: 6-Kanalschalter für Modellbau
Die 3 Libs, die Du einbindest, sind keine Standardlibs. Zu denen solltest Du uns Links geben.

Wenn Du Änderungen im Sketch vornimmst (z.B. Zeiten änderst) solltest Du auch die dazu gehörenden Kommentare anpassen, das stört sonst das Verständnis.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.06.2019, 19:01 (Dieser Beitrag wurde zuletzt bearbeitet: 26.06.2019 19:02 von do1xxy.)
Beitrag #3
RE: 6-Kanalschalter für Modellbau
(26.06.2019 17:06)do1xxy schrieb:  Moinsen,

für ein Modellbauprojekt benötige ich einen Schaltfunktion, die über einen Kanal bzw. Steuerknüppel mit den Links- und Rechtsbewegungen.

Die Anwahl der Schaltausgänge erfolgt in 3 Gruppen:
- kurzes antippen Ausgang 1/2 aktiv
- zwischen 1s bis 3s tippen Ausgang 3/4 aktiv
- länger als 3s tippen Ausgang 5/6 aktiv oder Reset auf Null für die Ausgänge
1 bis 5.
Um die Ausgänge wieder auf LOW zu bringen, wird jeweils die Tip-Funktion für den entsprechenden Ausgang wiederholt.

Umgesetzt werden soll dies mit einem Sketch, den ich in einer Sammlung vom Franzis-Verlag gefunden habe. Nach dem Flashen reagieren die Ausgänge zwar auf die Tipp-Funktion (Kontrolle mit LED), blitzen aber nur kurz auf statt konstant bis zum deaktivieren des jeweiluigen Kanals zu leuchten.

Ich habe verschiedenes am Sketch ausprobiert, aber den Fehler konnte ich bisher nicht eingrenzen. Vielleicht findet jemand den Punkt an dem es happert und kann mich in die richtige Spur bringen.

Code:
#include <debug.h>
#include <makros.h>
#include <RCReceive.h>
/*

Schaltprogramm für den Arduino mit 5 bzw. 6 Kanälen.
Der Empfänger wird vom Pin 2 gelesen,
die Ausgänge sind auf Pin 4,5,6,7,8,9.

Progbrammablauf:
Der Nullpunkt wird zunächst durch Interpolation der ersten 10 Werte vom Empfänger festgestellt.

Fehlerhafte Werte, also Werte ausserhalb von 900-2100 werden ignoriert. Werden mehr als 3 fehlerhafte Werte hintereinander gefunden,
werden alle Ausgänge auf null geschaltet. (Failsafe)

Die Schaltschwelle für den Normalbetrieb ist auf 250ms festgelegt.
Gemessen wird die Zeit, wie lange der Hebel in die eine oder andere Richtung gelegt wurde.

Kurz - (<1s) werden Kanal 1 bzw. Kanal 2 geschaltet
Mittel - (1s>x>3s) werden die Kanäle 3 und 4 geschaltet
Lang - (>3s) werden die Kanäle 5/6 geschaltet

Statt dem Kanal 6 kann auch ein kompletter Reset aller Kanäle ausgelöst werden.
Dazu dient der Compilerschalter DO_RESET

Jeder Kanal kann mit einer Blinkfunktion ausgestattet werden.
Dazu muss in dem Feld BLINKTIME für den jeweiligen Kanal ein Wert <> 0 eingestellt werden.
Die Zahl wird dann als Zeitspanne gewertet. (Angabe in ms)

Für die Zuordnung von Kanälen zu Pins ist ads Feld CAN zuständig.

Die beiden Zeitschranken TIME_1 und TIME_2 definieren die Zeitschranken zwischen den Umschaltpunkten.
*/

// Statt Kanal 6 kann auch ein Reset aller Funktionen ausgeführt werden.
#define DO_RESET;

// Welcher Kanal soll Blinken? Blinkzeit > 0 in ms;
// HINWEIS: Die Felder gehen ab Index 0 los, d.h. Kanal 1 ist Index 0 Kanal 2 ist Index 1 ... Kanal 6 ist Index 5
const int BLINKTIME[] = {
  0, 0, 0, 0, 500, 0}; // ggf. Index 2 von 1000 aus 0 setzen

const byte PIN_RC = 2;

// Pins der Ausgänge
const byte CANNEL[] = {
  4, 5, 6, 7, 8, 9};

/* Konstante für die Erkennung des Schaltbefehls.
Bei Kanal 1 wäre das Nullpunkt + SWITCH_STEP bei Kanal 2 entsprechend Nullpunkt - SWITCH_STEP
*/
const int SWITCH_STEP = 64;

// erste Schaltschwelle
const unsigned long TIME_1 = 400;  // ursprünglich 1000
// zweite Schaltschwelle
const unsigned long TIME_2 = 1000; // ursprünglich 3000

RCReceive rcReceiver;

// Zwischenspeicher
int myRcValue;
int maxSwitch;
int minSwitch;

// aktueller Schaltzustand des jeweiligen Kanals
boolean can_on[6];

void setup() {
  // Kanäle auf Ausgang, und dann deaktivieren
  for (int i = 0; i < 6; i++) {
    pinMode(CANNEL[i], OUTPUT);    
    digitalWrite(CANNEL[i], LOW);
    can_on[i] = false;
  }
  // Eingang für RC
  rcReceiver.attach(PIN_RC);

  maxSwitch = 0;
  minSwitch = 0;
}

void loop() {
  // Aktuellen RC-Wert lesen
  rcReceiver.poll();

  // Fehlerfall
  if (rcReceiver.hasError()) {
    // failsafe ...
    switchAllOff();
  }
  else if (rcReceiver.hasNP()) {
    if (maxSwitch == 0) {
      // Schaltschwellen definieren, nur wenn noch nicht definiert
      maxSwitch = rcReceiver.getNP() + SWITCH_STEP;
      minSwitch = rcReceiver.getNP() - SWITCH_STEP;
    }
    doWork();
  }
  for (int i = 0; i < 6; i++) {
    doSwitch(i);
  }
}

boolean up, down = false;
unsigned long saveTime;

void doWork() {
  byte myRcValue = rcReceiver.getValue();

  if (myRcValue > maxSwitch) {
    if (!up) {
      up = true;
      down = false;
      saveTime = millis();
    }
  }
  else if (myRcValue < minSwitch) {
    if (!down) {
      down = true;
      up = false;
      saveTime = millis();
    }
  }
  else {
    if (up) {
      // Zurück vom vorwärts schalten
      up = false;
      saveTime = millis() - saveTime;
      if (saveTime < TIME_1) {
        can_on[0] = !can_on[0];
      }
      else if (saveTime < TIME_2) {
        can_on[2] = !can_on[2];
      }
      else {
        can_on[4] = !can_on[4];
      }
    }
    else
      if (down) {
      // Zurück vom vorwärts schalten
      down = false;
      saveTime = millis() - saveTime;
      if (saveTime < TIME_1) {
        can_on[1] = !can_on[1];
      }
      else if (saveTime < TIME_2) {
        can_on[3] = !can_on[3];
      }
      else {
#ifdef DO_RESET
        switchAllOff();
#else
        can_on[5] = !can_on[5];
#endif
      }
    }
  }
}
// RESET über Kanal 6
void switchAllOff() {
  for (int i = 0; i < 6; i++) {
    can_on[i] = false;
    doSwitch(i);
  }
}

void doSwitch(int can) {
  int blinktime = BLINKTIME[can];
  if (can_on[can]) {
    if (blinktime > 0) {
      if ((millis() % blinktime) < (blinktime / 2)) {
        digitalWrite(CANNEL[can], HIGH);      
      }
      else {
        digitalWrite(CANNEL[can], LOW);
      }
    }
    else {
      digitalWrite(CANNEL[can], HIGH);
    }
  }
  else {
    digitalWrite(CANNEL[can], LOW);
  }
}
[/
code]

Hallo Tommy,
das Problem mit den Libs ist, dass diese von dem Autor des Buches auf seiner Homepage eingestellt waren. Diese exisitiert zwar noch, aber es gibt keinen Link zu den Libs. Ebenso lässt sich der Autor nicht mehr erreichen - eigenartige Situation.

(26.06.2019 19:01)do1xxy schrieb:  
(26.06.2019 17:06)do1xxy schrieb:  Moinsen,

für ein Modellbauprojekt benötige ich einen Schaltfunktion, die über einen Kanal bzw. Steuerknüppel mit den Links- und Rechtsbewegungen.

Die Anwahl der Schaltausgänge erfolgt in 3 Gruppen:
- kurzes antippen Ausgang 1/2 aktiv
- zwischen 1s bis 3s tippen Ausgang 3/4 aktiv
- länger als 3s tippen Ausgang 5/6 aktiv oder Reset auf Null für die Ausgänge
1 bis 5.
Um die Ausgänge wieder auf LOW zu bringen, wird jeweils die Tip-Funktion für den entsprechenden Ausgang wiederholt.

Umgesetzt werden soll dies mit einem Sketch, den ich in einer Sammlung vom Franzis-Verlag gefunden habe. Nach dem Flashen reagieren die Ausgänge zwar auf die Tipp-Funktion (Kontrolle mit LED), blitzen aber nur kurz auf statt konstant bis zum deaktivieren des jeweiluigen Kanals zu leuchten.

Ich habe verschiedenes am Sketch ausprobiert, aber den Fehler konnte ich bisher nicht eingrenzen. Vielleicht findet jemand den Punkt an dem es happert und kann mich in die richtige Spur bringen.

Code:
#include <debug.h>
#include <makros.h>
#include <RCReceive.h>
/*

Schaltprogramm für den Arduino mit 5 bzw. 6 Kanälen.
Der Empfänger wird vom Pin 2 gelesen,
die Ausgänge sind auf Pin 4,5,6,7,8,9.

Progbrammablauf:
Der Nullpunkt wird zunächst durch Interpolation der ersten 10 Werte vom Empfänger festgestellt.

Fehlerhafte Werte, also Werte ausserhalb von 900-2100 werden ignoriert. Werden mehr als 3 fehlerhafte Werte hintereinander gefunden,
werden alle Ausgänge auf null geschaltet. (Failsafe)

Die Schaltschwelle für den Normalbetrieb ist auf 250ms festgelegt.
Gemessen wird die Zeit, wie lange der Hebel in die eine oder andere Richtung gelegt wurde.

Kurz - (<1s) werden Kanal 1 bzw. Kanal 2 geschaltet
Mittel - (1s>x>3s) werden die Kanäle 3 und 4 geschaltet
Lang - (>3s) werden die Kanäle 5/6 geschaltet

Statt dem Kanal 6 kann auch ein kompletter Reset aller Kanäle ausgelöst werden.
Dazu dient der Compilerschalter DO_RESET

Jeder Kanal kann mit einer Blinkfunktion ausgestattet werden.
Dazu muss in dem Feld BLINKTIME für den jeweiligen Kanal ein Wert <> 0 eingestellt werden.
Die Zahl wird dann als Zeitspanne gewertet. (Angabe in ms)

Für die Zuordnung von Kanälen zu Pins ist ads Feld CAN zuständig.

Die beiden Zeitschranken TIME_1 und TIME_2 definieren die Zeitschranken zwischen den Umschaltpunkten.
*/

// Statt Kanal 6 kann auch ein Reset aller Funktionen ausgeführt werden.
#define DO_RESET;

// Welcher Kanal soll Blinken? Blinkzeit > 0 in ms;
// HINWEIS: Die Felder gehen ab Index 0 los, d.h. Kanal 1 ist Index 0 Kanal 2 ist Index 1 ... Kanal 6 ist Index 5
const int BLINKTIME[] = {
  0, 0, 0, 0, 500, 0}; // ggf. Index 2 von 1000 aus 0 setzen

const byte PIN_RC = 2;

// Pins der Ausgänge
const byte CANNEL[] = {
  4, 5, 6, 7, 8, 9};

/* Konstante für die Erkennung des Schaltbefehls.
Bei Kanal 1 wäre das Nullpunkt + SWITCH_STEP bei Kanal 2 entsprechend Nullpunkt - SWITCH_STEP
*/
const int SWITCH_STEP = 64;

// erste Schaltschwelle
const unsigned long TIME_1 = 400;  // ursprünglich 1000
// zweite Schaltschwelle
const unsigned long TIME_2 = 1000; // ursprünglich 3000

RCReceive rcReceiver;

// Zwischenspeicher
int myRcValue;
int maxSwitch;
int minSwitch;

// aktueller Schaltzustand des jeweiligen Kanals
boolean can_on[6];

void setup() {
  // Kanäle auf Ausgang, und dann deaktivieren
  for (int i = 0; i < 6; i++) {
    pinMode(CANNEL[i], OUTPUT);    
    digitalWrite(CANNEL[i], LOW);
    can_on[i] = false;
  }
  // Eingang für RC
  rcReceiver.attach(PIN_RC);

  maxSwitch = 0;
  minSwitch = 0;
}

void loop() {
  // Aktuellen RC-Wert lesen
  rcReceiver.poll();

  // Fehlerfall
  if (rcReceiver.hasError()) {
    // failsafe ...
    switchAllOff();
  }
  else if (rcReceiver.hasNP()) {
    if (maxSwitch == 0) {
      // Schaltschwellen definieren, nur wenn noch nicht definiert
      maxSwitch = rcReceiver.getNP() + SWITCH_STEP;
      minSwitch = rcReceiver.getNP() - SWITCH_STEP;
    }
    doWork();
  }
  for (int i = 0; i < 6; i++) {
    doSwitch(i);
  }
}

boolean up, down = false;
unsigned long saveTime;

void doWork() {
  byte myRcValue = rcReceiver.getValue();

  if (myRcValue > maxSwitch) {
    if (!up) {
      up = true;
      down = false;
      saveTime = millis();
    }
  }
  else if (myRcValue < minSwitch) {
    if (!down) {
      down = true;
      up = false;
      saveTime = millis();
    }
  }
  else {
    if (up) {
      // Zurück vom vorwärts schalten
      up = false;
      saveTime = millis() - saveTime;
      if (saveTime < TIME_1) {
        can_on[0] = !can_on[0];
      }
      else if (saveTime < TIME_2) {
        can_on[2] = !can_on[2];
      }
      else {
        can_on[4] = !can_on[4];
      }
    }
    else
      if (down) {
      // Zurück vom vorwärts schalten
      down = false;
      saveTime = millis() - saveTime;
      if (saveTime < TIME_1) {
        can_on[1] = !can_on[1];
      }
      else if (saveTime < TIME_2) {
        can_on[3] = !can_on[3];
      }
      else {
#ifdef DO_RESET
        switchAllOff();
#else
        can_on[5] = !can_on[5];
#endif
      }
    }
  }
}
// RESET über Kanal 6
void switchAllOff() {
  for (int i = 0; i < 6; i++) {
    can_on[i] = false;
    doSwitch(i);
  }
}

void doSwitch(int can) {
  int blinktime = BLINKTIME[can];
  if (can_on[can]) {
    if (blinktime > 0) {
      if ((millis() % blinktime) < (blinktime / 2)) {
        digitalWrite(CANNEL[can], HIGH);      
      }
      else {
        digitalWrite(CANNEL[can], LOW);
      }
    }
    else {
      digitalWrite(CANNEL[can], HIGH);
    }
  }
  else {
    digitalWrite(CANNEL[can], LOW);
  }
}
[/
code]

Hallo Tommy,
das Problem mit den Libs ist, dass diese von dem Autor des Buches auf seiner Homepage eingestellt waren. Diese exisitiert zwar noch, aber es gibt keinen Link zu den Libs. Ebenso lässt sich der Autor nicht mehr erreichen - eigenartige Situation.

Bei den Kommentaren handelt es sich um die Originalkommentare des Autors.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.06.2019, 19:17
Beitrag #4
RE: 6-Kanalschalter für Modellbau
Du musst nicht alles doppelt posten. Leis Dein Posting vorm Absenden einfach mal als Vorschau oder korrigiere es nach dem Absenden.

Wie sollen wir ohne Zugriff auf die Libs wissen, was da abgeht. Also ich finde da keinen Einstieg. Evtl. kann jemand aus dem Modellbau damit mehr anfangen.

Franzis steht bei mir auch für alles Andere, als Qualität.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.06.2019, 21:26
Beitrag #5
RE: 6-Kanalschalter für Modellbau
Hallo,
Schau mal hier.

Signal einlesen, auswerten und entsprechendes Flag setzen.
Flag mit Zeit auswerten, und mit Array Funktionen anspringen.

Sollte machbar sein.
Gruß, Markus

Immer in Stress
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.06.2019, 20:44 (Dieser Beitrag wurde zuletzt bearbeitet: 27.06.2019 20:50 von Sam Stag.)
Beitrag #6
RE: 6-Kanalschalter für Modellbau
Kannst Dir ja auch mal dieses Thema zu Gemüte führen:

https://www.modelltruck.net/showthread.p...ier-Moduls

Persönlich habe ich dieses Programm in leicht abgewandelter Form mit 12 Funktionen in einem Modell im Einsatz.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Auto Level Quadrocopter (Modellbau Empfänger) Neumi 12 3.713 20.01.2015 13:47
Letzter Beitrag: Eichner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste