PWM-Signal auswerten

Was bewirkt das und was bedeutet das "^" ? Ist das das bitweise XOR?

Der Kandidat hat 100 Punkte. Und einen Extra-Bonus, weil er nicht nachgelesen, sondern geraten hat. Glückwunsch.

Und muss ich da unbedingt mit bytes arbeiten

Bytes sind die natürlichste Datengröße für einen 8-Bit Prozessor, und sie passen erstaunlich oft.

Aber du hast insofern recht, dass es hier eigentlich um LOW / HIGH geht.
In Arduino - C ist LOW = false = 0 und HIGH = true = 1.
Und boolean wird in Arduino-C in einem byte untergebracht.

Rein logisch gesehen ist ! der richtige toggle - Operator, und Doc_Arduino's ^=1 mogelt, weil er weiss, dass in dem Byte nie was anderes als 0 oder 1 drinsteht.
( Ob das tatsächlich einen Zyklus schneller oder ein paar Byte kürzer ist, als was ein ordentlicher Compiler aus dem ! Operator macht, lassen wir mal offen )

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.

Vielleicht solltest du doch mal ein bisschen Einführung in C lesen, sonst rätst du wieder richtig, was der Unterschied zwischen einer lokalen und einer globalen Variable ist...
Warum - Fragen wollen nicht wirklich eine Antwort, hab ich aus Erfahrung gelernt. Weil die Antwort nicht hilft, sondern eher zeigt, dass alles nicht so einfach ist.
Das Problem ist eher dein geheimnisvolles "Denn da funktioniert es nicht", was man nur mit "Sollte es aber" beantworten kann.

Und noch ein Problem. Ich kann die LEDs nur schalten, wenn ich das USB-kabel verbunden habe
... Leds sind mit + am Arduino Ausgang und mit - an Ground angeschlossen.

... und haben sicher einen Vorwiderstand , oder ?
Ein Arduino sollte auch mit 7V an Vin funktionieren. Da solltest du mal durch Eingrenzen/Vereinfachen klären, ob das an Stromversorgung / LED / Fernsteuerung oder was sonst liegt.

Bluetruck:
@michael_x:
Versteh ich nicht ganz. In der zweiten If-schleife schaltest du dann doch die LED automatisch wieder aus!? Was bringt mir das jetzt XD

Ich weiß, dass ein goto nicht gern gesehen wird, aber sofern ich keine andere Möglichkeit habe, werde ich es wohl verwenden müssen.

michael_x:

Ich möchte die delay()-Schleife raus haben.

Du meinst dein pulseIn() ?

?? Ich versteh jetzt nicht, was die miteinander zu tun haben, bzw. wieso das pulseIn() gleich delay() sein soll

Tut mir leid, wenn ich mich ein wenig blöd anstelle.... =( XD

Ich habe kein delay in deinem Post gesehen, das einzige was eine Verzögerung reinbringt, ist das pulseIn, weil es wartet, bis ein neuer Puls von deiner Steuerung kommt.
Das zweite if in meinem Beispiel wird erst viele Zyklen später true, wenn das im ersten if gesetzte
  start=millis();
so alt ist, dass

   millis() - start > LED_DAUER

erfüllt ist.

( start kann für diesen Zweck übrigens keine einfache lokale Variable sein, um nochmal was verwirrendes zu deinem "Warum" beizutragen)

P.S. Kannst du bitte deinen Kommentar im vorigen Post in der Zeilenlänge kürzen, mein Bildschirm ist zwar 16:9 Full-HD, aber doch ein bisschen zu schmal um Text und scroll-Balken gleichzeitig zu zeigen.
PPS: War nur bei meiner Antwort störend, hat sich erledigt...