Was du möchtest, ist relativ einfach zu lösen:
Du setzt einfach in die case-Anweisungen sowas:
case 1: schalte1An;
schalte 2,3,4,5,6,7,aus;
break;
case 2: schalte2An;
schalte 1,3,4,5,6,7, aus
break;
ODER du setzt bei jedem Aufruf von KanalSchalten zuerst alle Ausgänge zurück und aktivierst dann nur den gewünschten.
Hierbei würde ich dafür sorgen, dass die Routine überhaupt nur aufgerufen wird, wenn sich ein neuer Zustand ergibt, also den aktuell gewälten Kanal speichern:
if (geschaltenerKanal!=geschaltenerKanalAlt)
{kanalSchalten;}
und am Ende von kanalSchalten setzt du kanalAlt auf den aktuellen Wert:
geschaltenerKanalAlt=geschaltenerKanal
Die Geschichte, dass du einzelne Kanäle dauerhaft an lassen kannst (indem du den Schalter länger an lässt) ist etwas schwieriger so hin zu bekommen, dass man sie auch wirklich ohne Nachdenken bedienen kann.
Ich würd dafür nen zweiten Kanal dazu nehmen (wenn das vom Modell her _irgendwie_ geht):
if (RcKanal1 an && RCKanal2 an)
{setze BleibtAnFlag;}
Das geht, indem du statt Boolean-Variablen einfach Integer benutzt.
Dann können die Kanalvariablen beispielsweise 0, 1 und 2 annehmen, wobei die 2 dann der Marker ist: der bleibt an.
Ich nehme an, du willst Beleuchtungen schalten?
Das hab ich beim Seeteufel völlig automatisiert.
Es gibt nen Helligkeitssensor an Bord. Wenn es "dunkel genug" wird, wird die Lichterführung aktiviert, und zwar (es ist nen Schlepper) je nachdem, ob vorher Leinen aus- oder abgeworfen wurden. Ansonsten eben nur normale Positionslichter nach Vorschrift.
Darum brauch ich mich überhaupt nicht mehr kümmern.
Will ich mal, zum angeben, auch im Hellen mit Beleuchtung fahren, stülp ich einfach nen Käppchen über den Lichtsensor, dann glaubt er, es ist dunkel.
Lesezeichen