#include <Arduino_FreeRTOS.h>
#include <semphr.h>
#define MUTEX_EN 0
//Variables for buzzer & first 3 LEDs!
const int buzzer = 7;
const int LED1 = 8; //LED ROJO
const int LED2 = 9; //LED AMARILLO
const int LED3 = 10; //LED VERDE
const int LED4 = 11; //Blue LED
int blueFlag = 0;
int redFlag = 0;
int greenFlag = 0;
int yellowFlag = 0;
SemaphoreHandle_t g_mutex = NULL;
void setup(){
Serial.begin(9600);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(buzzer, OUTPUT);
xTaskCreate(Task_1, "Task number 1!", 100, NULL, 1, NULL);
xTaskCreate(Task_2, "Task number 2!", 100, NULL, 1, NULL);
xTaskCreate(Task_3, "Task number 3!", 100, NULL, 1, NULL);
xTaskCreate(Task_4, "Task number 4!", 100, NULL, 1, NULL);
static StaticSemaphore_t mutex_buffer;
g_mutex = xSemaphoreCreateMutexStatic( &mutex_buffer );
}
void loop(){}
static void Task_1(void* pvParameters){
while(1){
if( xSemaphoreTake( g_mutex, pdMS_TO_TICKS( 100 ) ) != pdFALSE ){
digitalWrite(LED4, HIGH);
tone(buzzer, 200, 1000/portTICK_PERIOD_MS);
Serial.println(F("Tarea 1 start!"));
vTaskDelay(1000/portTICK_PERIOD_MS);
digitalWrite(LED4, LOW);
tone(buzzer, 200, 1000/portTICK_PERIOD_MS);
Serial.println(F("Tarea 1 end!"));
vTaskDelay(1000/portTICK_PERIOD_MS)
xSemaphoreGive( g_mutex );
}
}
}
static void Task_2(void* pvParameters){
if( xSemaphoreTake( g_mutex, pdMS_TO_TICKS( 100 ) ) != pdFALSE ){
digitalWrite(LED3, HIGH);
tone(buzzer, 200, 1000/portTICK_PERIOD_MS);
Serial.println(F("Tarea 2 start!"));
vTaskDelay(1000/portTICK_PERIOD_MS);
digitalWrite(LED3, LOW);
tone(buzzer, 200, 1000/portTICK_PERIOD_MS);
Serial.println(F("Tarea 2 end!"));
vTaskDelay(1000/portTICK_PERIOD_MS)
xSemaphoreGive( g_mutex );
}
}
static void Task_3(void* pvParameters){
if( xSemaphoreTake( g_mutex, pdMS_TO_TICKS( 100 ) ) != pdFALSE ){
digitalWrite(LED4, HIGH);
tone(buzzer, 200, 1000/portTICK_PERIOD_MS);
Serial.println(F("Tarea 1 start!"));
vTaskDelay(1000/portTICK_PERIOD_MS);
digitalWrite(LED4, LOW);
tone(buzzer, 200, 1000/portTICK_PERIOD_MS);
Serial.println(F("Tarea 1 end!"));
vTaskDelay(1000/portTICK_PERIOD_MS)
xSemaphoreGive( g_mutex );
}
}
static void Task_4(void* pvParameters){
while(1){
if(redFlag) {
digitalWrite(LED1, HIGH);
redFlag = 0;
} else {
digitalWrite(LED1, LOW);
redFlag = 1;
}
tone(buzzer, 200, 1000/portTICK_PERIOD_MS);
Serial.println(F("Tarea 4!"));
vTaskDelay(1000/portTICK_PERIOD_MS);
}
}