#include <Arduino.h>
#define LED1_PIN 2
#define LED2_PIN 4
// ประกาศ Handle สำหรับ Timers
TimerHandle_t led1Timer = NULL;
TimerHandle_t led2Timer = NULL;
TimerHandle_t stopTimer = NULL;
// -------------------------------------------------
// Callback สำหรับ LED1: Auto-Reload (ทำงานทุก 500 ms)
// -------------------------------------------------
void led1TimerCallback(TimerHandle_t xTimer) {
static bool led1State = false;
led1State = !led1State;
digitalWrite(LED1_PIN, led1State);
Serial.print("[Timer1] LED1 = ");
Serial.println(led1State ? "ON" : "OFF");
}
// -------------------------------------------------
// Callback สำหรับ LED2: Auto-Reload (ทำงานทุก 1000 ms)
// -------------------------------------------------
void led2TimerCallback(TimerHandle_t xTimer) {
static bool led2State = false;
led2State = !led2State;
digitalWrite(LED2_PIN, led2State);
Serial.print("[Timer2] LED2 = ");
Serial.println(led2State ? "ON" : "OFF");
}
// -------------------------------------------------
// Callback สำหรับ StopTimer: One-Shot (ทำงานครั้งเดียวเมื่อครบ 10 วินาที)
// -------------------------------------------------
void stopTimerCallback(TimerHandle_t xTimer) {
// หยุดการทำงานของ led1Timer และ led2Timer
xTimerStop(led1Timer, 0);
xTimerStop(led2Timer, 0);
// สั่งให้ LED ทั้งสองดวงดับสนิท
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
Serial.println("[StopTimer] All LEDs stopped");
}
void setup() {
Serial.begin(115200);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
// 1. สร้าง LED1 Timer (Auto-Reload ทุก 500 ms)
led1Timer = xTimerCreate("LED1Timer", pdMS_TO_TICKS(500), pdTRUE, NULL, led1TimerCallback);
// 2. สร้าง LED2 Timer (Auto-Reload ทุก 1000 ms)
led2Timer = xTimerCreate("LED2Timer", pdMS_TO_TICKS(1000), pdTRUE, NULL, led2TimerCallback);
// 3. สร้าง Stop Timer (One-Shot เมื่อครบ 10 วินาที หรือ 10000 ms)
stopTimer = xTimerCreate("StopTimer", pdMS_TO_TICKS(10000), pdFALSE, NULL, stopTimerCallback);
// ตรวจสอบความถูกต้องของการสร้าง Timer
if (led1Timer == NULL || led2Timer == NULL || stopTimer == NULL) {
Serial.println("Timer Create Failed!");
while (1) {
vTaskDelay(pdMS_TO_TICKS(1000));
}
}
// เริ่มต้นทำงาน Timers ทุกตัวพร้อมกัน
xTimerStart(led1Timer, 0);
xTimerStart(led2Timer, 0);
xTimerStart(stopTimer, 0);
Serial.println("Lab 8.1 Starter Ready");
Serial.println("LED1: 500 ms, LED2: 1000 ms, StopTimer: 10 sec");
}
void loop() {
// ปล่อยว่างไว้ โดยใช้บล็อกการทำงานของ Loop หลัก
vTaskDelay(pdMS_TO_TICKS(1000));
}