OBD-соединение Arduino

Я использую этот код на Arduino Nano, и он работает нормально.

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);           // выбираем контакты, используемые на ЖК-панели


#include <OBD2UART.h>

COBD obd;

void setup()
{

  // начинаем связь с адаптером OBD-II UART
  obd.begin();
  lcd.begin(16, 2); 
  // инициируем соединение OBD-II до успешного завершения
  while (!obd.init());  
}

void loop()
{
  int value;
  obd.readPID(PID_RPM, value);
  int value2;
  obd.readPID(PID_COOLANT_TEMP, value2);
  lcd.setCursor(0,0);
  lcd.print("RPM = ");
  lcd.print(value);
  lcd.print("     ");
  lcd.setCursor(0,1);
  lcd.print("ECT = ");
  lcd.print(value2);
  lcd.print("     ");
    }

Но если OBD не подключен, то он зависает в настройке. Что я хочу сделать, так это пройти настройку, даже если obd не подключен, и попытаться тем временем подключиться к OBD... что-то вроде отображения "Соединение..." в первой строке и что-то посчитать во второй...

Заранее спасибо

, 👍0


1 ответ


Лучший ответ:

0

Цикл while() в setup() — вот что зависает. Вместо вызова odb.init() до тех пор, пока он не вернет true, просто вызовите его один раз, чтобы он был инициирован, а затем вызовите/проверьте loop() и реагировать соответственно:

void setup()
{
  // начинаем связь с адаптером OBD-II UART
  obd.begin();
  lcd.begin(16, 2); 
  // инициируем соединение OBD-II один раз
  obd.init()
}

void loop()
{
  static int error_count;
  if (!obd.init()) {
    // Не подключено
    lcd.setCursor(0,0);
    lcd.print("Connecting");
    lcd.setCursor(0,1);
    lcd.print("Count: ");
    lcd.print(error_count);
    error_count++;`
  } else {
    int value;
    int value2;

    obd.readPID(PID_RPM, value);
    obd.readPID(PID_COOLANT_TEMP, value2);
    lcd.setCursor(0,0);
    lcd.print("RPM = ");
    lcd.print(value);
    lcd.print("     ");
    lcd.setCursor(0,1);
    lcd.print("ECT = ");
    lcd.print(value2);
    lcd.print("     ");
  }
}
,

Спасибо за ответ. Работает, но, похоже, есть большой тайм-аут, пока он не получит статус obd, если он еще не инициализирован., @David