Go Down

Topic: transmision seria arduino->processing processing->arduino (Read 1 time) 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