Arduino processing Android OSC

Olá pessoal, sou novo aqui no fórum e pouca experiência com Arduino.
Alguns dias atrás comecei a ler sobre protocolo OSC, Processing e a comunicação entre eles e estou frente a um problema que não consigo resolver.
Código Arduino: funciona legal, quando abro o monitor da serial, ele responde ascende e apagando o LED conforme a entrada do teclado, 0 ou 1.

#define led1 11
int estadoLed;
int leitura;

void setup() { 
  Serial.begin(9600); 
  pinMode(led1,OUTPUT);
}

void loop(){
  if (Serial.available()); 
  {  
    leitura = Serial.read();
    if (leitura == '1'){ 
      estadoLed = 255;
    }
    if (leitura == '0'){ 
      estadoLed = 0;
    }
  }
  analogWrite(led1, estadoLed);
}

Código Processing: Aqui o Android conversa com o PC(Win8 64bits), mas o PC não consegue conversar com o Arduino.

import oscP5.*;         
import netP5.*;

OscP5 oscp5;
int button1; 
int leitura; 
void setup() {
  size(320,480);
  oscp5 = new OscP5(this, 8000);
}

void draw() {
  if (button1==0) {
    leitura=0;
  }
  if (button1==1) {
    leitura=255;
  }
  fill(leitura, 0, button1);
  rect(110, 120, 100, 150);
}

void oscEvent(OscMessage theOscMessage) {
  String addr = theOscMessage.addrPattern();
  button1  = int(theOscMessage.get(0).floatValue());
}

Por favor, onde eu estou errando???

Consegui outros códigos onde controlo o LED, mas ele precisa estar com o FIRMATA -> StandartFirmata no Arduino e implementar o código no Processing. Eu não gostaria desse modo, gostaria de fazer a implementação normal do código no Arduino.

Desde já obrigado.

Boas :slight_smile:

Eu, ainda sou novo no arduino, por isso ainda não tenho muitos conhecimentos... Muito menos no processing...
Mas olhando para os código e se dizes que o led acende e apaga conforme primas 0 e 1, o problema está no processing, que não está a enviar os dados "1" e "0"... Isso porque no teu codigo não inicias a comunicação serial com o arduino

Experimenta assim:

import processing.serial.*;
import oscP5.*;         
import netP5.*;
OscP5 oscp5;
int button1;
int leitura;
Serial arduinoPort;

void setup() {
  size(320,480);
  arduinoPort = new Serial(this, "COM3", 9600);
  oscp5 = new OscP5(this, 8000);
}

void oscEvent(OscMessage theOscMessage) {
  String addr = theOscMessage.addrPattern();
  button1  = int(theOscMessage.get(0).floatValue());
}



void draw() {
  if (button1==0) {
    leitura=0;
    arduinoPort.write("0");
  }
  if (button1==1) {
    leitura=255;
    arduinoPort.write("1");
    rect(110, 120, 100, 150);
  }
}

Muitíssimo obrigado Humbertomc1997, funcionou exatamente como eu gostaria. Apenas um detalhe, a minha porta COM é de número 4. Um detalhe de cuidado para os demais.

Humbertomc1997:
Boas :slight_smile:

Eu, ainda sou novo no arduino, por isso ainda não tenho muitos conhecimentos... Muito menos no processing...
Mas olhando para os código e se dizes que o led acende e apaga conforme primas 0 e 1, o problema está no processing, que não está a enviar os dados "1" e "0"... Isso porque no teu codigo não inicias a comunicação serial com o arduino

Experimenta assim:

import processing.serial.*;

import oscP5.;         
import netP5.
;
OscP5 oscp5;
int button1;
int leitura;
Serial arduinoPort;

void setup() {
  size(320,480);
  arduinoPort = new Serial(this, "COM3", 9600);
  oscp5 = new OscP5(this, 8000);
}

void oscEvent(OscMessage theOscMessage) {
  String addr = theOscMessage.addrPattern();
  button1  = int(theOscMessage.get(0).floatValue());
}

void draw() {
  if (button1==0) {
    leitura=0;
    arduinoPort.write("0");
  }
  if (button1==1) {
    leitura=255;
    arduinoPort.write("1");
    rect(110, 120, 100, 150);
  }
}

No momento que estava a fazer o código, tinha em mente isso do número porta... Mas depois esqueci-me de referir xb