betrifft: digitalWrite(Pin, Value)
Ist es ok, wenn Value nicht 1, sondern ein beliebiger (byte) Wert <> 0
ist?
Habe im internet nichts dazu gefunden, hier wird immer nur LOW oder HIGH
als Argument genannt.
Georg S. Ohm schrieb:> Such nach C++ Bool
sorry, das ist leider keine Definitionsfrage von Bool allgemein.
Ich weiß ja nicht, ob es Sonderlocken gibt.
so wie z.B. bei pinMode INPUT und OUTPUT (Wert 0 oder 1)
Es gibt da auch noch INPUT_PULLUP (Wert 2)
Daher die Frage, ob bei digitalWrite ein beliebiger (byte) Wert <> 0
als TRUE (oder HIGH, ...) anerkannt wird, oder ob es auch hhier mir
unbekannte Sonderlocken gibt.
digitalWrite schrieb:> Ist es ok, wenn Value nicht 1, sondern ein beliebiger (byte) Wert <> 0> ist?
In der Doku ist als Wertebereich angegeben [LOW,HIGH] und (für AVR) der
Datentyp als uint8_t festgelegt (s. Quellcode in
.\hardware\arduino\avr\cores\arduino/wiring_digital.c)
https://www.arduino.cc/reference/en/language/functions/digital-io/digitalwrite/val wird intern auf "== LOW" geprüft, alles andere wird folglich
derzeit als HIGH behandelt.
digitalWrite schrieb:> Ist es ok, wenn Value nicht 1, sondern ein beliebiger (byte) Wert <> 0> ist?
Ja. In C hat jeder Wert != 0 den boolschen Wert true.
Der besseren Lesbarkeit wegen schreib einfach:
Georg S. Ohm schrieb:> Weil das nicht Arduino-spezifisch, sondern C++ spezifisch ist.>> Such nach C++ Bool
Doch, das ist Arduino-spezifisch - ein C++ bool hätte wohl kaum den Wert
LOW oder HIGH.
Ebenso Arduino-spezifisch ist leider, dass man das im Quelltext
nachsehen muss, weil die Dokumentation ziemlich vollständig auf
Datentypen verzichtet.
Trotzdem würde ich mich an die Dokumentation halten, also nur die
#defines HIGH und LOW übergeben. Denn wenn übermorgen jemand vom
Arduino-Team meint, alles andere soll ignoriert werden, LOW soll 17 und
HIGH 35 sein, dann darf er das (zumindest habe ich nirgendwo die
Definition gefunden, die das verbietet).
MfG, Arno
Hallo,
Arno schrieb:> Trotzdem würde ich mich an die Dokumentation halten, also nur die> #defines HIGH und LOW übergeben. Denn wenn übermorgen jemand vom> Arduino-Team meint, alles andere soll ignoriert werden, LOW soll 17 und> HIGH 35 sein, dann darf er das (zumindest habe ich nirgendwo die> Definition gefunden, die das verbietet).
das ist der Preis, den man für die Abstraktion zahlen muß.
Dafür setzt eben ein pinMode(0,OUTPUT) auch einen Pin am ESP32 auf
Output. Egal, ob da die IO-Matrix und anderer Kram dazwischen liegt.
Dafür setzt eben auch ein Wire(7,3); dort die Pins von I2C, auch wenn er
da die Pins noch auf die I2C-Hardware mappen muß oder SoftI2C nutzt,
wenn das nicht möglich.
Gruß aus Berlin
Michael
Michael U. schrieb:> Arno schrieb:>> Trotzdem würde ich mich an die Dokumentation halten, also nur die>> #defines HIGH und LOW übergeben. Denn wenn übermorgen jemand vom>> Arduino-Team meint, alles andere soll ignoriert werden, LOW soll 17 und>> HIGH 35 sein, dann darf er das (zumindest habe ich nirgendwo die>> Definition gefunden, die das verbietet).>> das ist der Preis, den man für die Abstraktion zahlen muß.> Dafür setzt eben ein pinMode(0,OUTPUT) auch einen Pin am ESP32 auf> Output. Egal, ob da die IO-Matrix und anderer Kram dazwischen liegt.> Dafür setzt eben auch ein Wire(7,3); dort die Pins von I2C, auch wenn er> da die Pins noch auf die I2C-Hardware mappen muß oder SoftI2C nutzt,> wenn das nicht möglich.
Ich glaube nicht, dass das der Preis für Abstraktion ist - die könnte
man ja noch viel schöner mit einem enum portpinLevels umsetzen - dann
würde sich die Frage gar nicht stellen, ob andere Werte als HIGH, LOW,
true, false, 0, 1 übergeben werden dürfen.
Ich glaube eher, das ist der Preis für "wir machen es so einfach und
niedrigschwellig wie möglich" - und schreiben daher in der Dokumentation
eben nicht
Hallo,
Arno schrieb:> Ich glaube eher, das ist der Preis für "wir machen es so einfach und> niedrigschwellig wie möglich" - und schreiben daher in der Dokumentation> eben nicht
...
Arno schrieb:> Das ist auch durchaus ein valides Ziel, nur muss man eben dann gewisse> Preise dafür zahlen.
ich stimme Dir hier voll zu. Man sollte nicht vergessen, wie "Arduino"
entstanden ist, ein paar Künstler sollten ihre Ausstellungseffekte
selber basteln können...
Ich glaube, den Weg den die Philosophie "Arduino" inzwischen gegangen
ist, hat wohl keiner damals vorausgesehen.
Gruß aus Berlin
Michael
Michael U. schrieb:> ich stimme Dir hier voll zu. Man sollte nicht vergessen, wie "Arduino"> entstanden ist, ein paar Künstler sollten ihre Ausstellungseffekte> selber basteln können...
Also dass ein Künstler die Hard- u. Software entwickelt hat, kann ich
mir nicht vorstellen. Dann wäre der Künstler ja ein richtiger Künstler
;-)
digitalWrite schrieb:> Michael U. schrieb:>>> ich stimme Dir hier voll zu. Man sollte nicht vergessen, wie "Arduino">> entstanden ist, ein paar Künstler sollten ihre Ausstellungseffekte>> selber basteln können...>> Also dass ein Künstler die Hard- u. Software entwickelt hat, kann ich> mir nicht vorstellen. Dann wäre der Künstler ja ein richtiger Künstler> ;-)
"ein paar Künstler sollten" nicht "ein paar Künstler wollten" ;-)
Ich verweise hier mal auf
https://de.wikipedia.org/wiki/Arduino_(Plattform)
Irgendwo gab es auch mal eine Diskussion dazu, auch warum ein Arduino
UNO so eine seltsame Anordnung bei den Anschlußleisten hat.
Gruß aus Berlin
Michael
Peter D. schrieb:> Ja. In C hat jeder Wert != 0 den boolschen Wert true.> Der besseren Lesbarkeit wegen schreib einfach: digitalWrite(Pin,> (bool)Value);
Damit setzt du voraus, dass LOW als false oder true definiert ist.
Wolfgang schrieb:> Damit setzt du voraus, dass LOW als false oder true definiert ist.
#define LOW 0
0 LOW und false sind hinreichend gleich genug, damit man sie bei
digitalWrite() verwenden kann
Alles andere ist eben nicht "LOW" und damit eher dem HIGH zuordnen.
#define HIGH 1
Michael U. (amiga)
>ich stimme Dir hier voll zu. Man sollte nicht vergessen, wie "Arduino">entstanden ist, ein paar Künstler sollten ihre Ausstellungseffekte>selber basteln können...
Hallo Michael,
hast Du das hier schon mal gelesen?:
https://github.com/ArduinoHistory/arduinohistory.github.io/blob/master/index.md
Solltest Du mal machen.
Michael U. schrieb:> Man sollte nicht vergessen, wie "Arduino" entstanden ist,
das hat aber nun nichts mit der Fragestellung zu tun.
Arduino beschreibt zwei Varianten:
1
digitalWrite(PinNr,HIGH);
2
digitalWrite(PinNr,LOW);
Ich bin etwas verwundert, dass die IDE
1
digitalWrite(PinNr,17);
2
digitalWrite(PinNr,257);
klaglos übersetzt.
Was für ein Ergebnis sich daraus ergibt, habe ich nicht getestet, aber
ich würde als zufällig / undefinert ansehen und nicht machen.
Manfred schrieb:> Ich bin etwas verwundert, dass die IDEdigitalWrite(PinNr, 17);> digitalWrite(PinNr, 257);klaglos übersetzt.>> Was für ein Ergebnis sich daraus ergibt, habe ich nicht getestet, aber> ich würde als zufällig / undefinert ansehen und nicht machen.
Braucht dich nicht zu wundern.....
Und kannst du verwenden.
Passt alles zur Definition, oder wird impliziet richtig gecastet
1
// die eine Fraktion (macht sich low Pegel)
2
digitalWrite(13,0);
3
digitalWrite(13,LOW);
4
digitalWrite(13,false);
5
6
// und die andere (macht sich high Pegel)
7
digitalWrite(13,1);
8
digitalWrite(13,HIGH);
9
digitalWrite(13,true);
10
digitalWrite(13,42);
auch immer wieder gerne genommen, mit Bedingung:
digitalWrite(13, haufen > 22);
Manfred schrieb:> Ich bin etwas verwundert, dass die IDE> digitalWrite(PinNr, 17);> digitalWrite(PinNr, 257);> klaglos übersetzt.
Die 257 wird dir der Compiler auf 1 zusammen streichen (wg. uint8_t) und
sollte eine Warnung schmeißen)
Ansonsten lies noch mal:
Wolfgang schrieb:> In der Doku ...
Wolfgang schrieb:> Manfred schrieb:>> Ich bin etwas verwundert, dass die IDE digitalWrite(PinNr, 17);>> digitalWrite(PinNr, 257);>> klaglos übersetzt.> Die 257 wird dir der Compiler auf 1 zusammen streichen (wg. uint8_t) und> sollte eine Warnung schmeißen)
Glück gehabt.
Bei digitalWrite(PinNr,512) kommt nämlich (zusätzlich zur Warnung, die
aber keiner liest) eine 0 und damit ein FALSE raus.
Michael U. schrieb:> Irgendwo gab es auch mal eine Diskussion dazu, auch warum ein Arduino> UNO so eine seltsame Anordnung bei den Anschlußleisten hat.
Ich hätte die vermurksten Vorserienplatinen weggeschmissen. Oder nur für
den "Eigengebrauch" eingesetzt...
Lothar M. schrieb:> vermurksten
Mich nervt die Anordnung auch etwas....
Es stört, wenn man sich selber "Shields" mit Lochrasterplatinen bauen
will.
Aber da gibts ja genug Arduino Alternativen, nur mal Pro Mini, Micro
genannt, die das "Problem" nicht haben. Wohl mit Absicht nicht haben.
Aber sonst, ist das schon eine zuverlässige "Verdrehsicherung". Ohne
Hammer bekommt man ein Shield nicht falsch auf einem UNO drauf.
Es hilft gegen Rauch bei Trottelfehlern.
Also klar:
Für mich hätten sie das nicht so bauen müssen.
Aber ich weiß auch nicht, ob mich das schon vor Schaden beschützt hat.
Ist halt ein codiertes Stecksystem.
Vergleichbar mit Sub-D. Aber da regt sich keiner über die Unsymmetrie
der Stecker auf. Ok, da kommt auch wohl kaum einer auf die Idee sich
selber Stecker zu basteln.
Hallo,
Arduino Fanboy D. schrieb:> Mich nervt die Anordnung auch etwas....> Es stört, wenn man sich selber "Shields" mit Lochrasterplatinen bauen> will.
ein Bekannter hat diese Version mal irgendwo im 5er Pack zum Sparpreis
gekauft:
https://www.ebay.de/itm/DIY-Proto-Shield-Punktraster-Prototyping-Shield-fur-Arduino/181861465251?hash=item2a57c9bca3:g:~zcAAOSwgkRVUz~o:rk:2:pf:0
Entweder direkt als Lochraster oder als Adapter auf ein praktikables
Rastermaß gut nutzbar.
> Aber da gibts ja genug Arduino Alternativen, nur mal Pro Mini, Micro> genannt, die das "Problem" nicht haben. Wohl mit Absicht nicht haben.
Nano, mein meistgenutzer Arduino wenn es mal ein AVR sein soll.
Gruß aus Berlin
Michael
Eine eigene Frage?
Dieser Thread ist über 7 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.