#include #include #include #include #define NUMPIXELS 15 Adafruit_NeoPixel pixels(NUMPIXELS, 21, NEO_GRB + NEO_KHZ800); uint64_t current_state = 0; uint64_t last_state = 0; BluetoothLeUartServer *server; class MyCallbacks : public BluetoothLeUartServerCallbacks { virtual void onDeviceConnectedChanged(bool deviceConnected) { Serial.println("Device connected changed: " + String(deviceConnected)); }; virtual void onDataReceived(String data) { Serial.println("Got some data: " + data); if (data.startsWith("s:")) { data.remove(0, 2); current_state = strtoul(data.c_str(), NULL, 16); if (current_state == last_state) return; EEPROM.write(0, current_state >> 24); EEPROM.write(1, current_state >> 16); EEPROM.write(2, current_state >> 8); EEPROM.write(3, current_state); EEPROM.commit(); } else if (data == "s") { server->sendData("s:" + String(current_state, HEX)); } }; }; void update_color(); void set_color(uint32_t c); void setup() { Serial.begin(115200); pixels.begin(); server = new BluetoothLeUartServer("Hannis birb lamp", "6e400001-b5a3-f393-e0a9-e50e24dcca9e", "6e400002-b5a3-f393-e0a9-e50e24dcca9e", "6e400003-b5a3-f393-e0a9-e50e24dcca9e"); server->setCallbacks(new MyCallbacks()); EEPROM.begin(4); current_state = EEPROM.read(0) << 24 | EEPROM.read(1) << 16 | EEPROM.read(2) << 8 | EEPROM.read(3); last_state = current_state; update_color(); Serial.println("Setup done"); Serial.println(current_state); } void loop() { if (current_state != last_state) { update_color(); last_state = current_state; } delay(100); } void update_color() { if (current_state >> 24 == 0) set_color(0); else set_color(current_state); } void set_color(uint32_t c) { for (int i = 0; i < NUMPIXELS; i++) { pixels.setPixelColor(i, c); } pixels.show(); }