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);
}}
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.
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.
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"