olá galera sou iniciante com arduino e estou com alguns problemas,
estou com um arduino UNO+ethernet shield. Estou tentando acender um led pelo aplicativo TOUCHOSC
já baixei a os arquivos necessitados do aplicativo Android e coloquei na pasta da biblioteca do arduino,
achei alguns tutoriais mas sem sucesso, no final não consigo acender meu led.
estou usando esse codigo:

#include
#include
#include //inclui blibioteca ArdOSC

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

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/ledPin",&func1); //define que a rotina "func1" será executada para o comando OSC "/ard/ledPin"

pinMode(ledPin, OUTPUT); //define a porta digital 9 (ledPin) do Arduino como saida

}

void loop(){

if(server.aviableCheck()>0){ //verifica se existe alguma mensagem OSC disponível para leitura
// Serial.println("alive! ");
}

}

void func1(OSCMessage *_mes){ //rotina que trata comando OSC "/ard/led2" recebido do ANDROID
int value=(int)_mes->getArgFloat(0); //armazena em "value" o argumento do comando OSC "/ard/led2"
digitalWrite(ledPin,value); //muda estado da porta digital 9 (ledPin2) conforme argumento OSC recebido

//create new osc message
OSCMessage txMes; //cria uma nova menssagem OSC

//set destination ip address & port no
txMes.setAddress(_mes->getIpAddress(),destPort); //define o endereço e porta do destino da mensagem OSC
txMes.beginMessage("/ard/ledPin"); //define comando OSC
txMes.addArgFloat(flag); //define no estado do led 2 que será enviado no argumento OSC para ANDROID

if(flag==1){
flag=0;
digitalWrite(ledPin, LOW);
}
else{
flag=1;
digitalWrite(ledPin, HIGH);
}
txMes.addArgInt32(flag);

//send osc message
client.send(&txMes); //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID

}

no caso do myIp estou mudando os ultimos digitos 192.168.1.XXX
e meu ip no (cmd:ipconfig é 192.168.1.107)
no touchosc editor estou colocando no botão /ard/ledPin (TO 0 1)
ao passar o programa para meu celular android configuro seu host
como IP 192, 168, 1, 177 que utilizei na programação do arduino
com as portas 8000 e 9000, aparece o meu botão que criei no touchosc editor.
mas não dá o comando para meu arduino ethernet shield, (MEU CELULAR ESTÁ CONECTADO NA MESMA REDE VIA WI-FI.).
A ligação que estou usando é
http://ferpinheiro.files.wordpress.com/2011/05/ard11.jpg (no caso da imagem está pino 13 mas estou usando pino 9 conforme a ligação int ledPin = 9_
O que estou fazendo de errado? segui passo a passo de alguns tutoriais da internet mas sem sucesso ao ligar o led.
por favor me ajudem.

Exibições: 934

Responder esta

Respostas a este tópico

Se você deu CTRL+C CTRL+V no seu código, dê uma olhada em seus includes, esta faltando as bibliotecas

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

#include < ArdOSC.h >

na hora de colar acho que nao saiu

Tenta assim

#include <SPI.h>
#include <Ethernet.h>
#include <ArdOSC.h>
byte myMac[]={0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte myIp[] = { 192, 168, 1, 177 };
int serverPort = 8000;
int destPort= 9000;
int ledPin = 9;
OSCServer server;
OSCClient client;
void setup(){
Ethernet.begin(myMac ,myIp);
server.begin(serverPort);
server.addCallback("/ard/ledPin",&func1);
pinMode(ledPin, OUTPUT);
}
void loop(){
if(server.aviableCheck()>0){
 //Serial.println("alive! ");
}
}
void func1(OSCMessage *_mes){
int value=(int)_mes->getArgFloat(0);
digitalWrite(ledPin,value);
int flag = digitalRead(ledPin);
OSCMessage txMes;
txMes.setAddress(_mes->getIpAddress(),destPort);
txMes.beginMessage("/ard/ledPin");
txMes.addArgFloat(flag);
txMes.addArgInt32(flag);
client.send(&txMes);
}

Mas acho que não é necessario enviar a mensagem do status do led para o aparelho movel, uma vez que quem definiu esse status foi o proprio aparelho.

Então eu tiraria essa parte

int flag = digitalRead(ledPin);
OSCMessage txMes;
txMes.setAddress(_mes->getIpAddress(),destPort);
txMes.beginMessage("/ard/ledPin");
txMes.addArgFloat(flag);
txMes.addArgInt32(flag);
client.send(&txMes);

tentei o seu código deu certo! obg!!! *-*

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço