analogRead

Hallo,

wie heißt es richtig:

analogRead(A0) oder analogRead(0)?

Oder ist es egal?

Gruß
OMT.

http://arduino.cc/en/Reference/AnalogRead

Parameters
pin: the number of the analog input pin to read from (0 to 5 on most boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega)

Der Parameter ist also eine ganze Zahl (Integer).

omthomas:
analogRead(A0) oder analogRead(0)?
Oder ist es egal?

Wie hat damals Wolfgang Petry in einem seiner Lieder gegrölt? Schei*egal!
OK, ich weiß nicht, ob du den Typen mit den bunten Freundschaftsbändchen noch kennst, aber die Erklärung ist wie folgt:

AO ist in "pins_arduino.h" als Konstante mit dem Wert 14 definiert.
Und im Code von analogRead() in der Datei "wiring_analog.c" wird ziemlich am Anfang kontrolliert, ob die Pin-Nummer gleich oder größer als 14 ist und dann wird 14 abzogen. Was wiederum in deinem Beispiel auch 0 ergibt. Dadurch ist die Angabe entweder als Arduino-Pinnummer oder als Nummer des Kanals möglich.

Ich hätte da auch noch eine Frage :slight_smile:

Dann macht es also keinen Sinn, Pins mit "const" oder "#define" zu deklarieren?
Wo ist eigendlich der Unterschied zwischen const und #define?

omthomas:
analogRead(A0) oder analogRead(0)?

Oder ist es egal?

Das ist auf allen 8-bit Arduinos egal.

Und auf dem 32-bit Arduino Due knobeln die Macher der Software wohl noch, ob das da auch so wird, jedenfalls funktioniert da derzeitig in der Betaversion der Arduino-Version für den Due nur die Variante analogRead(0).

fckw:
Wo ist eigendlich der Unterschied zwischen const und #define?

Mit

 const uint8_t A0 = 14;    // Beipiel aus pins_arduino.h

wird eine (konstante) Variable angelegt, die den Wert 14 hat.

Klasse Ausdruck, oder? "Konstante Variable". D.h. sie kann nach der Initialisierung mit dem Wert 14 nicht mehr verändert werden, aber wie jede andere Variable gelesen werden.

Mit

#define A0  14

wird vom Präprozessor des C-Compilers ein Text-Ersatz durchgeführt (also im Programmcode überall A0 durch 14 ersetzt) und dann der Programmcode mit den durchgeführten Textersetzungen an die nächste Stufe des Compilers weitergegeben.

Hallo zusammen,

DANKE für die Erläuterungen!

gruß
omthomas

Wo ist eigendlich der Unterschied zwischen const und #define?

Ein kleiner Nachtrag:
Bei const definierst du auch einen Datentyp,
const ist also von der Programm-Klarheit her eigentlich besser ( wenn du den richtigen Datentyp, statt einfach "int" verwendest ).

Wenn alles richtig läuft, macht es keinen großen Unterschied. Der Compiler legt oft für const keine "echten" Variablen in RAM an, sondern optimiert das.
Im Fehlerfall bekommst du andere Meldungen :wink:

ok, jetzt wird einiges Verständlicher, auch ich danke euch :slight_smile: