Go Down

Topic: Ajuda com TouchOSC (Read 1 time) previous topic - next topic

zurgbr

bom galera, to com um grande problema..
o arduino não quer interpretar o comando enviado pelo programa..
meu code..
Code: [Select]

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


// ethernet configuration
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF };
byte ip[] = { 169, 254, 143, 10 }; // ip do arduino na rede--------------------------------
EthernetServer server(80);
//OSC configuration
byte destIP[] = {169,254,143,50}; // ip do controlador osc---------------------
int serverPort = 80;
int destPort = 9000;
OSCServer oserver;
OSCClient oclient;
//pins defines
byte LED1 = 44;
byte LED2 = 45;
byte BOT1 = 41;
byte BOT2 = 30;
// Variaveis
boolean botstate1 = 0;
boolean botstate2 = 0;
char c = 0;
char command[6] = "\0";
void setup(){
  Ethernet.begin(mac, ip);
  server.begin();
  oserver.begin(serverPort);
  oserver.addCallback("/led1", &func1);
  oserver.addCallback("/led2", &func2);
  //setup dos pinos
  pinMode(LED1, OUTPUT);
  pinMode(BOT1, INPUT);
  digitalWrite(BOT1,1);
  pinMode(LED2, OUTPUT);
  pinMode(BOT2, INPUT);
  digitalWrite(BOT2,1);
}
void loop(){
  if(oserver.aviableCheck()>0){}
  if(digitalRead(BOT1)==LOW){
     botstate1 = !botstate1;
     OSCMessage txMes;
     txMes.setAddress(destIP,destPort);
     txMes.beginMessage("/led1");
     txMes.addArgFloat(botstate1);
     oclient.send(&txMes);
     digitalWrite(LED1,botstate1);
     delay(200);
    }
   if(digitalRead(BOT2)==LOW){
     botstate2 = !botstate2;
     digitalWrite(LED2,botstate2);
     OSCMessage txMes;
     txMes.setAddress(destIP,destPort);
     txMes.beginMessage("/led2");
     txMes.addArgFloat(botstate2);
     oclient.send(&txMes);
     delay(200);
    }
  EthernetClient client = server.available();
  // detect if current is the first line
  boolean current_line_is_first = true;
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          // auto reload webpage every 5 second
          //client.println("<META HTTP-EQUIV=REFRESH CONTENT=5 URL=>");
         
          // webpage title
          client.println("<center><p><h1>Arduino + Ethernet Shield Application v1.0</h1></p><center><hr><br />");

          // read analog pin 1 for the value of photocell
         
         
         
         
         
          // button led1 functions
          client.println("<center><p><h2>Led 1</h1></p><center><br />");
          client.println("<form  method=get name=form>");
          client.println("<button name=b value=1 type=submit style=height:80px;width:150px>LED On</button>");
          client.println("<button name=b value=2 type=submit style=height:80px;width:150px>LED Off</button>");
          client.println("</form><hr><br />");
         
          // button led2 functions
          client.println("<center><p><h2>Led 2</h1></p><center><br />");
          client.println("<form  method=get name=form>");
          client.println("<button name=b value=3 type=submit style=height:80px;width:150px>LED On</button>");
          client.println("<button name=b value=4 type=submit style=height:80px;width:150px>LED Off</button>");
          client.println("</form><br />");
         
          // button todas as leds functions
          client.println("<center><p><h2>Todas leds</h1></p><center><br />");
          client.println("<form  method=get name=form>");
          client.println("<button name=b value=5 type=submit style=height:80px;width:150px>LED On</button>");
          client.println("<button name=b value=6 type=submit style=height:80px;width:150px>LED Off</button>");
          client.println("</form><br />");
         
          // webpage footer
         
          break;
        }
        if (c == '\n') {
          // we're starting a new line
          current_line_is_first = false;
          current_line_is_blank = true;
        }
        else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
        // get the first http request
        if (current_line_is_first && c == '=') {
          for (int i = 0; i < 1; i++) {
            c = client.read();
            command[i] = c;
          }
         
         
         
          // LED1 web control
          if (!strcmp(command , "1")) {
           botstate1 = 1;
           }
          else if (!strcmp(command, "2") ) {
            botstate1 = 0;
          }
          // LED2 web control
          if (!strcmp(command , "3")) {
           botstate2 = 1;
            }
          else if (!strcmp(command, "4") ) {
            botstate2 = 0;
          }
          // todas LED web control
          if (!strcmp(command , "5")) {
           botstate1 = 1;
           botstate2 = 1;
            }
          else if (!strcmp(command, "6") ) {
            botstate1 = 0;
            botstate2 = 0;
          }
         
        }
      }
    }
   
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
  digitalWrite(LED1,botstate1);
  digitalWrite(LED2,botstate2);
}

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

o html e o botão estão funcionando..
mas o osc nem sinal, ja tentei de tudo..
e agora?

LegendBR

#1
Jul 12, 2013, 06:21 pm Last Edit: Jul 12, 2013, 06:37 pm by LegendBR Reason: 1
Já olhou no blog do elétron livre? Esse post é justamente sobre o OSC.

