digitalWrite();

Hallo Leute,

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.

Danke schon mal.

Gruß

Peut-etre

  digitalWrite(led1, !digitalRead(led1));

What Arduino board are you using?

a7

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 :wink: ). 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.

Ihr Beitrag wurde an seinen aktuellen Speicherort verschoben, da er besser geeignet ist.

Oh srry. I didn't realize I was in the English environment.

I use the arduino uno and nano.
Could you explain this to me in more details?

Thank you!

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

Ich versuch es mal...
also das da oben ist falsch - richtig muss es heissen, wie @alto777 es schreibt.

Was passiert da:

  bool pinGelesen = digitalRead(led1);

in pinGelesen wäre jetzt der Pegel

  if (pinGelesen == HIGH)
  {
    pinGelesen = LOW;
  }
  else
  {
    pinGelesen = HIGH;
  }

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.

Vielen Dank euch :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.