Go Down

Topic: digitalRead (Read 913 times) previous topic - next topic

hk007

Hi,

in der Referenz steht das Beispiel, bei dem das Ergebnis des digitalRead in einer int-Variable gespeichert wird:
Code: [Select]
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:
Code: [Select]

const int S_AUF = 8; 
boolean S_AUF_act;
pinMode(S_AUF, INPUT_PULLUP);
S_AUF_act = !digitalRead(S_AUF);
Serial.println(S_AUF_act);

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.

gruß/hk007
Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

markbee

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.
XBee blog: http://lookmanowire.blogspot.com/

hk007


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


...Zum Beispiel werden die (led)Pins gerne als int deklariert, wobei ein byte völlig reichen würde, ....

"byte".... du meinst "Bit" oder?

Arduino 1.0.5 | Arduino UNO & MEGA | Arduino 1.54r2 mit DUE

Eisebaer

hi,

Quote
Quote from: markbee on Today at 22:56:13
...Zum Beispiel werden die (led)Pins gerne als int deklariert, wobei ein byte völlig reichen würde, ....

"byte".... du meinst "Bit" oder?


eine bit-variable braucht ein byte speicherplatz, also egal

gruß stefan
nimm abblockkondensatoren!  100nF.  glaub mir, nimm abblockkondensatoren!

markbee

"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" ;)
XBee blog: http://lookmanowire.blogspot.com/

Go Up