edit: acabei de ver que seu código está praticamente igual ao do blog :smiley-yell:.

Você tem certeza de que o comando está sendo enviado?

zurgbr


Já olhou no blog do elétron livre? Esse post é justamente sobre o OSC.

edit: acabei de ver que seu código está praticamente igual ao do blog :smiley-yell:.

Você tem certeza de que o comando está sendo enviado?


pois é, é o mesmo, quando eu aperto o botão no ipad, ele envia, a placa do ethernet ate pisca a luz, mas o arduino não acende o led..
achei outr biblioteca o z_OSC.
mas será q pode ser a versão da ide?

LegendBR



Já olhou no blog do elétron livre? Esse post é justamente sobre o OSC.

edit: acabei de ver que seu código está praticamente igual ao do blog :smiley-yell:.

Você tem certeza de que o comando está sendo enviado?


pois é, é o mesmo, quando eu aperto o botão no ipad, ele envia, a placa do ethernet ate pisca a luz, mas o arduino não acende o led..
achei outr biblioteca o z_OSC.
mas será q pode ser a versão da ide?



Cara, testa primeiro exatamente o código que tem no blog, depois você adiciona a parte web. Vi uma diferença no código, está faltando a porta do servidor, não sei se você configurou tudo como a mesma porta no TouchOSC, mas testa primeiro o "feijão com arroz" depois você incrementa.

zurgbr

Pior que eu testei os exemplos todos também..
e nada, vou testar a outra biblioteca..
vlw


Prezado, sou novo nesse assunto de arduino, mas vi seu código pois eu precisa de algo parecido e consegui resolver o problema. Se você colocar um delay (uns 500 ms) logo após o comando OSC você perceberá que ele está funcionando mas o seu comando html sempre manda um nível zero ou 1 para a porta a cada loop, por isso mesmo você ativando pelo OSC o que predomina é o html. Eu fiz um flag indicando que já foi pressionado e para não pressionar mais e deu certo. Não esqueça de limpar o flag no comando osc também.
Abraço,
Josemar

Obs.: Segue o código funcionando no arduino uno:
#include <SPI.h>
#include <Ethernet.h>
#include <ArdOSC.h>


// ethernet configuration
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEA, 0xFF };
byte ip[] = { 192, 168, 1, 99 }; // ip do arduino na rede--------------------------------
EthernetServer server(80);
//OSC configuration
byte destIP[] = {192,168,1,255}; // ip do controlador osc---------------------
int serverPort = 8000;
int destPort = 9000;
OSCServer oserver;
OSCClient oclient;
//pins defines
byte LED1 = 6;
byte LED2 = 7;
byte BOT1 = 8;
byte BOT2 = 9;

int old1 = 0;
int old2 = 0;

