from machine import Pin
import time
# --- 1. Configuration (การตั้งค่า) ---
# กำหนดหมายเลขขาสำหรับ LED ทั้ง 12 ดวง ตามลำดับในวงกลม
# **คุณต้องปรับหมายเลขขาเหล่านี้ให้ตรงกับการต่อวงจรจริงใน Wokwi ของคุณ**
# (ตัวอย่างนี้ใช้ขาที่พบบ่อยบน ESP32)
LED_PINS = [33, 25, 26, 27, 14, 12, 4, 16, 17, 5, 18, 19]
NUM_LEDS = len(LED_PINS)
DELAY_TIME = 0.1 # หน่วงเวลาสลับ LED เป็นวินาที (ปรับความเร็วได้)
# --- Setup ---
# สร้าง List ของอ็อบเจกต์ Pin สำหรับควบคุม LED ทั้งหมด
leds = []
for pin_num in LED_PINS:
# กำหนดขาเป็น OUTPUT และเพิ่มเข้า List
leds.append(Pin(pin_num, Pin.OUT))
# เก็บอ็อบเจกต์ LED ทั้งหมดไว้ใน List เพื่อความสะดวกในการควบคุม
def all_off():
"""ฟังก์ชันช่วยในการปิด LED ทั้งหมด"""
for led in leds:
led.value(0) # 0 = LOW/OFF (ปิด)
# --- 3. Main Loop (ลูปหลักการทำงาน) ---
# 'start_index' คือดัชนีของ LED ดวงแรกในกลุ่ม 3 ดวงที่กำลังติดอยู่
start_index = 0
all_off() # ปิดไฟทั้งหมดก่อนเริ่มลูป
while True:
all_off() # ปิดไฟทั้งหมดในทุกรอบการทำงาน ก่อนเปิดกลุ่มใหม่
# 1. คำนวณดัชนีของ LED ที่จะเปิด (กลุ่ม 3 ดวงติดกัน)
# ใช้ % NUM_LEDS เพื่อให้ดัชนีวนกลับไปที่ 0 เมื่อถึงปลาย List (หลักการวงกลม)
idx_red = (start_index) % NUM_LEDS # ตำแหน่งแรกในกลุ่ม (สมมติเป็นสีแดง)
idx_yellow = (start_index + 1) % NUM_LEDS # ตำแหน่งที่สอง (สมมติเป็นสีเหลือง)
idx_green = (start_index + 2) % NUM_LEDS # ตำแหน่งที่สาม (สมมติเป็นสีเขียว)
# 2. เปิด LED 3 ดวงตามตำแหน่งที่คำนวณไว้
leds[idx_red].value(1) # เปิด LED ดวงที่ 'แดง'
leds[idx_yellow].value(1) # เปิด LED ดวงที่ 'เหลือง'
leds[idx_green].value(1) # เปิด LED ดวงที่ 'เขียว'
# 3. หน่วงเวลา
time.sleep(DELAY_TIME)
# 4. เลื่อนจุดเริ่มต้นไปข้างหน้า 1 ตำแหน่ง เพื่อให้ไฟ "หมุน"
start_index = (start_index + 1) % NUM_LEDS