Post content lost due to vandalism by author
Bueno, no he querido entender lo que no puedo entender pero te brindo una herramienta en la que veras el error.
void setup(){
Serial.begin(9600);
Serial.println("Inicio");
}
void loop(){
uint32_t trama = 0;
char buffer[33];
trama |= 6;
//sprintf(buffer, "trama |= 6 = %lu", trama);
//Serial.println(buffer);
print("=> 6", trama);
trama |= 2 << 3;
print("=> 2 << 3", trama);
// sprintf(buffer, "trama |= 2 << 3 = %lu", trama);
// Serial.println(buffer);
trama |= 4 << 5;
print("=> 4 << 5", trama);
// sprintf(buffer, "trama |= 4 << 5 = %lu", trama);
// Serial.println(buffer);
trama |= 2 << 12;
print("=> 2 << 12", trama);
// sprintf(buffer, "trama |= 2 << 12 = %lu", trama);
// Serial.println(buffer);
trama |= 4 << 14;
print("=> 4 << 14", trama);
// sprintf(buffer, "trama |= 4 << 14 = %lu", trama);
// Serial.println(buffer);
uint32_t coche= 0;
coche= (trama >> 14) & 0b111111;
print("=> trama >> 14", coche);
uint32_t gasolina= (trama >> 12) & 0b11;
print("=> gasolina", gasolina);
uint32_t porcentaje= (trama >> 5) & 0b1111111;
print("=> porcentaje", porcentaje);
uint32_t paradas= (trama >> 3) & 0b11;
print("=> paradas", paradas);
uint32_t salidas= (trama) & 0b111;
print("=> salidas", salidas);
while(1);
}
void print(const char* str, uint32_t valor){
int i = 31;
while (i >= 0) {
if ((valor >> i) & 1)
Serial.print("1");
else
Serial.print("0");
--i;
}
Serial.println(str);
}
Esta es la salida de TUS DATOS
Inicio
00000000000000000000000000000110=> 6
00000000000000000000000000010110=> 2 << 3
00000000000000000000000010010110=> 4 << 5
00000000000000000010000010010110=> 2 << 12
00000000000000000010000010010110=> 4 << 14
00000000000000000000000000000000=> trama >> 14
00000000000000000000000000000010=> gasolina
00000000000000000000000000000100=> porcentaje
00000000000000000000000000000010=> paradas
00000000000000000000000000000110=> salidas
veras que todo va bien hasta 2 << 12
pero 4 << 14 no funciona como se espera?
estudia el resto
Evidentemente no puedes hacer un desplazamiento mas alla del 15 bit pq provoca un desbordamiento de la operacion.
No existe el desplazamiento en 32 bits para el Arduino. Al menos por lo que las operaciones estan dando como resultado.
Probe 1 << 15 y me desborda todos los bits MSB.
Asi que para usarlo debes implementar operaciones complementarias.
.