// Variaveis
boolean botstate1 = 0;
boolean botstate2 = 0;
char c = 0;
char command[6] = "\0";
void setup(){
  Ethernet.begin(mac, ip);
  server.begin();
  oserver.begin(serverPort);
  oserver.addCallback("/ard/rele01", &func1);
  oserver.addCallback("/ard/rele02", &func2);
  //setup dos pinos
  pinMode(LED1, OUTPUT);
  pinMode(BOT1, INPUT);
  digitalWrite(BOT1,HIGH);
  pinMode(LED2, OUTPUT);
  pinMode(BOT2, INPUT);
  digitalWrite(BOT2,HIGH);
}
void loop(){
  if(oserver.aviableCheck()>0){}
  if(digitalRead(BOT1)==LOW){
     botstate1 = !botstate1;
     OSCMessage txMes;
     txMes.setAddress(destIP,destPort);
     txMes.beginMessage("/ard/rele01");
     txMes.addArgFloat(botstate1);
     oclient.send(&txMes);
     digitalWrite(LED1,botstate1);
     delay(200);
    }
   if(digitalRead(BOT2)==LOW){
     botstate2 = !botstate2;
     digitalWrite(LED2,botstate2);
     OSCMessage txMes;
     txMes.setAddress(destIP,destPort);
     txMes.beginMessage("/ard/rele01");
     txMes.addArgFloat(botstate2);
     oclient.send(&txMes);
     delay(200);
    }
  EthernetClient client = server.available();
  // detect if current is the first line
  boolean current_line_is_first = true;
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          // auto reload webpage every 5 second
          //client.println("<META HTTP-EQUIV=REFRESH CONTENT=5 URL=>");
         
          // webpage title
          client.println("<center><p><h1>Arduino + Ethernet Shield Application v1.0</h1></p><center><hr><br />");

          // read analog pin 1 for the value of photocell
         
         
         
         
         
          // button led1 functions
          client.println("<center><p><h2>Led 1</h1></p><center><br />");
          client.println("<form  method=get name=form>");
          client.println("<button name=b value=1 type=submit style=height:80px;width:150px>LED On</button>");
          client.println("<button name=b value=2 type=submit style=height:80px;width:150px>LED Off</button>");
          client.println("</form><hr><br />");
         
          // button led2 functions
          client.println("<center><p><h2>Led 2</h1></p><center><br />");
          client.println("<form  method=get name=form>");
          client.println("<button name=b value=3 type=submit style=height:80px;width:150px>LED On</button>");
          client.println("<button name=b value=4 type=submit style=height:80px;width:150px>LED Off</button>");
          client.println("</form><br />");
         
          // button todas as leds functions
          client.println("<center><p><h2>Todas leds</h1></p><center><br />");
          client.println("<form  method=get name=form>");
          client.println("<button name=b value=5 type=submit style=height:80px;width:150px>LED On</button>");
          client.println("<button name=b value=6 type=submit style=height:80px;width:150px>LED Off</button>");
          client.println("</form><br />");
         
          // webpage footer
         
          break;
        }
        if (c == '\n') {
          // we're starting a new line
          current_line_is_first = false;
          current_line_is_blank = true;
        }
        else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
        // get the first http request
        if (current_line_is_first && c == '=') {
          for (int i = 0; i < 1; i++) {
            c = client.read();
            command = c;
          }
         
         
         
          // LED1 web control
          if (!strcmp(command , "1") && old1 == 0) {
           botstate1 = 1;
           old1 = 1;
           digitalWrite(LED1,botstate1);
           OSCMessage txMes;
     txMes.setAddress(destIP,destPort);
     txMes.beginMessage("/ard/rele01");
     txMes.addArgFloat(botstate1);
     oclient.send(&txMes);
     digitalWrite(LED1,botstate1);
     delay(200);
           }
          else if (!strcmp(command, "2") && old1 == 1 ) {
            botstate1 = 0;
            old1 = 0;
            digitalWrite(LED1,botstate1);
            OSCMessage txMes;
     txMes.setAddress(destIP,destPort);
     txMes.beginMessage("/ard/rele01");
     txMes.addArgFloat(botstate1);
     oclient.send(&txMes);
     digitalWrite(LED1,botstate1);
     delay(200);
          }
          // LED2 web control
          if (!strcmp(command , "3") && old2 == 0) {
           botstate2 = 1;
           old2 =1 ;
           digitalWrite(LED2,botstate2);
           OSCMessage txMes;
     txMes.setAddress(destIP,destPort);
     txMes.beginMessage("/ard/rele02");
     txMes.addArgFloat(botstate2);
     oclient.send(&txMes);
       delay(200);
            }
          else if (!strcmp(command, "4") && old2 == 1 ) {
            botstate2 = 0;
            old2 = 0;
            digitalWrite(LED2,botstate2);
            OSCMessage txMes;
     txMes.setAddress(destIP,destPort);
     txMes.beginMessage("/ard/rele02");
     txMes.addArgFloat(botstate2);
     oclient.send(&txMes);
     digitalWrite(LED2,botstate2);
     delay(200);
          }
          // todas LED web control
          if (!strcmp(command , "5")) {
           botstate1 = 1;
           botstate2 = 1; //aqui eu desativei, mas basta seguir a mesma lógiga
          // digitalWrite(LED1,botstate1);
          // digitalWrite(LED2,botstate2);
           
            }
          else if (!strcmp(command, "6") ) {
            botstate1 = 0;
            botstate2 = 0; //aqui eu desativei, mas basta seguir a mesma lógiga
            //digitalWrite(LED1,botstate1);
            //digitalWrite(LED2,botstate2);
          }
         
        }
      }
    }
   
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
// digitalWrite(LED1,botstate1);
// digitalWrite(LED2,botstate2);
}

void func1(OSCMessage *_mes){
  int value = (int)_mes->getArgFloat(0);
  if (value == 1){
  digitalWrite(LED1, HIGH);
  delay(500);
  }
  else
  digitalWrite(LED1, LOW);
  OSCMessage txMes1;    //cria uma nova menssagem OSC
  txMes1.setAddress(_mes->getIpAddress(),destPort);  //define o endereço e porta do destino da mensagem OSC
  txMes1.beginMessage("/ard/rele01");   //define comando OSC
  txMes1.addArgInt32(value);  //define no estado do led 2 que será enviado no argumento OSC para ANDROID
  oclient.send(&txMes1);   //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID
  //valor=value; //armazena o valor em variável global
}
void func2(OSCMessage *_mes){
  int value = (int)_mes->getArgFloat(0);
  if (value == 1){
  digitalWrite(LED2, HIGH);
  delay(500);
  old2 = 1;
  }
  else{
  digitalWrite(LED2, LOW);
  old2 = 0;
  }
  delay(500);
  OSCMessage txMes1;    //cria uma nova menssagem OSC
  txMes1.setAddress(_mes->getIpAddress(),destPort);  //define o endereço e porta do destino da mensagem OSC
  txMes1.beginMessage("/ard/rele02");   //define comando OSC
  txMes1.addArgInt32(value);  //define no estado do led 2 que será enviado no argumento OSC para ANDROID
  oclient.send(&txMes1);   //envia mensagem OSC para atualizar novo estado do led 1 no ANDROID
// valor=value; //armazena o valor em variável global
}

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy