Sto provando a leggere una tensione da un ingresso analogico, utilizzo questo codice:
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
float v = map(analogRead(A0),0,1023,0,9.8);
Serial.println(v);
}
Non ho un problema di cifre stampate a schermo, dato che mi viene dato come risultato: "6.00".
Il problema è che per qualche motivo vengono "arrotondati" i calcoli e mi trovo risultati come 6.00 o come 7.00 (il risultato reale è 7.5 circa, misurato con tester).
Utilizzo un arduino nano.
EDIT:
un altro errore strano è che senza collegare niente nel pin analogico misuro comunque un input di circa 300 su 1023 (oscilla molto rapidamente).
checcoc:
... un altro errore strano è che senza collegare niente nel pin analogico misuro comunque un input di circa 300 su 1023 (oscilla molto rapidamente).
Nessun errore, è più che normale e, se cerchi sul forum, ne abbiamo parlato decine e decine di volte ...
... i pin di Arduino sono ad altissima impedenza e NON possono essere lasciati aperti dato che captano qualsiasi disturbo sia nell'aria. Gli analogici danno numeri a caso, i digitali oscillano tra LOW ed HIGH ... quindi, o NON si usano, o se si usano, DEVONO essere collegati a qualche cosa e mai lasciati aperti.
TU invece stai facendo un errore ed evidentemente NON hai studiato il reference della map() che dice chiaramente:
The map() function uses integer math so will not generate fractions, when the math might indicate that it should do so. Fractional remainders are truncated, and are not rounded or averaged.
... quindi, SOLO numeri interi e niente numeri con decimali (... che vengono troncati e nemmeno arrotondati).
...ma se moltiplichi per 9,8 e dividi per 1023 fai prima!
Se dividi per 104, fai prima ancora!
Senza float, se ti basta un decimale, dividi per 10,4: il risultato è in decimi di volt, che potrai visualizzare separando la cifra a destra mediante la virgola. Se vuoi anche fare l'approssimazione corretta, dopo aver diviso per 10,4 somma 0,5: la variabile intera prenderà solo la parte intera, che è approssimata.