Arduino OBD2 Soundgenrator

So kann man ihn direkt lesen :smirk:

#include <CAN.h>
const bool useStandardAddressing = true;

void setup() {
  Serial.begin(9600);

  Serial.println("CAN OBD2 Motordrehzahl");

  // CAN Bus Geschwindigkeit auf 500 kbps
  if (!CAN.begin(500E3)) {
    Serial.println("Starting CAN failed!");
    while (1);
  }

  // Filterung
  if (useStandardAddressing) {
    CAN.filter(0x7e8);
  } else {
    CAN.filterExtended(0x18daf110);
  }
}

void loop() {
  if (useStandardAddressing) {
    CAN.beginPacket(0x7df, 8);
  } else {
    CAN.beginExtendedPacket(0x18db33f1, 8);
  }
  CAN.write(0x02); // Anzahl Bytes
  CAN.write(0x01); // Anzeige aktueller Daten
  CAN.write(0x0c); // Motordrehzahl PID
  CAN.endPacket();

  // warte auf Antwort
  while (CAN.parsePacket() == 0 ||
         CAN.read() < 3 ||          // correct length
         CAN.read() != 0x41 ||      // correct mode
         CAN.read() != 0x0c);       // correct PID

  float rpm = ((CAN.read() * 256.0) + CAN.read()) / 4.0;

  Serial.print("Motordrehzahl = ");
  Serial.println(rpm);

  delay(100);
}