#include #include #include #define DATA_PIN 25 #define CASCADE 0 #define OFF 2 #define DISCO 3 const int num_leds = 50; int curr_led = 0; int curr_led_state = 0; int pink[3] = {255, 50, 20}; uint8_t broadcastAddress[] = {0x1C, 0x9D, 0xC2, 0x4B, 0x66, 0x40}; //uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; int state = CASCADE; typedef struct struct_message { int gesture; } struct_message; struct_message incomingMessage; Adafruit_NeoPixel pixels = Adafruit_NeoPixel(50, DATA_PIN, NEO_GRB + NEO_KHZ800); void setup() { // Set device as a Wi-Fi Station WiFi.mode(WIFI_STA); // Init ESP-NOW if (esp_now_init() != ESP_OK) { Serial.println("Error initializing ESP-NOW"); return; } // Register peer esp_now_peer_info_t peerInfo; memcpy(peerInfo.peer_addr, broadcastAddress, 6); peerInfo.channel = 0; peerInfo.encrypt = false; // Add peer if (esp_now_add_peer(&peerInfo) != ESP_OK){ Serial.println("Failed to add peer"); return; } // Register for a callback function that will be called when data is received esp_now_register_recv_cb(onDataRecv); pixels.begin(); } void loop() { switch(state) { case CASCADE: cascade(curr_led, curr_led_state); if (curr_led == num_leds) { curr_led_state = 1 - curr_led_state; curr_led = 0; } else { curr_led = curr_led + 1; } break; case OFF: off(); break; case DISCO: disco(curr_led_state); curr_led_state = 1 - curr_led_state; break; } } void off() { for (int light = 0; light < 50; light++) { pixels.setPixelColor(light, pixels.Color(0, 0, 0)); pixels.show(); } } void cascade(int light, int state) { if (state == 1) { pixels.setPixelColor(light, pixels.Color(255, 50, 20)); } else { pixels.setPixelColor(light, pixels.Color(0, 0, 0)); } pixels.show(); delay(200); } void blink(int color[], int state, int delay_time) { if (state == 1) { for (int light = 0; light < num_leds; light++) { pixels.setPixelColor(light, pixels.Color(color[0], color[1], color[2])); } } else { for (int light = 0; light < num_leds; light++) { pixels.setPixelColor(light, pixels.Color(0, 0, 0)); } } pixels.show(); delay(delay_time); } void disco(int state) { int color[3] = {random(256), random(256), random(256)}; blink(color, state, 100); } void onDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) { memcpy(&incomingMessage, incomingData, sizeof(incomingMessage)); Serial.print("Bytes received: "); Serial.println(len); state = incomingMessage.gesture; }