#include <ELMduino.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
// Пины подключения дисплея
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
SoftwareSerial mySerial(10, 11); // RX, TX
ELM327 myELM327;
float rpm = 0;
float injection = 0;
void setup() {
Serial.begin(115200);
mySerial.begin(9600);
// Инициализация дисплея
lcd.begin(20, 4);
lcd.print("Инициализация...");
if (!myELM327.begin(mySerial)) {
lcd.clear();
lcd.print("ELM327 не обнаружен");
while (1);
}
lcd.clear();
lcd.print("ELM327 готов к работе!");
}
void loop() {
// Получение оборотов двигателя (PID 010C)
rpm = myELM327.rpm();
if (rpm != ELM_SUCCESS) {
Serial.print("Ошибка чтения оборотов: ");
Serial.println(rpm, HEX);
} else {
Serial.print("Обороты двигателя: ");
Serial.print(rpm);
Serial.println(" об/мин");
}
// Получение миллиграммов впрыска (замените на правильный PID, если требуется)
injection = myELM327.fuelRate(); // Пример использования предопределенного метода для расхода топлива
if (injection != ELM_SUCCESS) {
Serial.print("Ошибка чтения впрыска: ");
Serial.println(injection, HEX);
} else {
Serial.print("Впрыск топлива: ");
Serial.print(injection);
Serial.println(" мг");
}
// Вывод данных на дисплей
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Обороты: ");
lcd.print(rpm);
lcd.print(" об/мин");
lcd.setCursor(0, 1);
lcd.print("Впрыск: ");
lcd.print(injection);
lcd.print(" мг");
delay(500); // Уменьшенная задержка
}