Ich habe einen Arduino Due und möchte alle analogen Pins (0 bis 11) auslesen und über den seriellen Monitor ausgeben. Wie mache ich das, ohne dabei für jeden einzelnen Pin eine Variable manuell zu erstellen und einzeln für jeden Pin den analogRead-Befehl nutze?
Ich hatte da was mit for-Schleifen und Arrays gelesen, komme aber konkret nicht weiter. Kann mir hier jemand helfen?
Mit einem delay kann ich jedoch nicht arbeiten, da es hier auf hohe Abtastraten ankommt. Es sollen nur die analogen Werte durch ein Leerzeichen getrennt angezeigt werden und danach eine neue Zeile begonnen werden und dann wiederholt sich das.
Das ist bei mir nur drin, damit die Ausgabe nicht gnadenlos durchrauscht.
Nötig ist das keinesfalls, und die Alternative findest du in der "Nachtwächter Erklärung"
Wofür baust du das "+A0" ein?
Weil 2 + A0 eben A2 ist.
Auf dem Due ist Pin A0 das gleiche wie 54.
A2 ist Pin 56
Serial.println(A0); zeigt dir das auch.
for(int i = 0; i < 12; i++)
{
Serial.print(analogRead(i));
Serial.print(" ");
}
Geht auch!
Ob man den Pin 54 als 0 oder A0 anspricht, ist dem analogRead() egal.
Der biegt das passend.
Dem digitalRead() und write allerdings nicht.
Wenn's auf Geschwindigkeit ankommt, sollte man vll. das Terminal 'etwas' schneller als mit 9600 Baud laufen lassen - hier braucht jedes Zeichen eine Millisekunde - in der Zeit kann man aber schon die nächste Messung durchackern.
Der Vorteil der 'A0'-Methode: man sieht, was passiert.
Und wie Combie schon schrieb: spätestens, wenn Du digital an den Pin willst, zeigen die Nummern <'A0' auf andere Pins - was Einem durchaus ein paar nette Minuten der Fehlersuche bescheren kann.
Jedoch habe ich da noch ein Problem mit. Ich möchte die Ergebnisse eines Durchlaufes (also je einmal A0 bis A11) in einer Reihe haben und dann eine neue Zeile anfangen. Ich hatte da an eine if-Abfrage gedacht, die auf a = 11 reagiert, bekomme es jedoch nicht hin.
Mein bisheriger Code:
void setup() {
Serial.begin(9600);
}
void loop() {
for(int a = 0; a <= 11; a++)
{
Serial.print(analogRead(a + A0));
Serial.print(" ");
}
}
Wie erweitere ich diesen Code, damit er nach jedem Durchlauf eine neue Zeile anfängt?
Noch eine Frage: Bekomme ich das irgendwie hin, dass die Werte immer vierstellig sind, damit die Spalten geordnet sind? Z.B. wenn der Wert 58 ist soll 0058 angezeigt werden.
Noch eine Frage: Bekomme ich das irgendwie hin, dass die Werte immer vierstellig sind, damit die Spalten geordnet sind? Z.B. wenn der Wert 58 ist soll 0058 angezeigt werden.
Warum sollte man das tun?
Gegenanzeigen:
Offensichtlich ist "Geschwindigkeit" hier eine Anforderung. Ein Aufblähen des Datenaufkommens ist da mehr als kontraproduktiv.
Vorlaufende Nullen sind (nicht nur) in der C und C++ Welt ein Indiz für die oktale Zahlendarstellung. Sollte man sich dieser Verwirrung, sehendes Auges, hingeben?
Noch eine Frage: Bekomme ich das irgendwie hin, dass die Werte immer vierstellig sind, damit die Spalten geordnet sind? Z.B. wenn der Wert 58 ist soll 0058 angezeigt werden.
z.B. damit alphabetischer und numerischer Vergleich dasselbe Ergebnis < = > liefern?
Damit immer die gleiche Anzahl Zeichen übertragen werden?
Damit bei Zahlen nur die Zeichen '0' ... '9' übertragen werden, und ' ' leicht als Trennzeichen erkannt werden kann?
Serial.begin(9600);
Offensichtlich ist die Anforderung an "Geschwindigkeit" hier relativ moderat.