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


josemarjr

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