Arduino + TouchOSC

Bom dia Pessoal!

Estou tendo um problema que nao consigo resolver...

Estou fazendo um teste... e ele nao esta funcionando como deveria

No arduino tenho apenas um led e, no projeto touchosc coloquei 2 toggle buttons.
O problema é que os dois botoes estão controlando o led.
Já coloquei um terceiro botão sem alterar nada nele e, ainda assim, ele ligava e desligava o led que apenas um botão deveria faze-lo.

Vou postar meu código para vcs verem:

////////////////////////////////////////
#include
#include
#include //inclui blibioteca ArdOSC

byte myMac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //define MAC para shield Ethernet
byte myIp[] = { 192, 168, 1, 100 }; //define IP da central automação
byte destIp[] = { 192, 168, 1, 134 };
int serverPort = 8000; //define a porta de recepção do comando OSC
int destPort = 9000; //define a porta de envio do comando OSC
int relePin = 7; //define a porta do arduino associada ao led
int sw1Pin = A1;
int flag=0;

OSCServer server; //inicializa o servidor OSC (serviço que trata a recepção de mensagem OSC)
OSCClient client; //inicializa o cliente OSC (serviço que trata o envio de mensagem OSC)

void setup(){
Ethernet.begin(myMac ,myIp); //inicializa a interface ethernet
server.begin(serverPort); //inicializa o servidor OSC definindo a porta de RX
//set callback function & oscaddress
server.addCallback("/ard/led1",&func1); //define que a rotina "func1" será executada para o comando OSC "/ard/ledPin"
pinMode(relePin, OUTPUT); //define a porta digital 9 (ledPin) do Arduino como saida
digitalWrite(sw1Pin, HIGH);
}

void loop(){

if(server.aviableCheck() > 0 ){ //verifica se existe alguma mensagem OSC disponível para leitura

if (digitalRead(sw1Pin) == LOW) {
int state = digitalRead(relePin);
OSCMessage txMes;
txMes.setAddress(destIp,destPort);
txMes.beginMessage("/ard/led1");
txMes.addArgFloat(!state);
client.send(&txMes);
digitalWrite(relePin, !state);
delay(300);
}
}
}

void func1(OSCMessage *_mes) {
int value = (int)_mes->getArgFloat(0);
digitalWrite(relePin, value);
}
/////////////////////////////////////////////

No botão(que de fato tem q controlar o LED), eu desmarquei a opção "auto" e coloquei o comando "/ard/led1" (sem as aspas) e, no botão 2 e nos demais não alterei nada.

Se vcs puderem me ajudar eu ficaria muito agradecido :slight_smile:

Att.

Não percebo nada do seu código. Sem identação e sem a formatação correcta, não consigo perceber nada.

#include 
#include 
#include //inclui blibioteca ArdOSC

Isto nao te da erro???

Nao faco ideia do que seja o TouchOSC...

bubulindo:

#include 

#include
#include //inclui blibioteca ArdOSC




Isto nao te da erro??? 

Nao faco ideia do que seja o TouchOSC...

O que devia lá estar era:
#include <SPI.h>
#include <Ethernet.h>

#include <ArdOSC.h>

Também não conheço o OSC, mas pelos vistos significa "Open Sound Control" e a biblioteca está aqui.

Desculpa ai pessoal...

Devo ter feito alguma besteira na hora de copiar/colar.

Vou mandar meu código formatado:

#include <SPI.h>
#include <Ethernet.h>
#include <ArdOSC.h>  //inclui blibioteca ArdOSC

byte myMac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};  //define MAC para shield Ethernet
byte myIp[]  = { 192, 168, 1, 100 };   //define IP da central automação
byte destIp[] = { 192, 168, 1, 134 };
int serverPort  = 8000;   //define a porta de recepção do comando OSC
int destPort = 9000;   //define a porta de envio do comando OSC
int relePin =  7;   //define a porta do arduino associada ao led 
int sw1Pin = A1;
int flag=0;

