Realmente no entiendo que es lo que pasa, este codigo funciona perfectamente:
void loop() {
int Temperatura = analogRead(A0);
int c= (500*Temperatura)/1023;
lcd.setCursor(2,1);
lcd.print(c);
delay(1000);
}
Pero cuando agrego la linea que esta en negrita, el valor de la variable C se desestabiliza y toma valores negativos y llega hasta miles.
void loop() {
int Temperatura = analogRead(A0);
int c= (500*Temperatura)/1023;
lcd.setCursor(2,1);
lcd.print(c);
delay(1000);
[i][b]int Humedad = analogRead(A15);[/b][/i]
}
No entiendo que pasa :(, no se puede usar dos sensores?
estoy usando un sensor de temperatura LM35 y un sensor de Humedad YL-69 en un arduino MEGA 2560, necesito poner las dos variables en una pantalla LCD, pero no puedo usar dos analogRead simultaneamente.
Deberías inicializar las varibles antes del loop, no meterlas ahi a pelo, porque las vas a estar inicializando todo el rato cada vez q ejecutes el bucle, igual por eso se hace la picha un lio.
int Temperatura, Humedad, T, H;
void loop()
{
Temperatura = analogRead(A0);
Humedad = analogRead(A15);
T= (500*Temperatura)/1023;
H= (Humedad)/1023;
lcd.clear();
lcd.setCursor(1,1);
lcd.print(T);
lcd.setCursor(2,1);
lcd.print(H);
delay(1000);
}
Lo que tienes es un problema de desbordamiento
si defines algo como entero como aquí
int c= (500*Temperatura)/1023;
resulta que si Temperatura fuera digamos 1000 tienes esta cuenta
1000x500 = 500000 y eso supera 32768 = 2^15 por lo tanto la aritmetica desborda y pasa a negativo porque justamente la notación con el bit 15 en 1 es para enteros negativos que van hasta 2^15-1
Entonces o defines como long o usas float.
Como siempre me queda algo por decir pongo las cosas de otro modo, en términos de temperatura.
Todo lo que supere 32768/500 = 65 en tu AD dará un desbordamiento.
o sea que traducido una vez mas 32768/500 es lo que corresponde a 32 grados.
Gracias a ambos, segui sus consejos y me fueron muy utiles. El float me ayudo a reducir demasiado la oscilacion y ya no pasaba a numeros negativos pero aun asi tenia una oscilacion de +-5 grados constante, para eso use un filtro pasabajos y soluciono al 100% mi problema.
Son cosas diferentes. Un tema es que te de valores negativos y otro son las oscilaciones o ruido presente en tu lectura del sensor LM35.
Una solución al segundo problema es un promedio de N valores.
Lees N valores usando analogRead() sin convertir en una variable unsigned long en la que los vas sumando.
Y al final usas esa variable y le aplicas lo mismo que estas haciendo además de dividirla por N.
La respuesta será un valor mas estable.