#include <Arduino_FreeRTOS.h>
const byte ledPin = 7;
int ledDelay = 1000;
int value = 0;
bool suspended = false;
TaskHandle_t hLed;
void readSerial() {
for (;;) {
if (Serial.available()) {
value = Serial.parseInt();
if (value > 0) {
ledDelay = value;
if (suspended) {
vTaskResume(hLed);
}
} else {
vTaskSuspend(hLed);
suspended = true;
}
}
while (Serial.available()) {
Serial.read();
}
vTaskDelay(100 / portTICK_PERIOD_MS);
}
}
void lightLed() {
for (;;) {
digitalWrite(ledPin, HIGH);
vTaskDelay(ledDelay / portTICK_PERIOD_MS);
digitalWrite(ledPin, LOW);
vTaskDelay(ledDelay / portTICK_PERIOD_MS);
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.write("Write a value in the terminal to control led: ");
pinMode(ledPin, OUTPUT);
xTaskCreate(readSerial, "Serial Read", 100, NULL, 2, NULL);
xTaskCreate(lightLed, "Light Led", 100, NULL, 1, &hLed);
vTaskStartScheduler();
}
void loop() {
// put your main code here, to run repeatedly:
}