Skip to content
Snippets Groups Projects
Commit 1deb672d authored by Joe Revans's avatar Joe Revans
Browse files

starter node code update

parent 6bf514b1
No related branches found
No related tags found
No related merge requests found
#include "NameDictionary.h"
#include "Button.h"
#include "Potentiometer.h"
#include "RotaryEncoder.h"
#include <VizBlocks.h>
#include <Behaviours.h>
//Get device name
const String device_id = String(ESP.getChipId(), HEX);
NameDictionary d;
const String id = d.get(device_id);
char _id[10];
const String name = d.get(device_id);
char _name[10];
//Init as a VizBlock node with "null" ID.
VizBlocks node(
......@@ -17,6 +20,32 @@ VizBlocks node(
1883 //Port for Node RED server
);
//Init button
const int bPin = 2;
const int bID = 0;
Button b(bPin, bID);
//Button Interrupt Service Routine
void ICACHE_RAM_ATTR bISR() {
b.tick();
}
//Init potientiometer
const int pPin = A0;
const int pID = 1;
Potentiometer p(pPin, pID);
//Init rotary encoder
const int rePinA = 4;
const int rePinB = 5;
const int reID = 2;
RotaryEncoder re(rePinA, rePinB, reID);
//Rotary Encoder Interrupt Serivce Routine
void ICACHE_RAM_ATTR reISR() {
re.tick();
}
unsigned long t = 0;
const int pingInterval = 4000;
......@@ -27,15 +56,23 @@ void setup()
Serial.println("Serial started!");
delay(500);
//Pass event handlers into button
b.initInterrupts(bISR);
b.setEventHandler(bCB);
//Pass event handlers into potentiometer
p.setEventHandler(pCB);
//Pass event handlers into rotary encoder
re.initInterrupts(reISR);
re.setEventHandler(reCB);
//Print device name
if (id == device_id) {
Serial.println("!!! This device doesn't have a name yet. Let's call it: " + id);
if (name == device_id) {
Serial.println("!!! This device doesn't have a name yet. Let's call it: " + name);
} else {
Serial.println("Device name: " + id);
Serial.println("Device name: " + name);
}
id.toCharArray(_id, 10);
node.setID(_id);
name.toCharArray(_name, 10);
node.setID(_name);
//Add in the custom behaviour we defined earlier.
node.add(new SendCapabilities(&node) );
......@@ -47,7 +84,6 @@ void setup()
node.add(new ButtonClicked(&node) );
node.add(new ButtonHeld(&node) );
node.add(new ButtonTick(&node) );
node.add(new PotentiometerUpdated(&node) );
node.add(new RotaryEncoderUpdated(&node) );
......@@ -59,10 +95,12 @@ void setup()
node.process("PingServer");
}
void loop()
{
node.run();
b.check();
p.check();
re.check();
pingComms(pingInterval);
}
......@@ -70,6 +108,84 @@ void pingComms(int interval) {
unsigned long timeNow = millis();
if (timeNow > t + interval) {
t = timeNow;
Serial.println("Link " + id);
Serial.println("Link " + name);
}
}
void bCB(Button* button, uint8_t eventType, bool state) {
/*
* Button event handler that triggers VizBlocks behaviours
*/
String idString = String(button->getId());
Serial.println("Button ID: " + idString + " Event Type: " + String(eventType) + " State: " + String(state));
switch(eventType) {
case Button::kEventPressed:
//Do something
break;
case Button::kEventReleased:
//Do something else
node.input_event("ButtonReleased " + idString);
break;
case Button::kEventClicked:
//Do something else
node.input_event("ButtonClicked " + idString);
break;
case Button::kEventHeld:
//Do something else
node.input_event("ButtonHeld " + idString);
break;
case Button::kEventTick:
//Do something else
node.input_event("ButtonTick " + idString);
break;
}
}
void pCB(Potentiometer* potentiometer, uint8_t eventType, uint8_t sensorValue) {
/*
* Potentiometer Event Handler that triggers VizBlocks behaviours
*/
String idString = String(potentiometer->getId());
Serial.println("Slider ID: " + idString + " Event Type: " + String(eventType) + " Sensor Value: " + String(sensorValue));
switch(eventType) {
case Potentiometer::kEventStableUpdate:
//Do something
node.input_event("PotentiometerUpdated " + idString + " " + String(sensorValue));
break;
case Potentiometer::kEventUnstableUpdate:
//Do something else
break;
}
}
void reCB(RotaryEncoder* rotaryEncoder, uint8_t eventType, int position) {
/*
* Rotary Encoder event handler that triggers VizBlocks behaviours
*/
String idString = String(rotaryEncoder->getId());
Serial.println("Encoder ID: " + idString + " Event Type: " + String(eventType) + " Position: " + String(position));
switch(eventType) {
case RotaryEncoder::kEventStableUpdate:
//Do something
node.input_event("RotaryEncoderUpdated " + idString + " " + String(position));
break;
case RotaryEncoder::kEventUnstableUpdate:
//Do something else
break;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment