So kann man ihn direkt lesen ![]()
#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);
}