habe gerade einen Ausdruck gesehen den ich nicht ganz begreife. Hab den so zumindest noch nicht verwendet.
digitalWrite(led1, (digitalRead(led1));
die Stelle digitalRead(led1) verwirrt mich.
Üblicherweise kenne ich es so dass da HIGH oder LOW steht.
Und von der Logik her verstehe ich es gar nicht.
Du bist hier im englischen Teil des Forums. Entweder Du postest in englisch, oder Du lässt deinen Thread von einem Administrator in den deutschen Teil des Forums verschieben.
I think it is as a7 suggests ( maybe a typo ). And this statement toggles the led. But it works only on arduinos where pins that are set as output can be read like an input. That's true for many ( e.g. all AVR ) boards, but not for every board.
das macht wenig Sinn, das hast vermutlich falsch abgeschrieben.
Das macht man öfters:
digitalWrite(led1, !digitalRead(led1));
digitalRead(led1) liest den Ausgang aus.
das Rufzeichen invertiert das gelesenen Ergebnis.
Das wird dann neu an den Ausgang led1 gesandt.
Somit wird der Ausgang umgeschaltet.
Es ist wie ein toggeln des Ausgangs. Aus wird zu Ein. Ein wird zu Aus
das würde jetzt den Wechsel von HIGH nach LOW bzw. anders rum bewirken.
Die Kurzform wäre jetzt:
pinGelesen = !digitalRead(led1);
Und dann in Folge:
digitalWrite(led1, pinGelesen);
Das ist dann das, was da tatsächlich geschrieben wird.
Das ! bewirkt das negieren des gelesenen Wertes.
Durch das zusammensetzen beider Funktionen (lesen und schreiben) sparst Du die Variablen wie in meinem ausführlichen Code und es wird übersichtlicher...
Wenn du die Arduino Doku liest, findest du dort den Satz:
Parameters
pin: the Arduino pin number. value: HIGH or LOW.
Du kannst an der Stelle alles eintragen, was sich implizit zu dem Äquivalent von HIGH oder LOW konvertieren lässt.
Die Definitionen für HIGH und LOW finden sich im Arduino Core, welcher auf deiner Festplatte wohnt.
Die Regeln für die impliziten Konvertierungen werden jedem halbwegs guten C++ Grundlagen Buch beschrieben.