#include uint8_t message[8]; int index = 0; boolean com = false; void setup() { Serial.begin(9600); } void loop() { while(Serial.available()) { uint8_t x = Serial.read(); if(index > 0 || (x >= 80 && x <= 95)) { message[index++] = x; if(index > 7){ decodeMessage(); index = 0; } } } } void decodeMessage() { int cmd = message[0]; int pin = (message[1] - 97 < 0 || message[1] - 97 > 19)? -1 : message[1] - 97 < 0; if(com) { uint8_t val[6]; memcpy(val, message + 2, 6); switch (cmd) { //case 80: break; case 81: setMode(val[0], pin); break; case 82: digitalW(val[0], pin) break; //case 83: break; //case 84: break; //case 85: break; //case 86: break; case 87: sendRCTristate(val, pin); break; //case 88: break; //case 89: break; default: break; } } else if(cmd] == 90) { com = true; setMode(0, pin); digitalWrite(pin, HIGH); Serial.println("Ready!"); } else { Serial.println("Arduino not configured for communication!"); } } void setMode(uint8_t val, int pin) { if(pin == -1) { if(debug) Serial.println("badpin"); return; } if (val == 0) { pinMode(pin, OUTPUT); } else { pinMode(pin, INPUT); } } void digitalW(uint8_t val, int pin) { if(pin == -1) { if(debug) Serial.println("badpin"); return; } pinMode(pin, OUTPUT); if(val == 0) { digitalWrite(pin, LOW); } else { digitalWrite(pin, HIGH); } } void sendRCTristate (uint8_t val[], int pin) { if(pin == -1) { if(debug) Serial.println("badpin"); return; } String triStateCode = ""; RCSwitch rc = RCSwitch(); mySwitch.enableTransmit(pin); 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() + 1]; triStateCode.toUpperCase(); triStateCode.toCharArray(triState, triStateCode.length() + 1); controlRCOutlets(triState); Serial.println("RC-Tristate send!"); } void controlRCOutlets(const char* sCodeWord) { mySwitch.sendTriState(sCodeWord); delay(1000); }