Saludos, explicandoles el sistema un sensor de temperatura en estado normal entre 23 a 40 grados nos da un led verde encendido cuando sobre pasa los 40 grados se enciende un ventilador (motor) y un buzzer, queremos que el buzzer solo suene hasta que la temperatura baje de los 40 y y el ventilador solo se podra apagar una vez la temperatura baje a 23 grados, en ese momento el led verde se volvera a encender, su funcionamiento es casi perfecto tengo la eventualidad de que al momento que la temperatura baja a 23 y se enciende el led al subir la temperatura arriba de 23 se apaga el led verde y se vuelve a encender el ventilador sin haber llegado a 40, tengo la seguridad de que es un problema con la logica del sistema, me podrian dar una sugerencia de donde este el problema?
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8); // crea objeto y asigna pines a los cuales se
// encuentran conectados RS, E, D4, D5, D6, D7
boolean excedido;
int SENSOR; // variable almacena valor leido de entrada analogica A0
float TEMPERATURA; // valor de temperatura en grados centigrados
float SUMA; // valor de la suma de las 5 lecturas de temperatura
int verde=2;
int rojo=3;
int buzzer=4;
void setup() {
lcd.begin(16, 2); // inicializa lcd en 16 columnas por 2 filas
// entradas analógicas no requieren inicialización
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
}
void loop() {
SUMA = 0; // valor inicial de SUMA en cero
for (int i=0; i < 5; i++){ // bucle que repite 5 veces
SENSOR = analogRead(A0); // lectura de entrada analogica A0
TEMPERATURA = ((SENSOR * 5000.0) / 1023) / 10;// lectura de entrada analogica A0
// de entrada A0 en grados centigrados
SUMA = TEMPERATURA + SUMA; // suma de cada lectura de temperatura
delay(500); // demora de medio seg. entre lecturas
}
lcd.setCursor(0, 0); // cursor en primer fila y primer columna
lcd.print("ITM Temp: "); // escribe Temp:
lcd.print(SUMA/5.0, 1); // escribe valor promedio de 5 lecturas con
// un decimal
lcd.print(" C"); // imprime C
if (SUMA/5 >= 40.0) {
excedido=true;
}
switch (excedido){
case true:
digitalWrite(2,LOW);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
if (SUMA/5 < 40.0){
digitalWrite(4,LOW);
}
if (SUMA/5 <= 23.0){
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
excedido == false;
}
excedido == false;
break;
case false:
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
break;
}
}