Merge branch 'illucat' into 'master'

Illucat

See merge request wirelos/sprocket-core!7
This commit is contained in:
2018-07-03 00:22:20 +00:00
3 changed files with 36 additions and 5 deletions

View File

@@ -9,7 +9,7 @@
; http://docs.platformio.org/page/projectconf.html ; http://docs.platformio.org/page/projectconf.html
[platformio] [platformio]
env_default = button env_default = illucat
[common] [common]
framework = arduino framework = arduino

View File

@@ -13,13 +13,15 @@ class Button : public Sprocket {
Task btnTask; Task btnTask;
MeshNet* net; MeshNet* net;
int pin; int pin;
int warnlevel = 0;
int cycleEnd = 5;
Button(SprocketConfig cfg) : Sprocket(cfg) {} Button(SprocketConfig cfg) : Sprocket(cfg) {}
Sprocket* activate(Scheduler* scheduler, Network* network) { Sprocket* activate(Scheduler* scheduler, Network* network) {
pin = D2; pin = D2;
pinMode(pin, INPUT_PULLUP); pinMode(pin, INPUT_PULLUP);
net = static_cast<MeshNet*>(network); net = static_cast<MeshNet*>(network);
net->mesh.onReceive(bind(&Button::receivedCallback,this, _1, _2)); net->mesh.onReceive(bind(&Button::receivedCallback,this, _1, _2));
btnTask.set(TASK_MILLISECOND * 500, TASK_FOREVER, btnTask.set(TASK_MILLISECOND * 250, TASK_FOREVER,
bind(&Button::readPin, this, net)); bind(&Button::readPin, this, net));
scheduler->addTask(btnTask); scheduler->addTask(btnTask);
btnTask.enable(); btnTask.enable();
@@ -27,8 +29,10 @@ class Button : public Sprocket {
void readPin(MeshNet* network){ void readPin(MeshNet* network){
if(digitalRead(pin)){ if(digitalRead(pin)){
Serial.println("btn pressed"); Serial.println("warnlevel: " + String(warnlevel));
network->broadcast("EE1B2E"); warnlevel++;
if(warnlevel == cycleEnd) warnlevel = 0;
network->broadcast(String(warnlevel));
} }
} }

View File

@@ -9,17 +9,27 @@
using namespace std; using namespace std;
using namespace std::placeholders; using namespace std::placeholders;
#define ARRAY_LENGTH(array) sizeof(array)/sizeof(array[0])
enum PIXEL_MODES {BLACK = 0x000000, RED = 0xFF0000, GREEN = 0x00FF00, YELLOW = 0xffff00, BLUE = 0x0000FF, ORANGE = 0xffa500};
int CAT_MODES[] = {BLACK, RED, GREEN, YELLOW, BLUE, ORANGE};
struct NeoPixelConfig { struct NeoPixelConfig {
int pin; int pin;
int length; int length;
int mode;
}; };
class Illucat : public Sprocket { class Illucat : public Sprocket {
public: public:
MeshNet* net; MeshNet* net;
NeoPattern* pixels; NeoPattern* pixels;
int currentMode;
Illucat(SprocketConfig cfg, NeoPixelConfig pixelCfg) : Sprocket(cfg) { Illucat(SprocketConfig cfg, NeoPixelConfig pixelCfg) : Sprocket(cfg) {
pixels = new NeoPattern(pixelCfg.length, pixelCfg.pin, NEO_GRB + NEO_KHZ800, [](int pixels){}); pixels = new NeoPattern(pixelCfg.length, pixelCfg.pin, NEO_GRB + NEO_KHZ800, [](int pixels){});
pixels->begin();
pixels->setBrightness(64);
} }
Sprocket* activate(Scheduler* scheduler, Network* network) { Sprocket* activate(Scheduler* scheduler, Network* network) {
net = static_cast<MeshNet*>(network); net = static_cast<MeshNet*>(network);
@@ -29,7 +39,24 @@ class Illucat : public Sprocket {
void messageReceived( uint32_t from, String &msg ) { void messageReceived( uint32_t from, String &msg ) {
Serial.printf("illucat: received from %u msg=%s\n", from, msg.c_str()); Serial.printf("illucat: received from %u msg=%s\n", from, msg.c_str());
setHexColor(msg.c_str()); StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(msg);
if (!root.success()) {
Serial.println("parseObject() failed");
return;
}
changeMode(root["severity"]);
/* if(root["action"] == "pressed") {
}
if(root["action"] == "dial") {
changeMode("0");
} */
}
void changeMode(const char *mode){
currentMode = atoi(mode);
Serial.println(currentMode);
pixels->ColorSet(CAT_MODES[currentMode]);
pixels->show();
} }
void setHexColor(const char *hex){ void setHexColor(const char *hex){
int r, g, b; int r, g, b;