in der Referenz steht das Beispiel, bei dem das Ergebnis des digitalRead in einer int-Variable gespeichert wird:
int ledPin = 13; // LED connected to digital pin 13
int inPin = 7; // pushbutton connected to digital pin 7
int val = 0; // variable to store the read value
void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output
pinMode(inPin, INPUT); // sets the digital pin 7 as input
}
void loop()
{
val = digitalRead(inPin); // read the input pin
digitalWrite(ledPin, val); // sets the LED to the button's value
}
Als Rückgabe bekommt man ja eh nur HIGH oder LOW.
Ich hab jetzt mal probiert, statt einer "int" eine "boolean" zu verwenden. Sieht bei mir so aus:
Klappt auch. Bekomme "0" und "1". je nachdem, ob ich den Eingang offen lasse ("0"), oder auf GND ziehe("1").
Ist das Zufall? Eigentlich reicht ja eine boolsche Variable. Und mit der kann man dann sowieso einfacher weiterarbeiten.
Die Arduino-IDE ist ja nur ein Layer oberhalb von C/C++, deswegen kann man ggf. auch "platzsparender" programmieren, als es oft in den Beispiel-Sketches getan wird. Zum Beispiel werden die (led)Pins gerne als int deklariert, wobei ein byte völlig reichen würde, bzw. man den Pin auch per #define dem Precompiler als Konstante übergeben könnte.
Genauso könnte man die Sketche auch direkt in C/C++ schreiben und libraries umgehen, wobei der Compiler da schon sicher einiges optimiert. Wenn man aber beispielsweise LEDs direkt über die µC-Register an-/ ausschaltet und den digitalWrite-Befehl umgeht, so ist das bedeutend schneller.
Ein sehr schönes Buch zu dem Thema gibt es vom Apress-Verlag "Arduino Internals", in dem von der Arduino-IDE ausgehend die darunter liegenden Schichten und deren Befehle/ Funktionsweise erläutert werden.
markbee:
Die Arduino-IDE ist ja nur ein Layer oberhalb von C/C++,...
Um den ich, aufgrund meiner rudimentären C-Kenntnisse, sehr froh bin.
Genau das macht den Arduino für mich so interessant.
Mich hat es halt nur gewundert, wieso da eine int verwendet wird, da es bei einem digitalen Eingang nur 2 Zustände gibt.
(Fuzzy-Logic mal nicht betrachtet) LOL
markbee:
...Zum Beispiel werden die (led)Pins gerne als int deklariert, wobei ein byte völlig reichen würde, ....
"Bit" als Datentyp gibt es in C/ C++ nicht, aber Du hast ja völlig Recht, man könnte natürlich auch "boolean" als Datentyp nehmen. Verbraucht allerdings wie der Datentyp "byte" oder in "Ur-C" genauer formuliert "unsigned char" auch genau ein Byte im Speicher.
Im "Ur-C" gab es übrigens nur die Datentypen char, int, float und double. Heute gibt es ja auch sowas wie "longlong"