Desplazamiento del bits

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.

.