356 lines
7.6 KiB
C++
356 lines
7.6 KiB
C++
#include <SPI.h>
|
|
#include <Ethernet.h> // version IDE 0022
|
|
#include <Z_OSC.h>
|
|
#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 ; i<rcvMes->getArgsNum(); 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);
|
|
}
|
|
|
|
|
|
|
|
|