buongiorno a tutti,sto usando il voltmetro segreto di arduino, ma esso mi restituisce il valore in millivolt
ho provato a dividerlo a /1000 ma non e' il modo corretto.come si fa per convertirlo in un float con 2 decimali?
grazie del vostro aiuto
long readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate AVcc in mV
return result;
}
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println( readVcc(), DEC );
delay(1000);
}
Scusa, ma quel valore è definito come "long" ossia un intero 32 bit, come pensi di avere un valore decimale dividendolo per 1000? Devi convertirlo in float, ad esempio per avere 2 decimali:
... ripeto che, fino a quando è possibile, è molto meglio e più precisio lasciar stare i float (lenti e imprecisi) e lavorare sul long ...
... con poche operazioni sui numeri interi ricavi la parte intera e la parte decimale con la precisione che ti occorre
gpb01:
Ti rammento che su Arduino i float sono a 32 bit e i valori con un discreto arrotondamento ...
Si, certo, ma immagino che le (circa) 6-7 cifre significative dei float siano sufficienti per ciò che deve farci (se misura in millivolt diciamo che avrà 4 o 5 cifre significative).
L'alternativa è prendere il valore e "segarlo" in due:
long Vcc = readVcc();
int V = Vcc/1000;
int mV = Vcc - V*1000;
Serial.print(V);
Serial.print(",");
Serial.println(mV);
grazie delle vostre risposte,a me basta avere 2 decimali, che mi occorrono per avere una tensione di riferimento,
si e' vero ho notato che le float arrotondano, ma per l uso che mi serve vanno piu' che bene, e solo per sapere se la batteria e' carica
Considera pure che l'ADC di Arduino Uno è a 10 bit, perciò ha una risoluzione di 1/1024, quindi non puoi ottenere una granularità, un passo minore dello 0,1%.
penso che per visualizzare una tensione di una batteria che ,a sua volta ti dice se devi caricarla, penso che sia anche troppo precisa,
grazie ancora dell'vostro aiuto
buona serata