// GPIO LED
#define RedLEDPin 4
#define GreenLEDPin 14
// Using C struct to define LED parameters
typedef struct led_st {
uint8_t LEDpin;
unsigned long delay_ms;
} ledStruct;
// C unique Task Function using C struct parameter
static void blinkLED(void *arg) {
ledStruct *myLED = (ledStruct *)arg;
pinMode(myLED->LEDpin, OUTPUT);
while (1) {
digitalWrite(myLED->LEDpin, HIGH);
delay(myLED->delay_ms);
digitalWrite(myLED->LEDpin, LOW);
delay(myLED->delay_ms);
}
}
// 2 LED behaviours - C struct
ledStruct rLED = {RedLEDPin, 1000};
ledStruct gLED = {GreenLEDPin, 500};
void setup() {
Serial.begin(115200);
// One single Task Function using a C stuct pointer as parameter
xTaskCreate(
blinkLED // Single C Task Function
, "Red LED Blinker" // A name just for humans
, 2048 // The stack size
, &rLED // Task parameter - C Struct pointer Red LED data
, 2 // Priority
, NULL // Task handle is not used here - simply pass NULL
);
xTaskCreate(
blinkLED // Single C Task Function
, "Green LED Blinker" // A name just for humans
, 2048 // The stack size
, &gLED // Task parameter - C Struct pointer Green LED data
, 2 // Priority
, NULL // Task handle is not used here - simply pass NULL
);
}
void loop() {
// When using Task, loop() is free for any other need.
// Blinking the LED is done in the Task Function
Serial.println("Looping...");
delay(5000);
}