per Cristian e Vincenzo per cultura generale....

3 views
Skip to first unread message

Antonio Gurrado

unread,
Jun 14, 2025, 12:20:47 PMJun 14
to Arduino User Group & Wearables Milano
// === DECODER BMW (NUOVO) ===
bool decodeBMWFormat(uint8_t* data, uint8_t len, TPMSPacket* result) {
  if (len < 10) return false;
 
  // BMW usa un formato particolare con checksum
  uint8_t checksum = 0;
  for (int i = 0; i < len - 1; i++) {
    checksum ^= data[i];
    //checksum = checksum ^ data[i];
  }
 
  // Verifica checksum BMW
  if (checksum != data[len - 1] && len > 8) {
    return false;
  }
 
  // ID sensore BMW (3 byte + 1 byte posizione)
  result->sensorId = ((uint32_t)data[1] << 16) |
                     ((uint32_t)data[2] << 8) |
                     data[3];
 
  // Posizione pneumatico (codificata)
  result->position = data[4] & 0x0F;
 
  // Pressione BMW (unità diverse)
  result->pressure = ((data[5] << 8) | data[6]) * 0.05; // Fattore BMW
 
  // Temperatura BMW
  result->temperature = data[7] - 50; // Offset BMW
 
  // Stato batteria
  result->batteryLow = (data[8] & 0x10) != 0;
 
  // Validazione dati BMW
  return (result->pressure > 0 && result->pressure < 80 &&
          result->temperature > -50 && result->temperature < 100 &&
          result->position <= 4);
}
Reply all
Reply to author
Forward
0 new messages