implement part of the protocol

This commit is contained in:
Stefan Sterz 2016-01-18 22:30:36 +01:00
parent ae943a451b
commit 41544ff508
1 changed files with 67 additions and 19 deletions

View File

@ -2,7 +2,9 @@
RCSwitch mySwitch = RCSwitch();
int mode = 0;
uint8_t message[8];
int index = 0;
boolean com = false;
boolean on = false;
void setup()
@ -13,28 +15,74 @@ void setup()
void loop()
{
if(Serial.available()) {
mode = Serial.read();
switch (mode) {
case 126:
if(on) {
controlRCOutlets("0FFF0FFF0000");
Serial.println("Light is off.");
on = false;
} else {
controlRCOutlets("0FFF0FFF000F");
Serial.println("Light is on.");
on = true;
}
break;
while(Serial.available()) {
if(index > 0 || (Serial.peek() >= 80 && Serial.peek() <= 95)) {
message[index++] = Serial.read();
if(index > 7){
decodeMessage();
index = 0;
}
}
}
}
void decodeMessage() {
if(com) {
int cmd = message[0];
int pin = message[1] - 97;
int val[6];
memcpy(val, message + 2, 6);
switch (cmd) {
//case 80: break;
//case 81: break;
//case 82: break;
//case 83: break;
//case 84: break;
//case 85: break;
//case 86: break;
case 87: switchLight(val); break;
//case 88: break;
//case 89: break;
default: break;
}
} else if(message[0] == 90) {
com = true;
Serial.println("Ready!");
} else {
Serial.println("Arduino not configured for communication!");
}
}
void switchLight(int val[]) {
String triStateCode = "";
for(int i = 0; i < 6; i++)
{
String triStatePart = String(val[i], HEX);
triStatePart = (triStatePart.length() < 2) ? String("0" + triStatePart) : triStatePart;
triStateCode.concat(triStatePart);
}
char triState[triStateCode.length()];
triStateCode.toCharArray(triState, triStateCode.length());
if(on) {
controlRCOutlets(triState);
Serial.println("Light is off.");
on = false;
} else {
controlRCOutlets(triState);
Serial.println("Light is on.");
on = true;
}
}
void controlRCOutlets(const char* sCodeWord) {
mySwitch.sendTriState(sCodeWord);
delay(1000);