//Runs only for esp32
const int pushButton = 4;
const int redLED = 16;
const int greenLED = 17;
TaskHandle_t TaskRedLed,TaskGreenLed,TaskButton;
// Function to run in the first task
void BlinkRedLed( void * parameter )
{
for (;;) {
digitalWrite(redLED, HIGH);
vTaskDelay(500 / portTICK_PERIOD_MS);
digitalWrite(redLED, LOW);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
void BlinkGreenLed( void * parameter )
{
for (;;) {
digitalWrite(greenLED, HIGH);
vTaskDelay(900 / portTICK_PERIOD_MS);
digitalWrite(greenLED, LOW);
vTaskDelay(900 / portTICK_PERIOD_MS);
}
}
void Button( void *parameter )
{
for (;;) {
int buttonState = digitalRead(pushButton);
if(buttonState == 1){
Serial.print(" Core#");
Serial.print(xPortGetCoreID());
Serial.println(" ButtonPressed");
vTaskDelay(50 / portTICK_PERIOD_MS);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(pushButton, INPUT_PULLUP);
pinMode(greenLED, OUTPUT);
pinMode(redLED, OUTPUT);
// Create tasks
xTaskCreatePinnedToCore(
BlinkRedLed,
"RedLed",
1000,
NULL,
1,
&TaskRedLed,
1);
delay(500); // needed to start-up task1
xTaskCreatePinnedToCore(
BlinkGreenLed,
"GreenLed",
1000,
NULL,
1,
&TaskGreenLed,
1);
delay(500);
xTaskCreatePinnedToCore(
Button,
"PressButton",
1000,
NULL,
1,
&TaskButton,
1);
delay(500);
/* xTaskCreatePinnedToCore(
{
name of the task function,
name of the task,
memory assigned for the task,
parameter to pass if any,
priority of task, starting from 0(Highestpriority) *IMPORTANT*( if set to 1 and there is no activity in your 2nd loop, it will reset the esp32)
Reference name of taskHandle variable,
choose core (0 or 1),
} */
}
void loop() {
// The main loop is empty as tasks are running independently
}