Ich möchte etwas in der Art von tun
for (int i = 0; i < 4; i++) {
analogRead(i);
}
Was zu funktionieren scheint, aber das Folgende nicht:
for (int i = 0; i < 4; i++) {
pinMode(i, INPUT);
pinMode(i + 4, OUTPUT); // should make Analog Pin (i + 4) into an output
digitalWrite(i + 4, LOW);
analogRead(i);
}
Stattdessen scheint es den von adressierten Pin digitalWrite(i + 4, LOW);
als einen der digitalen Pins zu behandeln.
Muss ich A0, A1, A2, ... wirklich explizit angeben, wenn ich die analogen Pins durchlaufen möchte?
programming
c++
analogread
hoosierEE
quelle
quelle
Antworten:
Ja, die analogen Pins müssen mit A0, A1, ... adressiert werden, wenn sie für digitale E / A verwendet werden.
Je nach Karte verwenden Sie A0, A1 usw. werden unterschiedlichen Werten zugeordnet (zum Beispiel sieht es so aus, als ob A0 auf einigen Karten 18, auf anderen 14 ist.
Eine Lösung für das Schleifen über die analogen Pins wäre folgende:
Wenn Sie die analogen Pins nur mit dem
analogRead()
Anruf verwenden, können Sie 0,1, ... anstelle von A0, A1, ... verwenden.quelle
digitalWrite(i)
davon ausgegangen , dassi
an einen digitalen Stift bezieht; Um digitalWrite mit einem analogen Pin zu verwenden, muss das Präfix "A" angegeben werden.Zumindest ein Uno / Megas / Leonardo, alle Werte, die analogen Pin-Nummern zugeordnet sind, sind also aufeinanderfolgend
setzt A0, A1, A2 und A3 auf OUTPUT und dann auf LOW.
quelle
Die Pins 14 bis 19 sind die analogen Pins A0 bis A5.
A0
ist nur ein Alias für14
und so weiter.Also eine andere Art, BrettMs Antwort zu schreiben:
quelle
Ihre erste Schleife wird gut funktionieren in der Tat, aber man könnte hinzufügen möchten ,
delay(1);
nachdem SieanalogRead(i);
, der ADC einige Zeit , um sich zu geben.Könnten Sie näher erläutern, was Sie mit Ihrem zweiten Code tun möchten? Aus heutiger Sicht ist es nicht wirklich sinnvoll, analoge Eingänge als digitale Ausgänge zu verwenden .
Außerdem versuchen Sie, den Eingang eines Pins nur ein paar Zeilen zu lesen, nachdem Sie den Pin als Ausgang angegeben haben.
Bitte erklären Sie, was Sie erreichen möchten, damit die netten Leute hier Ihnen besser helfen können.
quelle
Ich weiß, dass dies alt ist, aber wenn Sie Ihre Maus in Visual Micro über A0 bis A7 bewegen, wird der wahre Wert angezeigt. Es handelt sich lediglich um eine Variable (tatsächlich wird 14U angezeigt, aber während der Adressierung müssen Sie das U nicht einschließen). . Was Craig gesagt hat, ist falsch, sie müssen NICHT von A0, A1 usw. angesprochen werden.
A0 = 14 A1 = 15. . A7 = 21
Die letzte for-Schleife sagt im Grunde i = 1 (A0) und stoppt bei 21 (A7).
quelle