#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <freertos/queue.h>
const int led1Pin = 13;
const int led2Pin = 19;
const int buttonPin = 15;
bool led1State = LOW;
bool led2State = HIGH;
bool lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void TaskLEDControl(void *pvParameters);
void TaskButton(void *pvParameters);
void setup() {
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(led1Pin, LOW);
digitalWrite(led2Pin, HIGH);
xTaskCreate(TaskLEDControl, "Task LED Control", 1000, NULL, 1, NULL);
xTaskCreate(TaskButton, "Task Button", 1000, NULL, 1, NULL);
}
void loop() {
}
void TaskLEDControl(void *pvParameters) {
for (;;) {
digitalWrite(led1Pin, led1State ? HIGH : LOW);
digitalWrite(led2Pin, led2State ? HIGH : LOW);
vTaskDelay(500 / portTICK_PERIOD_MS);
}
}
void TaskButton(void *pvParameters) {
for (;;) {
int buttonState = digitalRead(buttonPin);
// Kiểm tra trạng thái nút nhấn với debounce
if (buttonState != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (buttonState == LOW) {
led1State = !led1State;
led2State = !led2State;
}
}
lastButtonState = buttonState;
vTaskDelay(50 / portTICK_PERIOD_MS);
}
}