#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); // Уменьшенная задержка
}