Pages: [1]   Go Down
Author Topic: digitalRead  (Read 682 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Sr. Member
****
Karma: 1
Posts: 353
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

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

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

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 5
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Sr. Member
****
Karma: 1
Posts: 353
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Arduino-IDE ist ja nur ein Layer oberhalb von C/C++,...
Um den ich, aufgrund meiner rudimentären C-Kenntnisse, sehr froh bin. smiley
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?

Logged

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

Wien
Offline Offline
Edison Member
*
Karma: 23
Posts: 1658
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 5
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

"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" smiley-wink
Logged


Pages: [1]   Go Up
Jump to: