Advertisement
ZulRocky

ELM327 ARDUINO

Mar 28th, 2024 (edited)
922
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.66 KB | Source Code | 0 0
  1. #include <SoftwareSerial.h>
  2.  
  3. SoftwareSerial obd(2, 3); // RX, TX
  4.  
  5. void setup() {
  6.   Serial.begin(9600);
  7.   obd.begin(38400);
  8.  
  9.   // Mengirim perintah untuk membaca data RPM mesin (mode 01, PID 0C)
  10.   sendData("010C");
  11.   // Mengirim perintah untuk membaca data Engine Brake (mode 01, PID 4C)
  12.   sendData("014C");
  13.   // Mengirim perintah untuk membaca data Konsumsi Bahan bakar (mode 01, PID 5E)
  14.   sendData("015E");
  15.   // Mengirim perintah untuk membaca data Level Bahan Bakar (mode 01, PID 2F)
  16.   sendData("012F");
  17.   // Mengirim perintah untuk membaca data Tegangan Aki (mode 01, PID 42)
  18.   sendData("0142");
  19.   // Mengirim perintah untuk membaca Kode Kesalahan Diagnostik (DTC)
  20.   sendData("03");
  21. }
  22.  
  23. void loop() {
  24.   readData();
  25. }
  26.  
  27. void sendData(String command) {
  28.   obd.print("01");
  29.   obd.println(command);
  30. }
  31.  
  32. void readData() {
  33.   if (obd.available() > 0) {
  34.     String response = obd.readStringUntil('\r'); // Membaca response dari ELM327
  35.  
  36.     // Mengekstrak dan menampilkan nilai RPM
  37.     if (response.indexOf("41 0C") != -1) {
  38.       int rpm = extractData(response, 6) / 4;
  39.       Serial.print("RPM: ");
  40.       Serial.println(rpm);
  41.     }
  42.  
  43.     // Mengekstrak dan menampilkan nilai Engine Brake
  44.     if (response.indexOf("41 4C") != -1) {
  45.       int engineBrake = extractData(response, 6);
  46.       Serial.print("Engine Brake: ");
  47.       Serial.println(engineBrake);
  48.     }
  49.  
  50.     // Mengekstrak dan menampilkan nilai Konsumsi Bahan Bakar
  51.     if (response.indexOf("41 5E") != -1) {
  52.       float fuelConsumption = extractData(response, 6) / 20.0;
  53.       Serial.print("Fuel Consumption: ");
  54.       Serial.print(fuelConsumption, 1);
  55.       Serial.println(" L/100km");
  56.     }
  57.  
  58.     // Mengekstrak dan menampilkan Level Bahan Bakar
  59.     if (response.indexOf("41 2F") != -1) {
  60.       int fuelLevel = extractData(response, 6) * 100 / 255;
  61.       Serial.print("Fuel Level: ");
  62.       Serial.print(fuelLevel);
  63.       Serial.println("%");
  64.     }
  65.  
  66.     // Mengekstrak dan menampilkan Tegangan Aki
  67.     if (response.indexOf("41 42") != -1) {
  68.       float voltage = extractData(response, 6) / 1000.0;
  69.       Serial.print("Battery Voltage: ");
  70.       Serial.print(voltage);
  71.       Serial.println(" V");
  72.     }
  73.  
  74.     // Mengekstrak dan menampilkan Kode Kesalahan Diagnostik (DTC)
  75.     if (response.startsWith("43")) {
  76.       response.remove(0, 2);
  77.       while (response.length() >= 4) {
  78.         String dtc = response.substring(0, 4);
  79.         Serial.print("DTC: ");
  80.         Serial.println(dtc);
  81.         response.remove(0, 4);
  82.       }
  83.     }
  84.   }
  85. }
  86.  
  87. int extractData(String response, int index) {
  88.   String dataHex = response.substring(index, index + 4);
  89.   return (int)strtol(dataHex.c_str(), NULL, 16);
  90. }
  91.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement