//FreeRTOS library:
#include <Arduino_FreeRTOS.h>
//Variables for buzzer & first 3 LEDs!
#define led_Verde 4 //defino en que pin esta conectado el led verde
#define led_Rojo 3 //defino en que pin esta conectado el led rojo
#define pulsadorE 8 //defino en que pin esta conectado el pulsadorE (ENTRADA)
#define pulsadorS 2 //defino en que pin esta concectado el pulsadorS (SALIDA)
#define alarma 5 // el led indicaria una alarma
#define Pemergencia 11 //defino en que pin esta conectado el pulsador de emergencia
int lugares= 5; //declaro la variable que sería la disponibilidad de lugares
int entrada; //declaro la variable entrada
int salida; //declaro la variable salida
int emergencia; //declaro la variable emergencia
int A;
bool flag = 1; // variable booleana
void setup() { // condiciones de inicio
Serial.begin(9600);
pinMode(led_Verde, OUTPUT); // el led verde recibe señal del arduino (output)
pinMode(led_Rojo, OUTPUT); // led rojo recibe señal del arduino (output)
pinMode(alarma, OUTPUT);
pinMode(pulsadorE, INPUT_PULLUP); // pulsadorE envia la señal al arduino (input_pullup)
pinMode(pulsadorS, INPUT_PULLUP); // pulsadorS envia señal al arduino (input_pullup)
pinMode(Pemergencia, INPUT_PULLUP);
xTaskCreate(Task_1, "Task no. 1!", 100, NULL, 1, NULL);
xTaskCreate(Task_2, "Task no. 2!", 100, NULL, 1, NULL);
xTaskCreate(Neutral_Task, "Neutral_Task!", 100, NULL, 2, NULL);
} // se cierra la llave, indicando que todo lo que se encuentra dentro pertenece al void setup
//Task 1
static void Task_1(void* pvParameters) {
while(1) { // se repite todo lo q esta dentro del corchete hasta que se vuelva falso
if (lugares == 0) { // si los lugares son 0
digitalWrite(led_Rojo, HIGH); // led rojo (indica que no hay lugar) se enciende
digitalWrite(led_Verde, LOW); // led verde (indica que hay lugar) se apaga
digitalWrite(alarma, LOW);
}
entrada = digitalRead(pulsadorE);
if (entrada == LOW) {
lugares ++; // los lugares aumentan
}
Serial.println(F("Task no. 1!"));
vTaskDelay(50 / portTICK_PERIOD_MS);
}
}
//Task 2
static void Task_2(void* pvParameters) {
while(1) {
A ++ ;
if (lugares > 0, lugares <= 5) { // si los lugares son mayores a 0, si los lugares son menor o igual a 5
digitalWrite(led_Verde, HIGH);// led verde encendido (hay lugar)
digitalWrite(led_Rojo, LOW); // led rojo apagado
digitalWrite(alarma, LOW);
}
salida = digitalRead(pulsadorS);
if (salida == LOW) {
lugares --;
}
Serial.println(F("Task no. 2!"));
vTaskDelay( 50 / portTICK_PERIOD_MS);
}
}
//Task 4 (the last one)!
//This is an extension which can be task-free!
static void Neutral_Task(void* pvParameters) {
while(1) {
emergencia = digitalRead(Pemergencia); //para que se lea el estado del pulsador
if (emergencia == LOW) {
if( flag == 0 ) {
digitalWrite(led_Verde, HIGH); // indica la barrera alta
digitalWrite(led_Rojo, LOW); //se apaga el led rojo
digitalWrite(alarma, HIGH); //el del indica una alarma
Serial.println(F("emergencia"));
}
}
}
if (emergencia == HIGH ) {
if ( flag == 1) {
vTaskDelay( 250 / portTICK_PERIOD_MS);
}
}
}
//We don't need to use "loop" function here!
void loop(){}