ENVIO DE DATOS-PREGUNTA DE NOVATO.

HOLA.PASO A COMENTAR MI PROBLEMA.

cuando envio desde processing un byte (dato), al arduino y asu vez el arduino me le reenvia como byte , para comprar q el dato que envie al inicio es = al q llega. mala suerte no es el mismo.ja ¿q esta pasando aqui?

///code para processing

import processing.serial.*;

Serial puerto; // Variable para el puerto serial
int pot; // valor entrante

int e=888;
byte z=0;
void setup()
{
   size(400, 256);
   println(Serial.list()); // lista los puertos seriales disponibles

   //abre el primero de esa lista con velocidad 9600
   puerto = new Serial(this, Serial.list()[1], 9600);
   
   
   pot = 0;
}

void draw()
{
   if(puerto.available() > 0) 
   { // si hay algún dato disponible en el puerto
     pot = puerto.read(); // lo obtiene
     println("VALOR ENVIADO DEL ARDUINO="+pot);
   }
   
}


void keyPressed() {
 
    if (key == 'b') {
    (z)= byte(e);
   puerto.write(e);
   println("VALOR ENVIADO DEL PROCESSING="+e);
   
}}
//int val=233;
byte cactura;


void setup() {                
 Serial.begin(9600);
}

void loop() {
//Serial.print(val, BYTE);


if(Serial.available() > 0) {

cactura=Serial.read();
Serial.println(cactura, BYTE);

}


}

Al hacer println te mete automáticamente new line y retorno de carro, usa Serial.write(cactura).

gracias poe reponder pero ,e sigue tirando lo mismo,

VALOR ENVIADO DEL PROCESSING=888
VALOR ENVIADO DEL ARDUINO=120

Hola Alex.

En Processing defines la variable 'e' de tipo entero (int) y la variable 'z' de tipo byte.

El puerto serie sólo envía palabras de 8 bits, un byte.

En la función keyPressed() del código de Processing haces esto:

    (z)= byte(e);

Es decir, promocionas a byte (un cast) de la variable 'e' y lo asignas a 'z'. Ese cast hace que la variable 'z' reciba los 8 bits menos significativos del valor de la variable 'e'.

Cuando envías desde Processing el valor de la variable 'e' con:

  puerto.write(e);

realmente está ocurriendo lo mismo. El valor de la variable 'e', que es igual a 888, está siendo truncado a 8 bits, un byte. Por lo que sólo envía los 8 bits menos significativos que corresponden al valor decimal 120.

Compruébalo si añades, en la función keyPressed(), esta línea:

   println("VALOR ENVIADO DEL PROCESSING="+z);

debajo de esta otra:

   println("VALOR ENVIADO DEL PROCESSING="+e);

El código que muestras parece un ejercicio a resolver. :roll_eyes:

Cambia por favor el título de tu post por algo más indicativo. 'PREGUNTA DE NOVATO' indica poco sobre la temática real de tu post.

coLe || (ºLe

MUCHAS GRACIAS POR RESPONDER, NO PENSE QUE SE TRUNCABA, LOS BYTS. PENSE Q SOLO SI TENIA UN
NUMERO REAL Y LO CONVERTIA A INTERO AHI SI ME LO TRUNCABA, SACANDOME LA PERTE DECIMAL-
he leido en unos de la notas de arduino, que es mas eficiente enviar bytes,digo siempre se envia bytes
pero s envio un entero el proceso que hace para descomponerlo se hace menos efiente el envio.

es por eso, como envio un entero antes de envialo convertirlo en byte sin que se trunque??
hay alguna funcion ? o tengo regresar a la tablita que nos danban en la escuela para convertilo a byyte,
e invertar algun algoritmo que los convierta .

Si Arduino lee en un sensor analógico un valor de 65, equivalente a la serie binaria 01000001 esta será enviada, según el modificador, como:

dato Modificador Envío (pulsos)
65 ---DEC---- (“6? y “5? ASCIIs 54–55) 000110110–000110111
65 ---HEX---- (“4? Y “1? ASCIIs 52–49) 000110100–000110001
65 ---OCT---- (“1?, “0? y “1? ASCIIs 49–48–49) 000110001–000110000–000110001
65 ---BIN---- (“0?,”1?,”0?,”0?,”0?,”0?,”0?y”1? ASCIIs 49–48–49–49–49–49–49–48) 000110000-…
65 ---BYTE--- 01000001

No explicaremos conversiones entre los diferentes sistemas de representación numérica, ni la tabla ASCII, pero es evidente como el modificador BYTE permite el envío de información más económica (menos pulsos para la misma

Convierte un tipo de datos primitivo o matriz a su representación de bytes. Un byte sólo puede ser un número entero entre -128 y 127, por lo tanto, cuando un número fuera de este rango se convierte, su valor se ajusta a la representación de bytes correspondiente.

char c = 'E';
byte b = byte(c);
println(c + " : " + b);  // Prints "E : 69"

int i = 130;
b = byte(i);
println(i + " : " + b);  // Prints "130 : -126"

QUE MACANA, SI QUIERO ENVIAR UN BYTE, SOLO POEDO EN UN RANGO DE -127;127, Y SI QUIERO enviar
un entero solo puedo enviar en un rango de 0-255.

=( =( =( =( =( =( =( =( =( =( =(