para convertir un valor analógico a uno digital se me ocurrió convertir a entero el resultado y después dividirlo por 10 para obtener un resultado. Cual fue mi sorpresa cuando me aparecían valores de XX,01 ó XX,99.
haciendo pruebas, he visto que la división por 10 no es perfecta. Pongo a continuación un ejemplo:
float dato;
void setup()
{
Serial.begin(9600);
}
void loop() {
dato = 952 /100.0;
dato = dato * 10000;
Serial.println(dato);
//dato debería ser 95.200, pero es 95.200,01
PARA: goto PARA;
}
Las operaciones con coma flotante no son totalmente exactas debido a la forma en que se guardan los números, ya que dichos números son aproximaciones y no valores exactos, por ejemplo, para guardar 0.1 en un micro nunca se conseguirá el valor exacto de 0.1 si no que será algo como 0.100000579245.
Si quieres verlo un poco más a fondo, está muy bien explicado en la documentación de python:
Solución? pues poca hay, ya que no es un fallo de programación o de librerías, si no de la forma de almacenar los números.