Lab_interaccio/2014/BROOMX/switch_IR_eth/switch_IR_eth.ino
2025-02-25 21:29:42 +01:00

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);
}