Hola, primero de todo me gustaría indicar que soy nuevo en esto de programar.
He realizado una alarma antiincendios con el LM35, un LED rojo y un piezo.
El programa funciona como debería funcionar segun lo que he programado, pero yo sólo quiero que en el momento en que el LM35 lea que la temperatura és de 20 grados por ejemplo, pite durante cinco segundos, y una vez esto ya ha sucedido una sola vez, se pare todo .
Aquí os dejo el programa:
El código lo acabo de copia bien con los voids y eso. A lo que me refiero es a que yo solo quiero que el LM35 me detecte una sola vez que se sobrepasa la temperatura, pite cinco segundos, y que en ese momento el piezo y el led se desactiven permanentemente indistintamente de la temperatura que marque a partir de ese momento.
Te da error porque te faltará alguan variable.
Define la variable que falte.
yo te indique bien que hacer.
A mi sugerencia le debes agregar tus globales y tu setup.
Ahora funciona pero no como queria. Puede que no me haya expresado bien, pero lo que quiero es durante todo el tiempo que se haya estado ejecutando el programa pite una sola vez durante cinco segundos y ya está, sin más. EJEMPLO: habitación a 16 grados, sube a 20 pita 5 segundos i el LEDrojo también, y aunque siga estando a 20 grados se desactiva la alarma y el LED rojo.
const int sensorLM35 = A0;
int buzzer=11;
int ledRed2= 9;
bool EstadoSirena = false;
bool cargomillis = false;
unsigned long tAlarma;
void setup() {
Serial.begin(9600);
pinMode (ledRed2, OUTPUT);
digitalWrite(ledRed2, LOW);
}
void loop() {
int sensorVal = analogRead(sensorLM35);
Serial.print("LM35 value");
Serial.print(sensorVal);
float voltage= (sensorVal/1023.0)* 5.0;
Serial.print(", Volts: ");
Serial.print (voltage);
Serial.print (" , degrees C: ");
float temperaturee = (voltage - 0.5)* 100;
Serial.println(temperaturee);
if (temperaturee > 20.0 ) {
suenaTiempo(5000);
}
else if (temperaturee <= 20.0) {
digitalWrite(ledRed2, LOW);
noTone(buzzer);
cargomillis = false; // preparo para proximo ciclo de sirena
EstadoSirena = false;
}
}
void suenaTiempo(unsigned int tiempo) {
if (!cargomillis) {
tAlarma = millis()+ tiempo;
cargomillis = true;
EstadoSirena = false;
}
unsigned long currentmillis = millis();
if (!EstadoSirena & currentmillis < tAlarma) { // se ejecuta el tiempo elegido
digitalWrite(ledRed2, HIGH);
tone(buzzer, 600);
delay(500); // por simplicidad lo dejo pero no debería estar
noTone(buzzer);
digitalWrite(ledRed2, LOW);
}
else
EstadoSirena = true;
}
Es extremadamente simple (suponiendo que haya entendido bien lo que quieres).
Solo una pequeña correccion, la variable unavez solo se podria usar en el setup() y seguramente de error al compilar,habria que definirla antes del loop y setup ,con las demas.