PWM-Signal auswerten

@MaFu: Ok, hab ich mir fast so gedacht XD

@Doc_Arduino:

Hm, versteh ich nicht ganz.

TOGGLE ^=1;

Was bewirkt das und was bedeutet das "^" ? Ist das das bitweise XOR?
Und muss ich da unbedingt mit bytes arbeiten? Weil da blick ich nicht durch :grin:

Wat anderes: Hab jetzt mal Doc_Arduinos Rat befolgt. Allerdings wird die Hilfsvariable nicht bei jeder gültigen if-Bedingung zurückgesetzt, sondern alle erst in einer seperaten if-bedinung (Eingangssingal muss in in "Mittelstellung" sein) am Schluss. Da der loop-teil ja nahe zu in keiner Zeit durchläuft, reicht das ja auch.
Mein Problem ist: An sich funktioniert es, aber das Signal wird nicht eindeutig verarbeitet. Dh, wenn ich den Taster in meiner Fernbedingung drücke, geht die LED an, aber sofort wieder aus. Ich muss zB. längere Zeit drücken. Ist aber nicht immer. Manchmal geht sie auch wieder aus, wenn ich lange drücke. Beim ausschalten genau das gleiche.
Ich zeig euch mal meiner Code (noch ohne Toggle), vllt. sieht ja jemand was ?

void setup ()
{
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (3, INPUT);
}

void loop (){
  int a = pulseIn(3,HIGH,24000);//Ließt Eingangssignal
  boolean vLED1 = false;//Hilfsvariable wird zusammen mit der LED auf "true" gesetzt, wenn if-Bedingung erfüllt wurde. Am Ende des loop-teils werden, wenn das Einganssignal in der "Mittelstellung" ist, alle Hilfsvariablen wieder auf "false" gesetzt. Somit kann die LED wieder umgeschaltet werden.
  boolean vLED2 = false;//
  int iLED1 = digitalRead(5);//Ließt Status von LED1
  int iLED2 = digitalRead(6);

  //if-Bedinung für LED1
  if (a>1228 && a<1242 && iLED1==LOW && vLED1 == false){//Wenn Eingangssignal zwischen 1228 und 1242, Ausgang an LED1 aus und der Status des Ausgangs in diesem loop-durchgang noch nicht verändert wurde, dann
    digitalWrite (5,HIGH);//schalte Ausgang an
    vLED1 = true;//Setze Hilfsvariable auf true. Nächste if-bedinung stimmt somit nicht mehr (bis Eingangssingal in "Mittelstellung" und die LED bleibt an.
  }
  if (a>1228 && a<1242 && iLED1==HIGH &&  vLED1 == false){//Gleich wie oben, bloß umgekehrt zum ausschalten der LED
   digitalWrite (5,LOW);
   vLED1 = true;
  }
    //if-Bedinung für LED2
  if (a>919 && a<930 && iLED2==LOW && vLED2 == false){
    digitalWrite (6,HIGH);
    vLED1 = true;
  }
  if (a>919 && a<930 && iLED2==HIGH &&  vLED2 == false){
   digitalWrite (6,LOW);
   vLED1 = true;
  }
      //if-Bedinung zum Zurücksetzen der Hilfsvariablen bei Mittelstellung des Eingangssignals
  if (a>1490 && a<1505){
    vLED1 = false;
    vLED2 = false;
  }

}

Es liegt aber nicht am Empfang. Denn als ich es das erste mal mit delay() als verzögerung gemacht habe, hat es ja hinsichtlich dieses Problems super funktioniert.

Was mich verwundert hat: Warum muss ich die Variablen im loop-teil deklarieren, und kann sie nicht ganz am Anfang des Sketches hinschreiben? Denn da funktioniert es nicht.

EDIT Und noch ein Problem. Ich kann die LEDs nur schalten, wenn ich das USB-kabel verbunden habe !?
Mal meine Pin-belegungen:

5V+: 5V
Ground: ?
7V+: VI
Leds sind mit + am Arduino Ausgang und mit - an Ground angeschlossen.

Das Arduino ist schon angeschlossen, wenn ich das USB-kabel entferne, leuchtet die Blaue LED noch.

Warscheinlich ist die Lösung total einfach, bloß komm ich nicht drauf :0