Sistema de temperatura

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;
  }
}

Comenta o elimina la línea

excedido == false;

que está justo sobre

break;

porque está de más.

Por cierto, esa línea tiene un error, debería ser

excedido = false;

ya que "==" se usa en las comparaciones, es una operación de igualdad, en cambio "=" es de asignación.

El mismo error dos líneas más arriba.

O sea, debe quedar

  excedido = false; 
} 
// excedido = false; 
break;
1 Like

Gracias, ya funciona perfecto

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.