// codé par Souhir Oualha
#include <STM32FreeRTOS.h>
// Création du sémaphore pour la communication entre les tâches
SemaphoreHandle_t buttonSemaphore;
bool buttonState = false;
void setup() {
Serial.begin(9600);
pinMode(D4, INPUT);
pinMode(D7, OUTPUT);
// Création du sémaphore
buttonSemaphore = xSemaphoreCreateBinary();
// Création des tâches
xTaskCreate(Task1, "ReadButton", 128, NULL, 1, NULL);
xTaskCreate(Task2, "on/OffLED", 128, NULL, 2, NULL);
// start FreeRTOS
vTaskStartScheduler();
}
// Tâche pour allumer la LED_VERT
void Task1(void *argument) {
for (;;) {
Serial.println("Task 1");
// Attendre le message du sémaphore
if (xSemaphoreTake(buttonSemaphore, portMAX_DELAY) == pdTRUE) {
// Allumer ou éteindre la LED en fonction de l'état du bouton
digitalWrite(D7, buttonState);
delay(500);
}
}
}
// Tâche pour éteindre la LED_VERT
void Task2 (void *argument) {
for (;;) {
Serial.println("Task 2");
// Lire l'état du bouton
int currentButtonState = digitalRead(D4);
// Vérifier si l'état du bouton a changé
if (currentButtonState != buttonState) {
// Mettre à jour l'état du bouton
buttonState = currentButtonState;
// Envoie un message à la tâche de réception
xSemaphoreGive(buttonSemaphore);
}
// Attendre un peu avant de vérifier à nouveau
vTaskDelay(pdMS_TO_TICKS(50));
}
}
void loop() {
}