#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
#define btnAL 19 //boton de alarma
#define led_alarma 25 //led de alarma
#define BUZZER_PIN 0 //pin del buzzer
#define NOTE_C5 523
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
TaskHandle_t HandleTask2; //handle de la tarea 2
void setup() {
Serial.begin(115200);
// Init
lcd.init();
lcd.backlight();
lcd.setCursor(3, 0);
lcd.print("Tren Parado");
lcd.setCursor(2, 1);
lcd.print("Inactivo");
pinMode(btnAL, INPUT_PULLUP);
pinMode(led_alarma, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(led_alarma, LOW);
xTaskCreatePinnedToCore(
alerta, // Function en la que se implementa la tarea
"Tarea que controla la alarma", // Nombre de la tarea
10000, // Memoria (en Bytes) asignados a esta tarea
NULL, // Parámetro de entrada de la tarea (no hay ningún parámetro)
2, // Prioridad de la tarea (cuanto más alto, más prioridad)
&HandleTask2, // Handle de la tarea 1
1); // Core donde va a correr la tarea 1
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}
void alerta(void *parameter) {
while (1) {
vTaskDelay(200 / portTICK_PERIOD_MS); // Espera 200ms para alcanzar 5Hz
if (digitalRead(btnAL) == LOW) {
//state = 2; //devuelve al estado manual porque no puede estar en automatico
digitalWrite(led_alarma, HIGH);
//digitalWrite(led_amarillo, LOW);
lcd.clear();
tone(BUZZER_PIN, NOTE_C5); //activa el buzzer
lcd.setCursor(3, 0);
lcd.print("ALERTA!!");
lcd.setCursor(0, 1);
lcd.print("Pasando a Manual");
}
else {
digitalWrite(led_alarma, LOW);
noTone(BUZZER_PIN);
lcd.setCursor(3, 0);
lcd.print("Tren Parado");
lcd.setCursor(2, 1);
lcd.print("Inactivo");
}
}
}