Baseados em post criei um programa para acionar 4 reles via rede ethernet com o App OSC, porém preciso entender dois fatos. 1º. Só consigo usar as portas 0 a 9, as portas 10 a 13 não aceita o comando, o que pode estar ocorrendo? 2º. Sempre que a placa é alimentada todos os 4 relés vão pra 1, como faço para que eles permaneça em 0 e só vão pra 1 quando enviado o comando? Abaixo o programa que estou usando:
#include <spi.h>
#include <ethernet.h>
#include <ardosc.h>
byte myMac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte myIp[] = { 192, 168, 1, 48 };
int serverPort = 8000;
int destPort= 9000;
int relePin = 6;
int relePin2 = 7;
int relePin3 = 8;
int relePin4 = 9;
int flag=0;
int flag2=0;
int flag3=0;
int flag4=0;
OSCServer server;
OSCClient client;
void setup(){
Ethernet.begin(myMac ,myIp);
server.begin(serverPort);
server.addCallback("/ard/relePin",&func1);
server.addCallback("/ard/relePin2",&func2);
server.addCallback("/ard/relePin3",&func3);
server.addCallback("/ard/relePin4",&func4);
pinMode(relePin, OUTPUT);
pinMode(relePin2, OUTPUT);
pinMode(relePin3, OUTPUT);
pinMode(relePin4, OUTPUT);
}
void loop(){
if(server.aviableCheck()>0){
}
}
void func1(OSCMessage *_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(relePin,value);
OSCMessage txMes;
txMes.setAddress(_mes->getIpAddress(),destPort);
txMes.beginMessage("/ard/relePin");
txMes.addArgFloat(flag);
if(flag==1){
flag=0;
digitalWrite(relePin, HIGH);
}
else{
flag=1;
digitalWrite(relePin, LOW);
}
txMes.addArgInt32(flag);
client.send(&txMes);
}
void func2(OSCMessage *_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(relePin2,value);
OSCMessage txMes;
txMes.setAddress(_mes->getIpAddress(),destPort);
txMes.beginMessage("/ard/relePin2");
txMes.addArgFloat(flag2);
if(flag2==1){
flag2=0;
digitalWrite(relePin2, HIGH);
}
else{
flag2=1;
digitalWrite(relePin2, LOW);
}
}
void func3(OSCMessage *_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(relePin3,value);
OSCMessage txMes;
txMes.setAddress(_mes->getIpAddress(),destPort);
txMes.beginMessage("/ard/relePin3");
txMes.addArgFloat(flag3);
if(flag3==1){
flag3=0;
digitalWrite(relePin3, HIGH);
}
else{
flag3=1;
digitalWrite(relePin3, LOW);
}
}
void func4(OSCMessage *_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(relePin4,value);
OSCMessage txMes;
txMes.setAddress(_mes->getIpAddress(),destPort);
txMes.beginMessage("/ard/relePin4");
txMes.addArgFloat(flag4);
if(flag4==1){
flag4=0;
digitalWrite(relePin4, HIGH);
}
else{
flag4=1;
digitalWrite(relePin4, LOW);
}
}