Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

de 4 bytes puerto s...
 
Avisos
Vaciar todo

de 4 bytes puerto serie a un entero

11 Respuestas
4 Usuarios
0 Reactions
3,576 Visitas
ma_black
Respuestas: 282
Topic starter
(@ma_black)
Ardero
Registrado: hace 20 años

Hola que tal, estoy intentando convertir 4 bytes que recibo por el puerto serie a un entero, para controlar 16 servos, pero no termino de encontrar la forma de convertirlos, vereis, lo que recibo es 4 variables.

int8 Keypress=' ';
int8 Keypress2=' ';
int8 Keypress3=' ';
int8 Keypress4=' ';

y quiero convertirlas a un entero de 16bits, es decir

recibo:
Keypress=1;
Keypress2=2;
Keypress3=3;
Keypress4=4; y quiero convertirlo a un entero que sea 1234.

podeis hecharme una mano.

saludos

Responder
10 respuestas
dragonet80
Respuestas: 1328
(@dragonet80)
Ardero
Registrado: hace 18 años

MA_BLACK, si recibes 4 bytes (8 bits) no puedes meterlos, como tú dices, en un entero de 16 bits. 4*8=32. Necesitas un entero de 32 bits.

Responder
ma_black
Respuestas: 282
Topic starter
(@ma_black)
Ardero
Registrado: hace 20 años

y como se podria meter en un enetro de 32? es que no se que funcion usar para juntar los bytes sin que los sume

Responder
boops
Respuestas: 1813
(@boops)
Ardero
Registrado: hace 20 años

MA_BLACK, tu solo utilizas los 4 bits menos significativos no?

Yo lo haría así:

variable de 16bits = Variable1(LS) + (Variable2 * 16) + (Variable3 * 256) + (Variable4(MS) * 4096)

Responder
dragonet80
Respuestas: 1328
(@dragonet80)
Ardero
Registrado: hace 18 años

Para meter 4 bytes (de ocho bits) en un entero de 32 bits te puedes hacer una función parecida a esto:
// Esto es un ejemplo
int8 k1,k2,k3,k4;
int32 total;

int32 transforma(void) {
int32 temp=0;

temp = k1;
temp += k2*256; // 256 == 0b100000000
temp += k3*65536; // 65536 == 0b10000000000000000
temp += k4*16777216; // 16777216 == 0b1000000000000000000000000

return temp;
}

void main(void){

// ...

// aquí realizas la lectura de las cuatro variables
total = transforma();

// ...
}

k1,k2,k3,k4 son las variables tipo byte que utilizas para leer las pulsaciones (keypress) y total es la variable de 32 bits donde se almacena la combinación de esos 4 bytes.

Eso en caso de que uses 8 bits, si sólo usaras 4 bits puedes sustituir los coeficientes en la multiplicación por los que te ha comentado Boops.

Responder
Página 1 / 3
Compartir: