Go Down

Topic: processing y arduino no se comunican SOLUCIONADO (Read 2781 times) previous topic - next topic

Lisergio

Aug 09, 2012, 04:46 pm Last Edit: Aug 13, 2012, 11:06 am by Lisergio Reason: 1
Buenas a todos, me gustaría saber si a alguien le esta pasando esto...

Estoy actualizando un proyecto que tenía apartado, de encender unas luces de casa con el iphone usando touchosc y processing, todo funcionaba perfecto, pero ahora ha dejado de funcionar.

Desde que lo programe en su dia , se han actualizado todos los programas, processing , arduino y OSX mountain lion...

he probado y la comunicación del iphone a processing funciona bien y recibe los toques de los botones, pero processing no envia datos por el puerto serie a arduino...

Estoy un moco mosca, ya que este código me funcionaba bien...
Ahora estoy con processing 1.5.1 arduino 1.0.1 y OSX mountain lion y estoy probando con una placa arduino uno y una mega con el mismo resultado...

pongo el ejemplo de lo que tengo puesto...

ARDUINO:

int message = 0;
int salida = 13;

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

void loop()

{
 
 if (Serial.available() > 0)
 {
   message = Serial.read();
    if (message == '1')
      {  
        digitalWrite (salida,HIGH);
      }
        else
     {    
        digitalWrite (salida,LOW);
     }
   
 }
 
}

PROCESSING:

import oscP5.*;
import netP5.*;
import processing.serial.*;  
OscP5 oscP5;
Serial arduinoPort;


float dato;
int led;


void setup()
{
 oscP5 = new OscP5(this,8000);
 arduinoPort = new Serial(this, Serial.list()[0], 9600);  
}

void oscEvent(OscMessage theOscMessage)
{
  String addr = theOscMessage.addrPattern();
  float  val  = theOscMessage.get(0).floatValue();
 
if(addr.equals("/1/push1"))        
{
  led = int (val);
  if (led==1)
   {
     arduinoPort.write("1");
     println("Enviamos 1 a Arduino");
   }
 }
 
 
}
void draw()
{

}

Lisergio

El problema esta solucionado,


En la linea de código donde inicializamos el puerto serie, hay que decirle cual es el puerto que queremos usar...

arduinoPort = new Serial(this, Serial.list()[0], 9600); (el
  • , indica el puerto que tenemos configurado para programar la placa arduino)

    Para saber cual tenemos , podemos desplegar en arduino la lista de puertos serie ... Herramientas - Puertos Serial

  • - /dev/tty.Bluetooth-PDA-Sync
    [1] - /dev/cu.Bluetooth-PDA-Sync
    [2] - /dev/tty.Bluetooth-Modem
    [3] - /dev/cu.Bluetooth-Modem
    [4] - /dev/tty.linvor-DevB
    [5] - /dev/cu.linvor-DevB

    En mi caso , estoy usando una tarjeta bluetooth conectada a los pines RX y TX de la placa arduino mega para la comunicacion con el Mac, asi que la opción 4 es la que voy a configurar en processing
    ...
    Con lo que la linea de código para inicializar el puerto serie quedaría así...

    arduinoPort = new Serial(this, Serial.list()[4], 9600);

    La cuestión del problema es que en su día funcionó, porque de casualidad me coincidió el puerto, no por que lo configurase a sabiendas.

    queda claro que sin enredar no se aprende nada.

    un saludo a todos y espero haber ayudado.

ruben6b19

Tengo un problema similar es mi primer proyecto que hago por favor espero que me des una mano este es mi codigo en mi arduino mega
Code: [Select]

const int ledPin = 13;
int rxByte;
 
void setup() {
  
  Serial.begin(9600);  
  pinMode(ledPin, OUTPUT);
  
}
 
void loop() {
  
  if (Serial.available() > 0)
  {
    
    rxByte = Serial.read();

    if (rxByte == 'H')
    {
      digitalWrite(ledPin, HIGH);
    }

    if (rxByte == 'L')
    {
      digitalWrite(ledPin, LOW);
    }
  
  }
  
}

este es el codigo en el processing
Code: [Select]

import processing.serial.*;
Serial port;
 
void setup()  {
 
  port = new Serial (this, "/dev/ttyACM0", 9600);  
}
 
void draw() {
 
  String html[] = loadStrings("http://localhost/prueba/LEDstate"); //este es mi archivo donde se guarda 1 para prender el led y 0 para apagarlo

  print (hour() + ":");
  print (minute() + ":");
  print (second() + " ");
  println (html [0]);  
 
  if (html [0].equals("1") == true) {
  println(" - LED ON");
  port.write('H'); // Envia "H" por el puerto Serial para encender el LED
}
else {
  println(" - LED OFF");
  port.write('L');
}

 
  delay (1000);
}

S.O. Ubuntu 14
les doy los permisos necesarios a LEDstate y a /dev/ttyACM0 para que puedan ser accedidos con chmod 666.
En el archivo LEDstate enciendo y apago el led 13 del arduino funciona bien pero cuando le reinicio mi Pc y levanto el processing no funciona, tengo q volver a cargar el arduino para que me funcione, tengo entendido que no es necesario cargarlo de nuevo, levantando el processing deberia funcionar pero no.    

jequinterosa

Buenas noches tengo un problema trato de hacer un proyecto en el que con processing  se mueva un cuadro por el eje x de derecha a izquierda y a través de eso se enciendan 10 led no me funcionan algien me podria ayudar dejo los codigos


Processing  :

import processing.serial.*;
Serial arduino;

void setup(){
 size(400,30);
 arduino=new Serial (this,Serial.list()[0],19200);
}

void draw(){
 background(190);
 rect(mouseX+0, 10,10,10);
  arduino.write(mouseX);
  println(mouseX);
}
void mousePressed(){
 fill(0);
}
 void mouseReleased(){
   fill(255);
 }

Arduino:


void setup() {
 // put your setup code here, to run once:
 //

Serial.begin(19200);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
}

void loop() {
 // put your main code here, to run repeatedly:
  //if(Serial.available()){
   char led =Serial.read();}
   if(led >=5&&led<=40){
     digitalWrite(3,HIGH);
   }
   if(led >=41&&led<=80){
     digitalWrite(4,HIGH);
   }
   if(led >=81&&led<=120){
     digitalWrite(5,HIGH);
   }
   if(led >=121&&led<=160){
     digitalWrite(6,HIGH);
   }
   if(led >=161&&led<=200){
     digitalWrite(7,HIGH);
   }
   if(led >=201&&led<=240){
     digitalWrite(8,HIGH);
   }
   if(led >=241&&led<=280){
     digitalWrite(9,HIGH);
   }
   if(led >=281&&led<=320){
     digitalWrite(10,HIGH);
   }
   if(led >=321 && led<=360){
     digitalWrite(11,HIGH);
     }
     if(led >=361 && led<=400){
     digitalWrite(12,HIGH);
   }

}


surbyte



Para que leer las Normas del foro. no?

Edita por favor todos los enlaces que contengan códigos
Luego ve a More (abajo a la derecha), click, luego Modify y estas en modo EDICION.
Selecciona todo el código y click en </> arriba del emoticon 



Go Up