Arduino analogRead () restituisce junk quando stampo via seriale
-
06-07-2019 - |
Domanda
Sto realizzando un orologio con Arduino e voglio creare un pulsante per impostare l'ora. Quindi, solo per testare, ho inserito un filo nel pin 0 dell'ingresso analogico e ho scritto due righe di codice per leggere il pin e stamparlo tramite seriale, ma tutto ciò che ottengo è spazzatura.
valm = analogRead(0);
Serial.println(valm);
E quello che ottengo dal monitor seriale è questo: ? J? D? ± µ? Ê ?? jdd? ± µ ??? ºjRd? ± µ ??? ºj? D? ± µ? Ê ?? j? D? ± µ? É? ªjRd? ± µ ?? ? ÊjRd? ± µ ??? AJ? d? ± µ ???? j? d? ± µ? É ?? j Rd? ± µ ???? j? D? ± µ ??? ºj? D? ± µ? É ?? JRD? ± µ ???? j? D? ± µ? Ê? ÊjDd? ± µ ?? ? AJ? d? ± µ ???? j? d? ± µ? É ?? JRD? ± µ ???? j? d ? ± µ? E? ÂjRd? ± µ ??? EJ? D? ± µ ??? ªj? D? ± µ? E? Ej $ d? ± µ ??? ÂjRd? ± µ ???? j? d? µ ± ???? jdd? ± µ ???? JRD? ± µ ??? AJ? d? ± µ? É? ÊjRd? ± µ ???? j? d? ± µ? Ò? ej? d? ± µ? É? ÂjRd? ± µ ???? j? d? ± µ ???? j? d? µ ±? É ?? JRD? ± µ ??? AJ? d? ± µ ??? EJ? d? ± µ? ?? ªj? D? ± µ ??? EJ? D? ± µ ??? ÂjRd? ± µ ???? j? D? ± µ ???? j? D? ± µ? É ?? JRD? ± µ ??? AJ? d? ± µ? o? ej? d? ± µ? e? ªj? d? ± µ? e? ? Jtd? ± µ ??? AJ? D? ± µ ???? j? D? ? ±? É ?? jrd? ± u ???? j? D? ± u? E? ÂjRd? ± µ? ?? EJ? d? ± µ? e? ªjRd? ± µ ??? EJ? d? ± µ ??? ºj ? D? ± µ? E ?? JTD? ± µ ???? JRD? ± µ ??? ªj? D? ± µ? E? ÂjTd? ± µ? E? ÊjRd? ± µ ??? ªj? D ? ± µ ??? EJ? d? ± µ ??? ºj? d? ± µ? É ?? JRD ? ± µ ??? EJ? D? ± µ ??? ªj? D? ± µ? É? ÂjPd? ± µ ??? EJ? D? ± µ ??? ªj? D? ± µ? Â? Ej ? d? ± µ? e? ºjRd? ± µ ???? j? d? ± µ? É ?? JRD? ± µ ??? ªj? d? µ ±? Ê? AJ? d? µ ± ??? ÊjRd? ± µ ??? ªj? d? µ ±? Ò? ej? d? µ ± ??? ºjRd? ± µ ???? j? d? ± µ ??? EJ? d? ± u? e? ªjdd? ± µ? ?? ÂjRd? ± µ ??? AJ? D? ± µ? É? ªjPd? ± µ ??? EJ? D? ± µ ???? j? D? ± µ? É ?? JRD? ± µ? ?? EJ? d? ± µ? e? ªjdd? ± µ ??? ÂjRd? ± µ ??? AJ? D? ± µ? É? ªjDd? ± µ ??? EJ? D? ? ±? Ê ?? j? D? ± µ? É ?? JRD? ± µ ??? ÊjRd? ? ± ??? ªj? d? ± µ? e? ÂjPd? ± µ ??? AJ? d? ± µ ??? ªj ? D? ± µ? E? Êjdd? ± µ? É ?? JRD? ± µ ???? j? D? ± µ? E? Ej $ d? ? ± ??? ªjRd? ± µ ??? Aj ? d? µ ±? Â? ÂjTd? ± µ ??? ªj? d? ± µ ??? ej? d ? ± µ ???? JRD? ± µ ???? j? D? ± µ? É? ÊjTd? ± µ ??? ªjRd? ± µ ??? AJ? D? ± µ ??? Aj? D ? ± µ? e? ªjRd? ± µ ??? ÊjRd? ± µ? Ò ?? jtd? ± µ ???? j? d? ± µ ??? EJ
Perché?
Modifica:
Avevo impostato il pin digitale 0 in uscita e pensavo che forse questo fosse il problema, quindi sono andato sul sito Web di Arduino e ho trovato la pagina Pin di ingresso analogico .
Quindi ho provato a leggere dal pin 14 che dicono sia il pin 0 dell'ingresso analogico, ma ho ottenuto lo stesso output.
A proposito, sto provando a leggere solo i pin analogici, non quelli che sono anche digitali.
Soluzione
Prova a eseguire questo codice di esempio presente sul sito Web di Arduino. Non dovresti aver bisogno di convertire la variabile valm
o altro.
/*
Analog input
Reads an analog input on analog in 0, and prints the value out.
Created 24 March 2006
by Tom Igoe
*/
int analogValue = 0; // Variable to hold the analog value.
void setup() {
// open the serial port at 9600 bit/s:
Serial.begin(9600);
}
void loop() {
// Read the analog input on pin 0:
analogValue = analogRead(0);
// Print it out in many formats:
Serial.println(analogValue); // print as an ASCII-encoded decimal
Serial.println(analogValue, DEC); // print as an ASCII-encoded decimal
Serial.println(analogValue, HEX); // print as an ASCII-encoded hexadecimal
Serial.println(analogValue, OCT); // print as an ASCII-encoded octal
Serial.println(analogValue, BIN); // print as an ASCII-encoded binary
Serial.println(analogValue, BYTE); // print as a raw byte value
// Delay 10 milliseconds before the next reading:
delay(10);
}
Se l'output è ancora incomprensibile, c'è qualcosa di sbagliato nel tuo terminale seriale.
Altri suggerimenti
Il problema Qui è che i dispositivi analogici che potresti collegare non sono gli stessi potenziali di terra. Esempio: se si accende la scheda Arduino tramite PC e sensore utilizzando un'altra fonte, ma si sta tentando di leggere il valore dalla porta Arduino, per questo istante viene visualizzato l'errore sopra. Prova questo potere su arduino e sensore dalla stessa fonte di alimentazione e prova a leggere i dati utilizzando la porta seriale tramite DOcklight otterrai problemi risolti.
È necessario impostare la velocità di trasmissione nella finestra del monitor seriale (angolo in basso a destra) sullo stesso valore impostato nel codice (ad es. Serial.begin (9600);
).
Da come appare il tuo output, sembra che tu debba convertire valm in una stringa, in modo da poter stampare il valore numericamente.
Inoltre, il filo collegato all'analogico è flottante? Perché se lo è, si comporterà come un'antenna e catturerà un rumore casuale (anche se potrebbe avere un forte componente a 60Hz).