#include "FastLED.h" #define PIN1 4 #define numled 150 #include #include #include #include // ====================================================================== // 1. ตั้งค่าหมายเลขของ Slave ตัวนี้ (0-5) // ====================================================================== const int SLAVE_ID = 5; String vname = "101"; CRGB leds[numled]; int vn,vss; // กำหนด Channel ที่ต้องการล็อกให้ตรงกับ Master const int WIFI_CHANNEL = 10; // ====================================================================== // โครงสร้างข้อมูลที่ใช้รับ (✅ แก้ไขขนาดอาเรย์จาก [7] เป็น [8] ให้ตรงกับ Master 100%) // ====================================================================== typedef struct struct_message { uint8_t h_tens[8]; // ชั่วโมง หลักสิบ uint8_t h_units[8]; // ชั่วโมง หลักหน่วย uint8_t m_tens[8]; // นาที หลักสิบ uint8_t m_units[8]; // นาที หลักหน่วย uint8_t s_tens[8]; // วินาที หลักสิบ uint8_t s_units[8]; // วินาที หลักหน่วย char namex[32]; uint8_t din; uint8_t vs; } struct_message; struct_message timeData; // ====================================================================== // ฟังก์ชันขับขา Relay หรือแสดงผลด้วยข้อมูล Array ที่ได้มาจาก Master // ====================================================================== void displaySegments(uint8_t segments[8]) { // ทำการแสดงผลบน WS2812B หรือ Relay ของคุณตรงนี้ } // ====================================================================== // Callback เมื่อได้รับข้อมูลจาก Master // ====================================================================== #if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) void OnDataRecv(const esp_now_recv_info_t *esp_now_info, const uint8_t *incomingData, int len) { #else void OnDataRecv(const uint8_t *mac_addr, const uint8_t *incomingData, int len) { #endif // คัดลอกข้อมูลที่ได้รับเข้า struct memcpy(&timeData, incomingData, sizeof(timeData)); Serial.print("Received din (vuLevel): "); Serial.println(timeData.din); Serial.print("Received Namex: "); Serial.println(timeData.namex); Serial.print("Received vs: "); Serial.println(timeData.vs); vn=timeData.din; vss=timeData.vs; if (vss==0) pro_1(); if (vss==1) pro_2(); if (vss==2) pro_3(); if (vss==3) pro_4(); if (vss==4) pro_5(); if (vss==5) pro_6(); if (vss==6) pro_7(); if (vss==7) pro_8(); if (vss>7) pro_8(); } void pro_1() { for (int i =75; i <75+vn*15; i++) leds[i] = CRGB(222, 0, 0); for (int i = 75; i >75-vn*15; i--) leds[i] = CRGB(0, 222, 0); FastLED.show(); delay(70); for (int i = 0; i < numled; i++) leds[i] = CRGB(0, 0, 0); FastLED.show(); } void pro_2() { for (int i =75; i <75+vn*15; i++) leds[i] = CRGB(0,222, 0); for (int i = 75; i >75-vn*15; i--) leds[i] = CRGB(222, 0, 0); FastLED.show(); delay(70); for (int i = 0; i < numled; i++) leds[i] = CRGB(0, 0, 0); FastLED.show(); } void pro_3() { for (int i =75; i <75+vn*15; i++) leds[i] = CRGB(0, 222, 0); for (int i = 75; i >75-vn*15; i--) leds[i] = CRGB(0, 222, 0); FastLED.show(); delay(70); for (int i = 0; i < numled; i++) leds[i] = CRGB(0, 0, 0); FastLED.show(); } void pro_4() { for (int i =75; i <75+vn*15; i++) leds[i] = CRGB(222, 0, 0); for (int i = 75; i >75-vn*15; i--) leds[i] = CRGB(222, 0, 0); FastLED.show(); delay(70); for (int i = 0; i < numled; i++) leds[i] = CRGB(0, 0, 0); FastLED.show(); } void pro_5() { for (int i =75; i <75+vn*15; i++) leds[i] = CRGB(0, 0, 222); for (int i = 75; i >75-vn*15; i--) leds[i] = CRGB(0, 0, 222); FastLED.show(); delay(70); for (int i = 0; i < numled; i++) leds[i] = CRGB(0, 0, 0); FastLED.show(); } void pro_6() { for (int i =75; i <75+vn*15; i++) leds[i] = CRGB(0, 222, 0); for (int i = 75; i >75-vn*15; i--) leds[i] = CRGB(0, 0, 222); FastLED.show(); delay(70); for (int i = 0; i < numled; i++) leds[i] = CRGB(0, 0, 0); FastLED.show(); } void pro_7() { for (int i =75; i <75+vn*15; i++) leds[i] = CRGB(0, 0, 222); for (int i = 75; i >75-vn*15; i--) leds[i] = CRGB(0, 222, 0); FastLED.show(); delay(70); for (int i = 0; i < numled; i++) leds[i] = CRGB(0, 0, 0); FastLED.show(); } void pro_8() { for (int i =75; i <75+vn*15; i++) leds[i] = CRGB(222, 0, 0); for (int i = 75; i >75-vn*15; i--) leds[i] = CRGB(0, 0, 222); FastLED.show(); delay(70); for (int i = 0; i < numled; i++) leds[i] = CRGB(0, 0, 0); FastLED.show(); } void pro_9() { for (int i = 0; i < numled; i++) leds[i] = CRGB(22, 22, 22); FastLED.show(); delay(70); } void setup() { Serial.begin(115200); FastLED.addLeds(leds, numled); // ตั้งค่า Wi-Fi และล็อก Channel 10 ให้ตรงกับ Master WiFi.mode(WIFI_STA); esp_wifi_set_channel(WIFI_CHANNEL, WIFI_SECOND_CHAN_NONE); if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } esp_now_register_recv_cb((esp_now_recv_cb_t)OnDataRecv); Serial.print("Slave Node Started on Channel "); Serial.println(WIFI_CHANNEL); } void loop() { delay(10); }