// codé par Souhir Oualha
#include <STM32FreeRTOS.h>
// Structure pour représenter une LED
typedef struct {
uint16_t Pin;
uint16_t capacite;
uint16_t delai;
uint16_t periode;
} LED;
// Tableaux pour stocker les caractéristiques de chaque LED
LED ledVerte = {D7, 100, 1000, 2000};
LED ledBleue = {D8,300, 3000, 4000};
LED ledRouge = {D4,500, 900, 1000};
void setup() {
Serial.begin(9600);
pinMode(D7, OUTPUT);
pinMode(D8, OUTPUT);
pinMode(D4, OUTPUT);
// Création des tâches avec différentes priorités en fonction des délais
xTaskCreate(Task1, "LED Verte", configMINIMAL_STACK_SIZE, NULL, ledVerte.periode, NULL);
xTaskCreate(Task2, "LED Bleue", configMINIMAL_STACK_SIZE, NULL, ledBleue.periode, NULL);
xTaskCreate(Task3, "LED Rouge", configMINIMAL_STACK_SIZE, NULL, ledRouge.periode, NULL);
// start FreeRTOS
vTaskStartScheduler();
}
// Définition de la fonction pour la tâche de la LED verte
void Task1(void *argument) {
while(1) {
Serial.println("Task1 ");
// Allumer la LED verte
digitalWrite(ledVerte.Pin, HIGH);
vTaskDelay(pdMS_TO_TICKS(ledVerte.capacite));
// Éteindre la LED verte
digitalWrite(ledVerte.Pin, LOW);
// Attendre pendant le reste de la période
vTaskDelay(pdMS_TO_TICKS(ledVerte.periode - ledVerte.capacite));
}
}
// Définition de la fonction pour la tâche de la LED bleue
void Task2(void *argument) {
while(1) {
Serial.println("Task2 ");
// Allumer la LED verte
digitalWrite(ledBleue.Pin, HIGH);
vTaskDelay(pdMS_TO_TICKS(ledBleue.capacite)); // Attendre pendant la capacité allumée
// Éteindre la LED verte
digitalWrite(ledBleue.Pin, LOW);
// Attendre pendant le reste de la période
vTaskDelay(pdMS_TO_TICKS(ledBleue.periode - ledBleue.capacite));
}
}
// Définition de la fonction pour la tâche de la LED rouge
void Task3(void *argument) {
while(1) {
Serial.println("Task3 ");
// Allumer la LED verte
digitalWrite(ledRouge.Pin, HIGH);
vTaskDelay(pdMS_TO_TICKS(ledRouge.capacite)); // Attendre pendant la capacité allumée
// Éteindre la LED verte
digitalWrite(ledRouge.Pin, LOW);
vTaskDelay(pdMS_TO_TICKS(ledRouge.periode - ledRouge.capacite)); // Attendre pendant le reste de la période
}
}
void loop() {
}
Loading
st-nucleo-c031c6
st-nucleo-c031c6