#include #include // version IDE 0022 #include #include "IRremote.h" #define debug 1 #define RELE1 6 #define RELE2 7 #define RELE3 8 #define RELE4 9 int RECV_PIN = 2; IRrecv irrecv(RECV_PIN); IRsend irsend; decode_results results; byte myMac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x71, 0x13 }; byte myIp[] = { 200, 100, 50, 25 }; //byte myIp[] = { // 192, 168, 0, 15 }; int serverPort = 9000; byte destIp[] = { 200, 100, 50, 2}; // TO SET ADDRESS IP COMPUTER //byte destIp[] = { // 192, 168, 0, 2}; // TO SET ADDRESS IP COMPUTER int destPort = 9997; // TO SET SENDING PORT Z_OSCServer server; Z_OSCMessage *rcvMes; Z_OSCClient client; Z_OSCMessage message; void setup(){ pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(RELE1, OUTPUT); pinMode(RELE2, OUTPUT); pinMode(RELE3, OUTPUT); pinMode(RELE4, OUTPUT); digitalWrite(4,LOW); //disable device digitalWrite(5,LOW); //disable device digitalWrite(RELE1,LOW); //disable device digitalWrite(RELE2,LOW); //disable device digitalWrite(RELE3,LOW); //disable device digitalWrite(RELE4,LOW); //disable device irrecv.enableIRIn(); // Start the receiver Serial.begin(115200); Ethernet.begin(myMac ,myIp); // Ethernet.begin(myMac); //DHCP Serial.print("My IP address: "); for (byte thisByte = 0; thisByte < 4; thisByte++) { // print the value of each byte of the IP address: Serial.print(Ethernet.localIP()[thisByte], DEC); Serial.print("."); } Serial.println(); server.sockOpen(serverPort); Serial.println("Welcome, HDMI & IR controller Ready!"); } void loop(){ if(server.available()){ rcvMes=server.getMessage(); //logMessage(); cmdProcess(); } if (irrecv.decode(&results)) { unsigned long irCode = results.value; if (irCode!=0xFFFFFFFF) { Serial.print(irCode); Serial.print(" "); Serial.println(irCode, HEX); message.setAddress(destIp,destPort); message.setZ_OSCMessage("/irCode" , "i", &irCode); client.send(&message); message.flush(); } irrecv.resume(); // Receive the next value } } void cmdProcess() { uint32_t intValue; char *stringValue; uint16_t i; if( !strcmp( rcvMes->getZ_OSCAddress() , "/rele1" ) ) { intValue = rcvMes->getInteger32(0); Serial.print("Rele1: "); Serial.println(intValue); if(intValue) { digitalWrite(RELE2, LOW); digitalWrite(RELE3, LOW); digitalWrite(RELE4, LOW); delay(50); digitalWrite(RELE1, HIGH); } else digitalWrite(RELE1, LOW); } else if( !strcmp( rcvMes->getZ_OSCAddress() , "/rele2" ) ) { intValue = rcvMes->getInteger32(0); Serial.print("Rele2: "); Serial.println(intValue); if(intValue) { digitalWrite(RELE1, LOW); digitalWrite(RELE3, LOW); digitalWrite(RELE4, LOW); delay(50); digitalWrite(RELE2, HIGH); } else digitalWrite(RELE2, LOW); } else if( !strcmp( rcvMes->getZ_OSCAddress() , "/rele3" ) ) { intValue = rcvMes->getInteger32(0); Serial.print("Rele3: "); Serial.println(intValue); if(intValue) { digitalWrite(RELE1, LOW); digitalWrite(RELE2, LOW); digitalWrite(RELE4, LOW); delay(50); digitalWrite(RELE3, HIGH); } else digitalWrite(RELE3, LOW); } else if( !strcmp( rcvMes->getZ_OSCAddress() , "/rele4" ) ) { intValue = rcvMes->getInteger32(0); Serial.print("Rele4: "); Serial.println(intValue); if(intValue) { digitalWrite(RELE1, LOW); digitalWrite(RELE2, LOW); digitalWrite(RELE3, LOW); delay(50); digitalWrite(RELE4, HIGH); } else digitalWrite(RELE4, LOW); } else if( !strcmp( rcvMes->getZ_OSCAddress() , "/irCode1" ) ) { switch( rcvMes->getTypeTag(i) ) { case 'i': intValue = rcvMes->getInteger32(i); Serial.print("irCode1: "); Serial.println(intValue, HEX); IRSend(1, intValue); irrecv.enableIRIn(); // Start the receiver break; case 's': stringValue = rcvMes->getString(i); Serial.print("irCode1: "); intValue = atol(stringValue); Serial.println(intValue); //Serial.println(intValue); IRSend(1, intValue); irrecv.enableIRIn(); // Start the receiver break; } } else if( !strcmp( rcvMes->getZ_OSCAddress() , "/irCode2" ) ) { switch( rcvMes->getTypeTag(i) ) { case 'i': intValue = rcvMes->getInteger32(i); Serial.print("irCode2: "); Serial.println(intValue, HEX); IRSend(2, intValue); irrecv.enableIRIn(); // Start the receiver case 's': stringValue = rcvMes->getString(i); Serial.print("irCode2: "); intValue = atol(stringValue); Serial.println(intValue); //Serial.println(intValue); IRSend(2, intValue); irrecv.enableIRIn(); // Start the receiver break; } } else if( !strcmp( rcvMes->getZ_OSCAddress() , "/irCode3" ) ) { switch( rcvMes->getTypeTag(i) ) { case 'i': intValue = rcvMes->getInteger32(i); Serial.print("irCode3: "); Serial.println(intValue, HEX); IRSend(3, intValue); irrecv.enableIRIn(); // Start the receiver case 's': stringValue = rcvMes->getString(i); Serial.print("irCode3: "); intValue = atol(stringValue); Serial.println(intValue); //Serial.println(intValue); IRSend(3, intValue); irrecv.enableIRIn(); // Start the receiver break; } } else if( !strcmp( rcvMes->getZ_OSCAddress() , "/irCode4" ) ) switch( rcvMes->getTypeTag(i) ) { case 'i': intValue = rcvMes->getInteger32(i); Serial.print("irCode4: "); Serial.println(intValue, HEX); IRSend(4, intValue); irrecv.enableIRIn(); // Start the receiver case 's': stringValue = rcvMes->getString(i); Serial.print("irCode4: "); intValue = atol(stringValue); Serial.println(intValue); //Serial.println(intValue); IRSend(4, intValue); irrecv.enableIRIn(); // Start the receiver break; } } void logMessage(){ uint16_t i; byte *ip=rcvMes->getIpAddress(); long int intValue; float floatValue; char *stringValue; Serial.print(ip[0],DEC); Serial.print("."); Serial.print(ip[1],DEC); Serial.print("."); Serial.print(ip[2],DEC); Serial.print("."); Serial.print(ip[3],DEC); Serial.print(":"); Serial.print(rcvMes->getPortNumber()); Serial.print(" "); Serial.print(rcvMes->getZ_OSCAddress()); Serial.print(" "); Serial.print(rcvMes->getTypeTags()); Serial.print("--"); for(i=0 ; igetArgsNum(); i++){ switch( rcvMes->getTypeTag(i) ){ case 'i': intValue = rcvMes->getInteger32(i); Serial.print(intValue); Serial.print(" "); break; case 'f': floatValue = rcvMes->getFloat(i); Serial.print(floatValue); Serial.print(" "); break; case 's': stringValue = rcvMes->getString(i); Serial.print(stringValue); Serial.print(" "); break; } } Serial.println(""); } void IRSend(int channel, unsigned long value) { switch (channel) { case 3: digitalWrite(4, LOW); digitalWrite(5, LOW); break; case 2: digitalWrite(4, LOW); digitalWrite(5, HIGH); break; case 1: digitalWrite(4, HIGH); digitalWrite(5, LOW); break; case 4: digitalWrite(4, HIGH); digitalWrite(5, HIGH); break; } irsend.sendNEC(value, 32); }