OSCServer server;    //inicializa o servidor OSC (serviço que trata a recepção de mensagem OSC)
OSCClient client;    //inicializa o cliente OSC (serviço que trata o envio de mensagem OSC)

void setup(){ 
  Ethernet.begin(myMac ,myIp);   //inicializa a interface ethernet
  server.begin(serverPort);   //inicializa o servidor OSC definindo a porta de RX
  //set callback function & oscaddress
  server.addCallback("/ard/led1",&func1);  //define que a rotina "func1" será executada para o comando OSC "/ard/ledPin"
  pinMode(relePin, OUTPUT);   //define a porta digital 9 (ledPin) do Arduino como saida
  digitalWrite(sw1Pin, HIGH);
}
  
void loop(){
  
  if(server.aviableCheck() > 0 ){   //verifica se existe alguma mensagem OSC disponível para leitura
    
   if (digitalRead(sw1Pin) == LOW) {
      int state = digitalRead(relePin);
      OSCMessage txMes;
      txMes.setAddress(destIp,destPort);
      txMes.beginMessage("/ard/led1");
      txMes.addArgFloat(!state);
      client.send(&txMes);
      digitalWrite(relePin, !state);
      delay(300);
   }       
  }  
}


void func1(OSCMessage *_mes) {
  int value = (int)_mes->getArgFloat(0);
  digitalWrite(relePin, value);
}

Abraços!

Não percebo nada disso na mesma. Imagino que o projecto original seja este:

#include <SPI.h>
#include <Ethernet.h>

#include <ArdOSC.h>

byte myMac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte myIp[]  = { 192, 168, 0, 177 };
int  serverPort  = 10000;
int destPort=12000;
int ledPin =  9;

int flag=0;

OSCServer server;
OSCClient client;

void setup(){ 
  
 Serial.begin(19200);
 
 Ethernet.begin(myMac ,myIp); 
 server.begin(serverPort);
 
 //set callback function & oscaddress
 server.addCallback("/ard/aaa",&func1);
 
 pinMode(ledPin, OUTPUT);  
 
}
  
void loop(){
  
  if(server.aviableCheck()>0){
 //    Serial.println("alive! "); 
  }
  
}


void func1(OSCMessage *_mes){
  int value = _mes->getArgInt32(0);
  if(value!=1) return;
  
  //create new osc message
  OSCMessage newMes;
  
  //set destination ip address & port no
  newMes.setAddress(_mes->getIpAddress(),destPort);
  newMes.beginMessage("/ard/aaa");
  
  if(flag==1){
    flag=0;
    digitalWrite(ledPin, LOW);
  }
  else{
    flag=1;
    digitalWrite(ledPin, HIGH);
  }
  newMes.addArgInt32(flag);
  
  //send osc message
  client.send(&newMes);
  
}

e não consigo ver a lógica das alterações que estão no seu código. Aparentemente passou o código da função de callback para o loop, mas não percebo porquê. Para além disso, está a alteração de:

  int value = _mes->getArgInt32(0);

para:

  int value = (int)_mes->getArgFloat(0);

e não estou a perceber a lógica.

Desculpa a demora em responder, pessoal!

Esse código eu copiei de um site que não me lembro agora...
Mas encontrei outro que está funcionando direitinho!

Segue código:

#include <SPI.h>
#include <Ethernet.h>  //inclui blibioteca Ethernet
#include <ArdOSC.h>  //inclui blibioteca ArdOSC


