diff --git a/ino/components/mcopy_light/McopySerial.cpp b/ino/components/mcopy_light/McopySerial.cpp new file mode 100644 index 0000000..247ef79 --- /dev/null +++ b/ino/components/mcopy_light/McopySerial.cpp @@ -0,0 +1,76 @@ +/// mcopy Serial Library + +#include "McopySerial.h" + +McopySerial::McopySerial (char identity) { + id = identity; +} + +void McopySerial::begin () { + Serial.begin(baud); + Serial.flush(); + Serial.setTimeout(serialDelay); +} + +char McopySerial::loop () { + if (Serial.available()) { + cmdChar = (char) Serial.read(); + _internal(); + } else { + cmdChar = 'z'; + } + return cmdChar; +} + +void McopySerial::_internal () { + if (cmdChar == DEBUG) { + debugOn = !debugOn; + } else if (cmdChar == CONNECT) { + _connect(); + } else if (cmdChar == MCOPY_IDENTIFIER) { + _identify(); + } +} + +void McopySerial::_connect () { + Serial.println(CONNECT); + log("connect()"); +} + +void McopySerial::_identify () { + Serial.println(id); + log("identify()"); +} + +void McopySerial::setBaud (int baudRate) { + baud = baudRate; +} + +void McopySerial::setIdentity (char identity) { + id = identity; +} + +void McopySerial::debug (bool state) { + debugOn = state; +} + +void McopySerial::confirm (char cmd) { + Serial.println(cmd); +} + +void McopySerial::log (String message) { + if (debugOn) { + Serial.println(message); + } +} + +String McopySerial::getString () { + while (Serial.available() == 0) { + //Wait for value string + } + return Serial.readString(); +} + +void McopySerial::print (String message) { + Serial.println(message); +} \ No newline at end of file diff --git a/ino/components/mcopy_light/McopySerial.h b/ino/components/mcopy_light/McopySerial.h new file mode 100644 index 0000000..db2f9ba --- /dev/null +++ b/ino/components/mcopy_light/McopySerial.h @@ -0,0 +1,84 @@ +#ifndef MCOPY_SERIAL +#define MCOPY_SERIAL + +#include "Arduino.h" + +class McopySerial { + + private: + const int serialDelay = 5; + + volatile int baud = 57600; + volatile bool debugOn = false; + volatile char cmdChar = 'z'; + volatile char id; + + void _internal (); + void _connect (); + void _identify (); + + public: + + /* CMD FLAGS */ + static const char BLACK = 'b'; + static const char CAMERA = 'c'; + static const char CAMERA_BACKWARD = 'f'; + static const char CAMERA_CAPPER_IDENTIFIER = '8'; + static const char CAMERA_CAPPER_PROJECTOR_IDENTIFIER = '9'; + static const char CAMERA_CAPPER_PROJECTORS_IDENTIFIER = '0'; + static const char CAMERA_EXPOSURE = 'G'; + static const char CAMERA_FORWARD = 'e'; + static const char CAMERA_IDENTIFIER = 'k'; + static const char CAMERA_PROJECTORS_IDENTIFIER = '5'; + static const char CAMERA_SECOND = '3'; + static const char CAMERA_SECOND_BACKWARD = '2'; + static const char CAMERA_SECOND_FORWARD = '1'; + static const char CAMERA_SECOND_IDENTIFIER = 'y'; + static const char CAMERA_TIMED = 'n'; + static const char CAMERAS = '4'; + static const char CAMERAS_IDENTIFIER = 'a'; + static const char CAMERAS_PROJECTOR_IDENTIFIER = '6'; + static const char CAMERAS_PROJECTORS_IDENTIFIER = '7'; + static const char CAPPER_IDENTIFIER = 'C'; + static const char CAPPER_OFF = 'B'; + static const char CAPPER_ON = 'A'; + static const char CONNECT = 'i'; + static const char DEBUG = 'd'; + static const char ERROR = 'E'; + static const char LIGHT = 'l'; + static const char LIGHT_IDENTIFIER = 'o'; + static const char MCOPY_IDENTIFIER = 'm'; + static const char PROJECTOR = 'p'; + static const char PROJECTOR_BACKWARD = 'h'; + static const char PROJECTOR_CAMERA_IDENTIFIER = 's'; + static const char PROJECTOR_CAMERA_LIGHT_IDENTIFIER = 'r'; + static const char PROJECTOR_FORWARD = 'g'; + static const char PROJECTOR_IDENTIFIER = 'j'; + static const char PROJECTOR_LIGHT_IDENTIFIER = 'q'; + static const char PROJECTOR_SECOND = 'w'; + static const char PROJECTOR_SECOND_BACKWARD = 'v'; + static const char PROJECTOR_SECOND_FORWARD = 'u'; + static const char PROJECTOR_SECOND_IDENTIFIER = 't'; + static const char PROJECTORS = 'x'; + static const char PROJECTORS_IDENTIFIER = 'd'; + static const char STATE = 'H'; + static const char TAKEUP_BACKWARD = 'F'; + static const char TAKEUP_FORWARD = 'D'; + /* END CMD FLAGS */ + + McopySerial(char identity); + + void begin(); + void setBaud(int baudRate); + void setIdentity(char identity); + char loop(); + void confirm(char cmd); + String getString(); + void print(String message); + + void debug (bool state); + void log (String message); + +}; + +#endif diff --git a/ino/components/mcopy_light/mcopy_light.ino b/ino/components/mcopy_light/mcopy_light.ino index dfe797d..1862826 100644 --- a/ino/components/mcopy_light/mcopy_light.ino +++ b/ino/components/mcopy_light/mcopy_light.ino @@ -1,11 +1,13 @@ #include "SoftwareSerial.h" #include "Adafruit_Pixie.h" +#include "McopySerial.h" #define NUMPIXELS 1 // Number of Pixies in the strip #define PIXIEPIN 6 // Pin number for SoftwareSerial output SoftwareSerial pixieSerial(-1, PIXIEPIN); Adafruit_Pixie light = Adafruit_Pixie(NUMPIXELS, &pixieSerial); +McopySerial mc(McopySerial::LIGHT_IDENTIFIER); String color = "000,000,000"; @@ -22,18 +24,11 @@ volatile int b = 0; unsigned long now; //to be compared to stored values every loop unsigned long light_time; +volatile char cmd = 'z'; -const char cmd_light = 'l'; - -const char cmd_debug = 'd'; -const char cmd_connect = 'i'; -volatile char cmd_char = 'z'; -const int serialDelay = 5; void setup () { - Serial.begin(57600); - Serial.flush(); - Serial.setTimeout(serialDelay); + mc.begin(); pixieSerial.begin(115200); // Pixie REQUIRES this baud rate light.setPixelColor(0, 0, 0, 0); light.show(); @@ -43,42 +38,25 @@ void setup () { } void loop () { - if (Serial.available()) { - /* read the most recent byte */ - cmd_char = (char)Serial.read(); - } - if (cmd_char != 'z') { - cmd(cmd_char); - cmd_char = 'z'; - } - now = millis(); + now = millis(); + cmd = mc.loop(); + + if (cmd == McopySerial::LIGHT) { + color = mc.getString(); + parseColorString(); + mc.confirm(McopySerial::LIGHT); + } + //send light signal to pixie every second if (now - light_time >= 1000) { - light.setPixelColor(0, r, g, b); - light.show(); - light_time = now; + light.setPixelColor(0, r, g, b); + light.show(); + light_time = now; } } -// -//l - light - followed by String -// -void cmd (char val) { - if (val == cmd_connect) { - Serial.println(cmd_connect);//confirm connection - } else if (val == cmd_light) { - colorString(); - Serial.println(cmd_light);//confirm light change - } -} - -void colorString () { - while (Serial.available() == 0) { - //Wait for color string - } - color = Serial.readString(); - //Serial.println(color); +void parseColorString () { commaR = color.indexOf(','); //comma trailing R commaG = color.indexOf(',', commaR + 1); diff --git a/scripts/ino.sh b/scripts/ino.sh index 162e95b..9f412d9 100644 --- a/scripts/ino.sh +++ b/scripts/ino.sh @@ -17,4 +17,5 @@ if [ -f "$(which jq)" ]; then fi cp ino/lib/McopySerial/McopySerial.* ino/mcopy_cam_canon/ -cp ino/lib/McopySerial/McopySerial.* ino/mcopy_JKMM100/ \ No newline at end of file +cp ino/lib/McopySerial/McopySerial.* ino/mcopy_JKMM100/ +cp ino/lib/McopySerial/McopySerial.* ino/components/mcopy_light/ \ No newline at end of file