Go Down

Topic: transmision seria arduino->processing processing->arduino (Read 2086 times) previous topic - next topic

magl

Cuando envio datos desde arduino a processing hago lo siguiente:
arduino:
Code: [Select]
Serial.print(variable1);
Serial.print("/");
Serial.print(variable2);
Serial.print("/");
Serial.print(variable3);
Serial.write(46); // 46 es un ejemplo

processing:
Code: [Select]
while (myPort.available() > 0) {
chByte = myPort.readChar();
serialEvent(chByte);
}

void serialEvent(char digito) {
if(digito>=47 && digito<=57){ //digito>='0' && digito<='9' || digito=='/') {
    buf += digito;
  }
else if (digito == 46) {
    var_variables = buf;
    String[] S_var = split(var_variables, '/');
    var_1  = int(S_var[0]);
    var_2  = int(S_var[1]);
    var_3  = int(S_var[2]);
}


Pero si quiero enviar datos de processing a arduino:
processing:
Code: [Select]
   Serial.write(var);
arduino:
Code: [Select]
if (Serial.available()>0){
val=Serial.read();
remoto(val);
}


-En el primer caso con Serial.print() envio la variable y con Serial.write() el código de control para que processing sepa que variable es.
- En el segundo caso, en processing solo dispongo de Serial.write(), y me interesaría enviar a arduino, tanto variables como algún código de control. ¿Es posible hacer esto con Serial.write()? Si envio un número ¿como puede saber arduino si es una variable numérica o un código que permita a arduino saber cual es la variable, como hacía en el 1º caso?

Nota: prefiero no usar librerías para la transmisión serial

jorgepl

En Arduino, serial.read() siempre devuelve un número de tipo byte (8 bits - de 0 a 255).

Si envías un carácter "A", Arduino recibe el valor ascii correspondiente (65).

Para más información:
http://arduino.cc/en/Serial/Read

magl

#2
May 25, 2012, 11:58 pm Last Edit: May 26, 2012, 12:03 am by magl Reason: 1
¿Sería posible enviar varios bytes dentro de una matriz?
processing:
Code: [Select]
int a[] = {45,100,200}
Serial.write(a);

Así usaría el 1º de control y los demas de datos.

jorgepl

Si. Solo tienes que tener en cuenta que en Arduino vas a leer los datos byte a byte, para después juntarlos o analizarlos según te convenga

Code: [Select]

int i=0;
byte val[3];

loop()
{
if(Serial.available()>0)
{
val[i++]=Serial.read();
}
}

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