Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SoftwareSerial.h>
- SoftwareSerial obd(2, 3); // RX, TX
- void setup() {
- Serial.begin(9600);
- obd.begin(38400);
- // Mengirim perintah untuk membaca data RPM mesin (mode 01, PID 0C)
- sendData("010C");
- // Mengirim perintah untuk membaca data Engine Brake (mode 01, PID 4C)
- sendData("014C");
- // Mengirim perintah untuk membaca data Konsumsi Bahan bakar (mode 01, PID 5E)
- sendData("015E");
- // Mengirim perintah untuk membaca data Level Bahan Bakar (mode 01, PID 2F)
- sendData("012F");
- // Mengirim perintah untuk membaca data Tegangan Aki (mode 01, PID 42)
- sendData("0142");
- // Mengirim perintah untuk membaca Kode Kesalahan Diagnostik (DTC)
- sendData("03");
- }
- void loop() {
- readData();
- }
- void sendData(String command) {
- obd.print("01");
- obd.println(command);
- }
- void readData() {
- if (obd.available() > 0) {
- String response = obd.readStringUntil('\r'); // Membaca response dari ELM327
- // Mengekstrak dan menampilkan nilai RPM
- if (response.indexOf("41 0C") != -1) {
- int rpm = extractData(response, 6) / 4;
- Serial.print("RPM: ");
- Serial.println(rpm);
- }
- // Mengekstrak dan menampilkan nilai Engine Brake
- if (response.indexOf("41 4C") != -1) {
- int engineBrake = extractData(response, 6);
- Serial.print("Engine Brake: ");
- Serial.println(engineBrake);
- }
- // Mengekstrak dan menampilkan nilai Konsumsi Bahan Bakar
- if (response.indexOf("41 5E") != -1) {
- float fuelConsumption = extractData(response, 6) / 20.0;
- Serial.print("Fuel Consumption: ");
- Serial.print(fuelConsumption, 1);
- Serial.println(" L/100km");
- }
- // Mengekstrak dan menampilkan Level Bahan Bakar
- if (response.indexOf("41 2F") != -1) {
- int fuelLevel = extractData(response, 6) * 100 / 255;
- Serial.print("Fuel Level: ");
- Serial.print(fuelLevel);
- Serial.println("%");
- }
- // Mengekstrak dan menampilkan Tegangan Aki
- if (response.indexOf("41 42") != -1) {
- float voltage = extractData(response, 6) / 1000.0;
- Serial.print("Battery Voltage: ");
- Serial.print(voltage);
- Serial.println(" V");
- }
- // Mengekstrak dan menampilkan Kode Kesalahan Diagnostik (DTC)
- if (response.startsWith("43")) {
- response.remove(0, 2);
- while (response.length() >= 4) {
- String dtc = response.substring(0, 4);
- Serial.print("DTC: ");
- Serial.println(dtc);
- response.remove(0, 4);
- }
- }
- }
- }
- int extractData(String response, int index) {
- String dataHex = response.substring(index, index + 4);
- return (int)strtol(dataHex.c_str(), NULL, 16);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement