92 lines
1.9 KiB
C++
92 lines
1.9 KiB
C++
#include <Arduino.h>
|
|
#include <Adafruit_NeoPixel.h>
|
|
#include <EEPROM.h>
|
|
|
|
#include <BluetoothLeUartServer.h>
|
|
|
|
#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();
|
|
} |