No código abaixo alguem poderia explicar a necessidade de no divisor estar o valor 1024.0 e não simplesmente 1024 ? Os dois operadores precisam ser float ?
void loop(){
int adcValue = analogRead(A1); // Raw value
float voltage = adcValue * 4.096/1024.0; // Voltage calculation
Serial.print("Analog Value: ");
Serial.println(adcValue);
Serial.print("Voltage [V]: ");
Serial.println(voltage,3);
delay(1000);
}
De uma perspectiva de especificação C++ pura em promoções de tipo e prioridades de operadores ao avaliar expressões matemáticas, o compilador primeiro avaliará adcValue * 4.096 e depois dividirá por 1024.
adcValue é um int e 4.096 é um float. A regra afirma que, como há um operando float, adcValue será promovido a float e a operação será conduzida como float e o tipo intermediário resultante é float
então você faria intermediaryResult / 1024. Novamente, como intermediaryResult é um float e 1024 é um int, a regra afirma que 1024 será promovido a float e a operação será conduzida como float e o tipo final resultante é float
resumindo, não - o 1024.0 não era necessário, mas é uma boa prática e uma maneira fácil de garantir que a fórmula funcione da maneira que você espera se não conhecer as regras.