Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
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
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.
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
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)
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.