byte myMac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //define MAC para shield Ethernet
byte myIP[]={192,168,1,100}; //define IP da central automação
byte destIP[]={192,168,1,110}; //define IP do dispositivo de comando OSC
int serverPort=8000; //define a porta de recepção do comando OSC
int destPort=9000; //define a porta de envio do comando OSC
int led1Pin=8; //define a porta do arduino associada ao led 1 (vermelho)
int led2Pin=9; //define a porta do arduino associada ao led 2 (verde)
int sw1Pin=3; //define a porta do arduino associada ao botão 1 (esquerdo)
int sw2Pin=7; //define a porta do arduino associada ao botão 2 (direito)
OSCServer server; //inicializa o servidor OSC (serviço que trata a recepção de mensagem OSC)
OSCClient client; //inicializa o cliente OSC (serviço que trata o envio de mensagem OSC)
void setup(){
  Ethernet.begin(myMac,myIP); //inicializa a interface ethernet
  server.begin(serverPort); //inicializa o servidor OSC definindo a porta de RX
  server.addCallback("/ard/led1",&func1); //define que a rotina "func1" será executada para o comando OSC "/ard/led1"
  server.addCallback("/ard/led2",&func2); //define que a rotina "func2" será executada para o comando OSC "/ard/led2"
  pinMode(led1Pin,OUTPUT); //define a porta digital 8 (ledPin1) do Arduino como saida
  pinMode(led2Pin,OUTPUT); //define a porta digital 9 (ledPin2) do Arduino como saida
  pinMode(sw1Pin, INPUT);
  digitalWrite(sw1Pin,HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 6(sw1)
  digitalWrite(sw2Pin,HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 7(sw2)
}
void loop(){
  if(server.aviableCheck()>0){ //verifica se existe alguma mensagem OSC disponível para leitura
  }
  if(digitalRead(sw1Pin)==LOW){ //verifica se o botao sw1 foi pressionado
    int state=digitalRead(sw1Pin); //armazena em "state" o estado atual do led 1
    OSCMessage txMes; //cria uma nova menssagem OSC
    txMes.setAddress(destIP,destPort); //define o endereço e porta do destino da mensagem OSC
    txMes.beginMessage("/ard/led1"); //define comando OSC
    txMes.addArgFloat(!state); //define no estado do led 1 que será enviado no argumento OSC para ANDROID/IPAD/IPHONE/IPOD
    client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID/IPAD/IPHONE/IPOD
    digitalWrite(led1Pin,!state); //modifica estado da porta digital 8 (ledPin1)
    delay(300); //delay de 300ms
  }
  if(digitalRead(sw2Pin)==LOW){ //verifica se o botao sw2 foi pressionado
    int state=digitalRead(sw2Pin); //armazena em "state" o estado atual do led 2
    OSCMessage txMes; //cria uma nova menssagem OSC
    txMes.setAddress(destIP,destPort); //define o endereço e porta do destino da mensagem OSC
    txMes.beginMessage("/ard/led2"); //define comando OSC
    txMes.addArgFloat(!state); //define no estado do led 2 que será enviado no argumento OSC para ANDROID/IPAD/IPHONE/IPOD
    client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 2 no ANDROID/IPAD/IPHONE/IPOD
    digitalWrite(led2Pin,!state); //modifica estado da porta digital 9 (ledPin2)
    delay(300); //delay de 300ms
  }
}

void func1(OSCMessage *_mes){ //rotina que trata comando OSC "/ard/led1" recebido do ANDROID/IPAD/IPHONE/IPOD
  int value=(int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/led1"
  digitalWrite(led1Pin,value); //muda estado da porta digital 8 (ledPin1) conforme argumento OSC recebido
}
void func2(OSCMessage *_mes){ //rotina que trata comando OSC "/ard/led2" recebido do ANDROID/IPAD/IPHONE/IPOD
  int value=(int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/led2"
  digitalWrite(led2Pin,value); //muda estado da porta digital 9 (ledPin2) conforme argumento OSC recebido
}

Agora tenho outras duas questões:

  1. Como usar push buttons para controlar "fisicamente" os mesmos leds que o celular controla?
  2. Consigo controlar os dispositivos via 3G no celular, mas não consigo obter o retorno do arduino. Tem como resolver isso?

Abraços pessoal. :smiley: :smiley: :smiley:

Isso que pergunta, deveria estar a acontecer:

  if(digitalRead(sw1Pin)==LOW){ //verifica se o botao sw1 foi pressionado
    int state=digitalRead(sw1Pin); //armazena em "state" o estado atual do led 1
    OSCMessage txMes; //cria uma nova menssagem OSC
    txMes.setAddress(destIP,destPort); //define o endereço e porta do destino da mensagem OSC
    txMes.beginMessage("/ard/led1"); //define comando OSC
    txMes.addArgFloat(!state); //define no estado do led 1 que será enviado no argumento OSC para ANDROID/IPAD/IPHONE/IPOD
    client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID/IPAD/IPHONE/IPOD
    digitalWrite(led1Pin,!state); //modifica estado da porta digital 8 (ledPin1)
    delay(300); //delay de 300ms
  }

Boa noite!

Não entendi sua resposta...

Mas seja como for, eu consegui resolver a questão do botão físico, no entanto, eu não consigo obter o estado da porta no celular qdo o acionamento é feito através do botão físico.

Abraços!

O que o pedaço de código que retirei do programa original devia estar a fazer era verificar se o botão (físico) foi premido e, se sim, alterar o estado do LED e enviar a mensagem para o dispositivo com o estado actual do LED. Já agora, depois de olhar com mais atenção para o código, imagino que exista um problema com a linha:

   int state=digitalRead(sw1Pin); //armazena em "state" o estado atual do led 1

que deveria ser:

   int state=digitalRead(led1Pin); //armazena em "state" o estado atual do led 1

Em relação ao resto, como não conheço a biblioteca, não consigo ajudar. Pode ser do código da aplicação de comando? Como é esse código?

Já agora, penso que falta uma coisa na função setup():

 pinMode(led1Pin,OUTPUT); //define a porta digital 8 (ledPin1) do Arduino como saida
  pinMode(led2Pin,OUTPUT); //define a porta digital 9 (ledPin2) do Arduino como saida
  pinMode(sw1Pin, INPUT);
  digitalWrite(sw1Pin,HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 6(sw1)
  digitalWrite(sw2Pin,HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 7(sw2)

Não estou a ver a configuração do pino do botão 2 configurado como saída. Assim, as linhas anteriores deveriam ser:

 pinMode(led1Pin,OUTPUT); //define a porta digital 8 (ledPin1) do Arduino como saida
  pinMode(led2Pin,OUTPUT); //define a porta digital 9 (ledPin2) do Arduino como saida
  pinMode(sw1Pin, INPUT);
  pinMode(sw2Pin, INPUT);
  digitalWrite(sw1Pin,HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 6(sw1)
  digitalWrite(sw2Pin,HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 7(sw2)

Boa tarde pessoal,

Estou utilizando este código que postaram aqui.

#include <SPI.h>
#include <Ethernet.h> //inclui blibioteca Ethernet
#include <ArdOSC.h> //inclui blibioteca ArdOSC

byte myMac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //define MAC para shield Ethernet
byte myIP[] = {192, 168, 0, 100}; //define IP da central automação
byte destIP[] = {192, 168, 0, 200}; //define IP do dispositivo de comando OSC
int serverPort = 8000; //define a porta de recepção do comando OSC
int destPort = 9000; //define a porta de envio do comando OSC
int led1Pin = 8; //define a porta do arduino associada ao led 1 (vermelho)
int led2Pin = 9; //define a porta do arduino associada ao led 2 (verde)
int sw1Pin = 3; //define a porta do arduino associada ao botão 1 (esquerdo)
int sw2Pin = 7; //define a porta do arduino associada ao botão 2 (direito)
OSCServer server; //inicializa o servidor OSC (serviço que trata a recepção de mensagem OSC)
OSCClient client; //inicializa o cliente OSC (serviço que trata o envio de mensagem OSC)
void setup() {
Ethernet.begin(myMac, myIP); //inicializa a interface ethernet
server.begin(serverPort); //inicializa o servidor OSC definindo a porta de RX
server.addCallback("/ard/led1", &func1); //define que a rotina "func1" será executada para o comando OSC "/ard/led1"
server.addCallback("/ard/led2", &func2); //define que a rotina "func2" será executada para o comando OSC "/ard/led2"
pinMode(led1Pin, OUTPUT); //define a porta digital 8 (ledPin1) do Arduino como saida
pinMode(led2Pin, OUTPUT); //define a porta digital 9 (ledPin2) do Arduino como saida
pinMode(sw1Pin, INPUT);
pinMode(sw2Pin, INPUT);
digitalWrite(sw1Pin, HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 6(sw1)
digitalWrite(sw2Pin, HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 7(sw2)
}
void loop() {
if (server.aviableCheck() > 0) { //verifica se existe alguma mensagem OSC disponível para leitura
}
if (digitalRead(sw1Pin) == LOW) { //verifica se o botao sw1 foi pressionado
int state = digitalRead(sw1Pin); //armazena em "state" o estado atual do led 1
OSCMessage txMes; //cria uma nova menssagem OSC
txMes.setAddress(destIP, destPort); //define o endereço e porta do destino da mensagem OSC
txMes.beginMessage("/ard/led1"); //define comando OSC
txMes.addArgFloat(!state); //define no estado do led 1 que será enviado no argumento OSC para ANDROID/IPAD/IPHONE/IPOD
client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID/IPAD/IPHONE/IPOD
digitalWrite(led1Pin, !state); //modifica estado da porta digital 8 (ledPin1)
delay(300); //delay de 300ms
}
if (digitalRead(sw2Pin) == LOW) { //verifica se o botao sw2 foi pressionado
int state = digitalRead(sw2Pin); //armazena em "state" o estado atual do led 2
OSCMessage txMes; //cria uma nova menssagem OSC
txMes.setAddress(destIP, destPort); //define o endereço e porta do destino da mensagem OSC
txMes.beginMessage("/ard/led2"); //define comando OSC
txMes.addArgFloat(!state); //define no estado do led 2 que será enviado no argumento OSC para ANDROID/IPAD/IPHONE/IPOD
client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 2 no ANDROID/IPAD/IPHONE/IPOD
digitalWrite(led2Pin, !state); //modifica estado da porta digital 9 (ledPin2)
delay(300); //delay de 300ms
}
}

void func1(OSCMessage *_mes) { //rotina que trata comando OSC "/ard/led1" recebido do ANDROID/IPAD/IPHONE/IPOD
int value = (int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/led1"
digitalWrite(led1Pin, value); //muda estado da porta digital 8 (ledPin1) conforme argumento OSC recebido
}
void func2(OSCMessage *_mes) { //rotina que trata comando OSC "/ard/led2" recebido do ANDROID/IPAD/IPHONE/IPOD
int value = (int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/led2"
digitalWrite(led2Pin, value); //muda estado da porta digital 9 (ledPin2) conforme argumento OSC recebido
}

===_FIM_DO_CODIGO====

Mas ao compilar dá este erro:

Arduino: 1.6.3 (Windows 7), Placa:"Arduino Uno"

A usar a biblioteca SPI na directoria: C:\Program Files\Arduino\hardware\arduino\avr\libraries\SPI

A usar a biblioteca Ethernet na directoria: C:\Program Files\Arduino\libraries\Ethernet

A usar a biblioteca ArdOSC na directoria: C:\Program Files\Arduino\libraries\ArdOSC (legacy)

C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files\Arduino\hardware\arduino\avr\libraries\SPI -IC:\Program Files\Arduino\libraries\Ethernet\src -IC:\Program Files\Arduino\libraries\ArdOSC C:\Users\User\AppData\Local\Temp\build6722181308024730752.tmp\sketch_OSC_2.cpp -o C:\Users\User\AppData\Local\Temp\build6722181308024730752.tmp\sketch_OSC_2.cpp.o

In file included from C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCClient.h:21:0,

from C:\Program Files\Arduino\libraries\ArdOSC/ArdOSC.h:55,

from sketch_OSC_2.ino:4:

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCEncoder.h:27:33: error: 'OSCMessage::OSCMessage' is not a type

int16_t encode( OSCMessage::OSCMessage *mes ,uint8_t *_binData );

^

In file included from C:\Program Files\Arduino\libraries\ArdOSC/ArdOSC.h:55:0,

from sketch_OSC_2.ino:4:

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCClient.h:36:5: error: 'OSCEncoder::OSCEncoder' names the constructor, not the type

OSCEncoder::OSCEncoder encoder;

^

In file included from C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCServer.h:19:0,

from C:\Program Files\Arduino\libraries\ArdOSC/ArdOSC.h:56,

from sketch_OSC_2.ino:4:

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCDecoder.h:26:30: error: 'OSCMessage::OSCMessage' is not a type

int16_t decode( OSCMessage::OSCMessage *_mes ,const uint8_t *_binData );

^

In file included from C:\Program Files\Arduino\libraries\ArdOSC/ArdOSC.h:56:0,

from sketch_OSC_2.ino:4:

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCServer.h:31:5: error: 'OSCDecoder::OSCDecoder' names the constructor, not the type

OSCDecoder::OSCDecoder _decoder;

^

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCServer.h:32:5: error: 'Pattern::Pattern' names the constructor, not the type

Pattern::Pattern _adrMatch;

^

Erro ao compilar.

===FIM_DO_ERRO===

Conseguem ajudar?

obrigado.

Coelho_84:
Boa tarde pessoal,

Estou utilizando este código que postaram aqui.

#include <SPI.h>
#include <Ethernet.h> //inclui blibioteca Ethernet
#include <ArdOSC.h> //inclui blibioteca ArdOSC

byte myMac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //define MAC para shield Ethernet
byte myIP[] = {192, 168, 0, 100}; //define IP da central automação
byte destIP[] = {192, 168, 0, 200}; //define IP do dispositivo de comando OSC
int serverPort = 8000; //define a porta de recepção do comando OSC
int destPort = 9000; //define a porta de envio do comando OSC
int led1Pin = 8; //define a porta do arduino associada ao led 1 (vermelho)
int led2Pin = 9; //define a porta do arduino associada ao led 2 (verde)
int sw1Pin = 3; //define a porta do arduino associada ao botão 1 (esquerdo)
int sw2Pin = 7; //define a porta do arduino associada ao botão 2 (direito)
OSCServer server; //inicializa o servidor OSC (serviço que trata a recepção de mensagem OSC)
OSCClient client; //inicializa o cliente OSC (serviço que trata o envio de mensagem OSC)
void setup() {
Ethernet.begin(myMac, myIP); //inicializa a interface ethernet
server.begin(serverPort); //inicializa o servidor OSC definindo a porta de RX
server.addCallback("/ard/led1", &func1); //define que a rotina "func1" será executada para o comando OSC "/ard/led1"
server.addCallback("/ard/led2", &func2); //define que a rotina "func2" será executada para o comando OSC "/ard/led2"
pinMode(led1Pin, OUTPUT); //define a porta digital 8 (ledPin1) do Arduino como saida
pinMode(led2Pin, OUTPUT); //define a porta digital 9 (ledPin2) do Arduino como saida
pinMode(sw1Pin, INPUT);
pinMode(sw2Pin, INPUT);
digitalWrite(sw1Pin, HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 6(sw1)
digitalWrite(sw2Pin, HIGH); //ativa PULL-UP interno do ATMEGA na porta digital 7(sw2)
}
void loop() {
if (server.aviableCheck() > 0) { //verifica se existe alguma mensagem OSC disponível para leitura
}
if (digitalRead(sw1Pin) == LOW) { //verifica se o botao sw1 foi pressionado
int state = digitalRead(sw1Pin); //armazena em "state" o estado atual do led 1
OSCMessage txMes; //cria uma nova menssagem OSC
txMes.setAddress(destIP, destPort); //define o endereço e porta do destino da mensagem OSC
txMes.beginMessage("/ard/led1"); //define comando OSC
txMes.addArgFloat(!state); //define no estado do led 1 que será enviado no argumento OSC para ANDROID/IPAD/IPHONE/IPOD
client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID/IPAD/IPHONE/IPOD
digitalWrite(led1Pin, !state); //modifica estado da porta digital 8 (ledPin1)
delay(300); //delay de 300ms
}
if (digitalRead(sw2Pin) == LOW) { //verifica se o botao sw2 foi pressionado
int state = digitalRead(sw2Pin); //armazena em "state" o estado atual do led 2
OSCMessage txMes; //cria uma nova menssagem OSC
txMes.setAddress(destIP, destPort); //define o endereço e porta do destino da mensagem OSC
txMes.beginMessage("/ard/led2"); //define comando OSC
txMes.addArgFloat(!state); //define no estado do led 2 que será enviado no argumento OSC para ANDROID/IPAD/IPHONE/IPOD
client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 2 no ANDROID/IPAD/IPHONE/IPOD
digitalWrite(led2Pin, !state); //modifica estado da porta digital 9 (ledPin2)
delay(300); //delay de 300ms
}
}

void func1(OSCMessage *_mes) { //rotina que trata comando OSC "/ard/led1" recebido do ANDROID/IPAD/IPHONE/IPOD
int value = (int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/led1"
digitalWrite(led1Pin, value); //muda estado da porta digital 8 (ledPin1) conforme argumento OSC recebido
}
void func2(OSCMessage *_mes) { //rotina que trata comando OSC "/ard/led2" recebido do ANDROID/IPAD/IPHONE/IPOD
int value = (int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/led2"
digitalWrite(led2Pin, value); //muda estado da porta digital 9 (ledPin2) conforme argumento OSC recebido
}

===_FIM_DO_CODIGO====

Mas ao compilar dá este erro:

Arduino: 1.6.3 (Windows 7), Placa:"Arduino Uno"

A usar a biblioteca SPI na directoria: C:\Program Files\Arduino\hardware\arduino\avr\libraries\SPI

A usar a biblioteca Ethernet na directoria: C:\Program Files\Arduino\libraries\Ethernet

A usar a biblioteca ArdOSC na directoria: C:\Program Files\Arduino\libraries\ArdOSC (legacy)

C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files\Arduino\hardware\arduino\avr\libraries\SPI -IC:\Program Files\Arduino\libraries\Ethernet\src -IC:\Program Files\Arduino\libraries\ArdOSC C:\Users\User\AppData\Local\Temp\build6722181308024730752.tmp\sketch_OSC_2.cpp -o C:\Users\User\AppData\Local\Temp\build6722181308024730752.tmp\sketch_OSC_2.cpp.o

In file included from C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCClient.h:21:0,

from C:\Program Files\Arduino\libraries\ArdOSC/ArdOSC.h:55,

from sketch_OSC_2.ino:4:

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCEncoder.h:27:33: error: 'OSCMessage::OSCMessage' is not a type

int16_t encode( OSCMessage::OSCMessage *mes ,uint8_t *_binData );

^

In file included from C:\Program Files\Arduino\libraries\ArdOSC/ArdOSC.h:55:0,

from sketch_OSC_2.ino:4:

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCClient.h:36:5: error: 'OSCEncoder::OSCEncoder' names the constructor, not the type

OSCEncoder::OSCEncoder encoder;

^

In file included from C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCServer.h:19:0,

from C:\Program Files\Arduino\libraries\ArdOSC/ArdOSC.h:56,

from sketch_OSC_2.ino:4:

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCDecoder.h:26:30: error: 'OSCMessage::OSCMessage' is not a type

int16_t decode( OSCMessage::OSCMessage *_mes ,const uint8_t *_binData );

^

In file included from C:\Program Files\Arduino\libraries\ArdOSC/ArdOSC.h:56:0,

from sketch_OSC_2.ino:4:

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCServer.h:31:5: error: 'OSCDecoder::OSCDecoder' names the constructor, not the type

OSCDecoder::OSCDecoder _decoder;

^

C:\Program Files\Arduino\libraries\ArdOSC/OSCCommon/OSCServer.h:32:5: error: 'Pattern::Pattern' names the constructor, not the type

Pattern::Pattern _adrMatch;

^

Erro ao compilar.

===FIM_DO_ERRO===

Conseguem ajudar?

obrigado.

É só usar a versão 1.0 do arduino no pc