Forum: Mikrocontroller und Digitale Elektronik digitalWrite(LED_YELLOW, state HIGH : LOW) was macht dieser Code?


von Thorsten S. (th_schwalb)


Lesenswert?

Hiho,

was macht dieser Befehl? Ist das eine zustandsabhängige Schaltung des 
Pins?

Hab leider nichts darüber gefunden.

von my2ct (Gast)


Lesenswert?

Thorsten S. schrieb:
> Hab leider nichts darüber gefunden.

Google geht bei dir nicht?
Hier:
https://www.arduino.cc/reference/de/language/functions/digital-io/digitalwrite/

von Georg G. (df2au)


Lesenswert?

Welche Programmiersprache soll das sein? Kannst du bitte einen etwas 
größeren Schnipsel präsentieren? Bist du sicher, dass es kein 
Schreibfehler ist?

von Patrick C. (pcrom)


Lesenswert?

Ich nehme an du meinst "digitalWrite(LED_YELLOW, state ? HIGH : LOW);"

das ist funktionell aehnlich wie
if (state) digitalWrite(LED_YELLOW, HIGH);
else digitalWrite(LED_YELLOW, LOW);

Patrick aus die Niederlaende

von Stefan F. (Gast)


Lesenswert?

Das wäre der "Ternäre Operator".

<wenn ausdruck wahr> ? <dann dies> : <sonst das>

Beitrag #6686976 wurde von einem Moderator gelöscht.
von Thorsten S. (th_schwalb)


Lesenswert?

Danke, mit den letzten 2 Infos kann ich etwas anfangen.


Gruß
Thorsten

Beitrag #6687023 wurde von einem Moderator gelöscht.
Beitrag #6687029 wurde von einem Moderator gelöscht.
von Falk B. (falk)


Lesenswert?

Patrick C. schrieb:
> Ich nehme an du meinst "digitalWrite(LED_YELLOW, state ? HIGH : LOW);"

Das ist eine Tautologie.

https://de.wikipedia.org/wiki/Tautologie_(Logik)

Nicht nur, daß man den ternären Operator in normalen Code außerhalb von 
Macros eher meiden sollte, auch so ist es doppelt gemoppelt.

digitalWrite(LED_YELLOW, state);

Tut das Gleiche, allerdings deutlich einfacher lesbar ;-)

von Snoop (Gast)


Lesenswert?

Aber doch nur, wenn State auch ein Bool ist, oder?
Bei nem Integer würde er versuchen einen Int Wert in das Register des 
LED Pins zu schreiben. Also wahrscheinlich den aktuellen Wert des 
untersten Bit von State.

Beitrag #6687062 wurde von einem Moderator gelöscht.
von Stefan F. (Gast)


Lesenswert?

Falk B. schrieb:
> digitalWrite(LED_YELLOW, state);
> Tut das Gleiche, allerdings deutlich einfacher lesbar ;-)

Snoop schrieb:
> Aber doch nur, wenn State auch ein Bool ist, oder?
> Bei nem Integer würde er versuchen einen Int Wert in
> das Register des LED Pins zu schreiben.

Nein. Schau in den Quelltext!
1
void digitalWrite(uint8_t pin, uint8_t val)
2
{
3
  ...
4
  if (val == LOW) {
5
    *out &= ~bit;
6
  } else {
7
    *out |= bit;
8
  }
9
  ...
10
}

von Falk B. (falk)


Lesenswert?

Und LOW ist als

#define LOW 0

 definiert.

von Snoop (Gast)


Lesenswert?

Okay Danke. Laut der Arduino Beschreibung aus dem Link im zweiten Post 
dürfte als Wert eigentlich nur High oder Low migegeben werden.

Parameter

pin: Die Arduino-Pinnummer.
value: HIGH oder LOW.

dennoch fangen sie auch alle anderen Werte ab. Beschreibung der Funktion 
ist also inkonsistent zum Quellcode. In der Beschreibung gibt es auch 
den Quellcode der Funktion oder einen Link dahin erst gar nicht.

von Stefan F. (Gast)


Lesenswert?

Snoop schrieb:
> Beschreibung der Funktion ist also inkonsistent zum Quellcode.

So ist das bei Arduino. Dazu kommt, dass die konkrete Implementierung je 
nach Core (µC) variiert.

Ich gucke andauernd in den konkreten Quelltext um mich zu vergewissern, 
dass da auch wirklich das passiert, was ich erwarte.

von Einer K. (Gast)


Lesenswert?

Snoop schrieb:
> Laut der Arduino Beschreibung aus dem Link im zweiten Post
> dürfte als Wert eigentlich nur High oder Low migegeben werden.

Man kann der Funktion alles überreichen, was in einen uint8_t 
konvertierbar ist.
Und das ist bei bool eben auch der Fall.
Die Regeln sind klar.

Snoop schrieb:
> In der Beschreibung gibt es auch
> den Quellcode der Funktion oder einen Link dahin erst gar nicht.
Es ist nur eine Beschreibung des Interface der Funktion.
Auch nachvollziehbar, da es dutzende von digitalWrite() 
Implementierungen gibt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.