собрал бк для машины (не могу запилить скетч)

Marader54rus
Offline
Зарегистрирован: 06.05.2017

вот ссыль на бк https://geektimes.ru/post/255012/

вот скетч

/*
  Horhomun
  pavel@vasilenok.by
  Viber: +375 29 3487042
  ---------------------
  Oleg K
  2003shef@gmail.com
------------------------
  Бортовой компьютер для автомобиля на arduino + bluetooth hc-05 + elm327
*/

#include <LiquidCrystal.h>
#include <EEPROM.h>
#include "OBD.h"
//#define DEBUG Serial //раскоментировать чтобы получить дебаг информацию на Serial port (0) , скорость  для работы терминала 115200 бод
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LiquidCrystal(rs, enable, d4, d5, d6, d7)

//----------------------

float voltage = 0;

COBD obd;
//-----------------------

// ТРЕБУТ КОРРЕКТИРОВКИ----------------------------------------------------------------------------------------
double tcorrect = 1.0;       // ВНИМАНИЕ!!! Корректировка коэффициента времени arduino uno, у каждого свой.
double speed_korrect_val = 1; // ВНИМАНИЕ!!! Корректировка коэффициента скорости, посмотреть по GPS
double VE_correct = 1.0;       // ВНИМАНИЕ!!! Корректировка Объёмного КПД ДВС:  добиваемся чтобы мгновенный расход на холостых оборотах был в половину объема двигателя
double ED = 1.998;             // ВНИМАНИЕ!!! Объем двигателя в литрах (пример: 1.398)
//-------------------------------------------------------------------------------------------------------------

// НЕ НАДО ИЗМЕНЯТЬ -------------------------------------------------------------------------------------------
byte count_display = 20; // Количество экранов бк
byte pin = 10, pin2 = 9; // пины кнопок
int engine_on_rpm = 400; // обороты при которых считать двигатель заведенным
double AirFuelRatio = 14.70;  // константа расхода 14,7 воздуха к 1 литра бензина, у дизеля своя, у газа своя
double FuelDensityGramsPerLiter = 750.0;   // константа - грамм бензина в 1 литре бензина
//-------------------------------------------------------------------------------------------------------------

boolean off2 = true;

char v1, v2, v3, v4, v5;
char rxData[20];
char rxIndex = 0;

int selmon, off, value, value2, t1, kol_check_engine_error_val, fss_val;

int speed_error, tmp_error, rpm_error, dvk_error, iat_error, rnd_error, dts_error, uoz_error, maf_error, pdz_error, ut_error, tm_error;

int dvk_var, intake_air_temp_var, davlenie_topliva_var, tmp_masla_var, speed_var, tmp_var, t2, check_engine_km, check_engine_flash;

unsigned long time_new, time_old, time_old_gurnal;

uint8_t time_to_reconnect;

int VE, rpm_var, uoz_var, raschet_nagruzka_dvigatelya_var, maf_var, polozh_dross_zaslon, uroven_topliva_var, IMAP, MAF  ,
    long_term_val, short_term_val, b1s1_val, b1s2_val;
double LPH, FuelFlowGramsPerSecond, FuelFlowLitersPerSecond, ls_term_val, LP100, benz_add, time, odometr, benz_potracheno, odometr_add, odometr_add_gurnal, benz_add_gurnal;
byte  response[20];

static const unsigned char PROGMEM grad[8] =    // символ градуса
{
  B01100,
  B10010,
  B10010,
  B01100,
  B00000,
  B00000,
  B00000,
  B00000,
};

void setup()
{
  time_to_reconnect = 0;
  lcd.begin(20, 4);
  pinMode(pin, INPUT);
  digitalWrite(pin, HIGH);
  pinMode(pin2, INPUT);
  digitalWrite(pin2, HIGH);

  lcd.setCursor(0, 0);
  lcd.print("Connecting...");
  delay(2000);

  value = digitalRead(pin); // проверка кнопки для входа в recovery

  if (value == LOW) {
    off = 222;
    count_display = count_display + 3; // 3 скрытых технологических экрана
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("|----[recovery]----|");   //отключаем вытаскивание данных из elm327 при нажатии на кнопку при надписи Connecting...
    tone(13, 3000, 500);
    delay(2000);
    value = digitalRead(pin); // проверка кнопки для входа в admin
    if (value == LOW) {
      off2 = false; // отключаем функцию getResponse, а то ничего не будет показывать без связи с блютуз
      lcd.clear();
      lcd.setCursor(0, 1);
      lcd.print("|----[all off]----|");   //отключаем вытаскивание данных из elm327
      tone(13, 3000, 500);
      delay(2000);
    }
  }

  lcd.clear();
  lcd.print("Connecting...[ok]");
  delay(1000);

  lcd.clear();

  lcd.createChar(1, grad);
  //----------------
  lcd.clear();

  obd.begin();// создание обьекта obd
  if (off != 222)
  {
    lcd.print("init ELM");
    for (int8_t i = 9; i >= 0; i--) //небольшая задержка перед инициализацией для исключения ошибок подключения если БК включается от поворота ключа зажигания
    {

      lcd.setCursor(12, 0);
      lcd.print(i);
      delay(1000);
    }
    while (!obd.init()); // инициализация связи с компьютером автомобиля
  }
  //------------------------

}

void loop()
{

  time_to_reconnect++;
  rpm_var = 0;
  IMAP = 0;
  MAF = 0;
  FuelFlowGramsPerSecond = 0;
  FuelFlowLitersPerSecond = 0;
  LPH = 0;
  odometr_add = 0;
  benz_add = 0;
  ls_term_val = 0;
  //------------------

  if (time_to_reconnect > 10 ) // если в течении 10 циклов не появились обороты или был обрыв связи из-за перепада напряжения во время работы стартера, реинициализация подключения
  {
    lcd.clear();
    lcd.print("re-init ELM");
    obd.end();
    delay(100);
    obd.begin();
    while (!obd.init());

    time_to_reconnect = 0;
  }

  //------------------

  //---------------

  value = digitalRead(pin); // проверка состояния кнопки для переключения экрана
  value2 = digitalRead(pin2);

  if (value == LOW) {
    if (selmon == count_display - 3) {
      lcd.clear();

      selmon = 0;
    }
    else {
      lcd.clear();

      selmon++;
    }
    tone(3, 3000, 100);
    delay(150);
  }

  if (value2 == LOW) {
    if (selmon == 0) {
      lcd.clear();

      selmon = count_display - 3;
    }
    else {
      lcd.clear();

      selmon--;
    }
    delay(150);
    tone(3, 3000, 100);
  }

  /*  IMAP = RPM * MAP / IAT
    MAF = (IMAP/120)*(VE/100)*(ED)*(MM)/(R)

    MAP - Manifold Absolute Pressure in kPa
    IAT - Intake Air Temperature in Kelvin
    R  -  Specific Gas Constant (8.314472 J/(mol.K)
    MM -  Average molecular mass of air (28.9644 g/mol)
    VE -  volumetric efficiency measured in percent, let's say 80%
    ED - Engine Displacement in liters   */

  if (off2)
  {

    if ((t1 == 60) or (t2 == 10)) { // чтение температуры и вольтажа каждые 100 циклов работы (примерно 30 секунд), первый раз чтение выполниться через примерно 5 секунд со старта
      Tmp();
      Voltage();
      LongTerm();
      t1 = 0;
      t2++;
    }
    else {
      t1++;
      t2++;
    }

    Rpm();

  }
  else {

    delay(300);

  }

  if (rpm_var > engine_on_rpm) {   // если обороты больше engine_on_rpm то считаем расход и расстояние (машина заведена)
    time_to_reconnect = 0;
    FuelSystemStatus();

    Rnd(); // вытягиваем информацию о нагрузка двигателя, если нету такго параметра в ЭБУ то закомментировать строчку символами //

    if (raschet_nagruzka_dvigatelya_var > 3)  { // Проверка торможения двигателем по нагрузке двигателя, если информации о нагрузке в ЭБУ нету то поменять на ((fss_val==2) or (speed_var>70))

      ShortTerm();

      IntakeAirTemp();
      //-------------------------------------------------------
      //если нет данных от MAF (нету такго параметра в ЭБУ) , то раскоментировать все что ниже до строчки
      //
      //  Maf();
      //
      //-------↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓-↓------------------------------
      //      DavlenVpuskKoll();
      //
      //
      //
      //      if (rpm_var < 800) {
      //        VE = 64;
      //      }
      //      else {
      //        if (rpm_var < 1001) {
      //          VE = 66;
      //        }
      //        else {
      //          if (rpm_var < 1251) {
      //            VE = 70;
      //          }
      //          else {
      //
      //            if (rpm_var < 1501) {
      //              VE = 70;
      //            }
      //            else {
      //
      //              if (rpm_var < 1751) {
      //                VE = 74;
      //              }
      //              else {
      //
      //                if (rpm_var < 2001) {
      //                  VE = 74;
      //                }
      //                else {
      //
      //                  if (rpm_var < 2126) {
      //                    VE = 76;
      //                  }
      //                  else {
      //
      //                    if (rpm_var < 2251) {
      //                      VE = 77;
      //                    }
      //                    else {
      //
      //                      if (rpm_var < 2376) {
      //                        VE = 79;
      //                      }
      //                      else {
      //
      //                        if (rpm_var < 2501) {
      //                          VE = 80;
      //                        }
      //                        else {
      //
      //                          if (rpm_var < 2626) {
      //                            VE = 82;
      //                          }
      //                          else {
      //
      //                            if (rpm_var < 2751) {
      //                              VE = 82;
      //                            }
      //                            else {
      //
      //                              if (rpm_var < 2876) {
      //                                VE = 83;
      //                              }
      //                              else {
      //
      //                                if (rpm_var < 3001) {
      //                                  VE = 84;
      //                                }
      //                                else {
      //
      //                                  if (rpm_var < 3501) {
      //                                    VE = 85;
      //                                  }
      //                                  else {
      //
      //                                    if (rpm_var < 4001) {
      //                                      VE = 86;
      //                                    }
      //                                    else {
      //
      //                                      if (rpm_var < 4501) {
      //                                        VE = 88;
      //                                      }
      //                                      else {
      //
      //                                        if (rpm_var < 5001) {
      //                                          VE = 90;
      //                                        }
      //                                        else {
      //
      //                                          if (rpm_var < 5501) {
      //                                            VE = 93;
      //                                          }
      //                                          else {
      //
      //                                            if (rpm_var < 6001) {
      //                                              VE = 95;
      //                                            }
      //                                            else {
      //
      //                                              if (rpm_var < 6501) {
      //                                                VE = 91;
      //                                              }
      //                                              else {
      //
      //                                                if (rpm_var < 7000) {
      //                                                  VE = 85;
      //                                                }
      //                                              }
      //                                            }
      //                                          }
      //                                        }
      //                                      }
      //                                    }
      //                                  }
      //                                }
      //                              }
      //                            }
      //                          }
      //                        }
      //                      }
      //                    }
      //                  }
      //                }
      //              }
      //            }
      //          }
      //        }
      //      }
      //
      //
      //
      //      IMAP = double(rpm_var * dvk_var) / double(intake_air_temp_var + 273.15);
      //
      //      MAF = double(IMAP / 120.0) * double(double(VE * VE_correct) / 100.0) * ED * 28.9644 / 8.314472;
      //-----------------------------------------
      //  если нет данных от MAF (нету такго параметра в ЭБУ) , то закоментировать следущую строчку
      Maf();

      MAF = maf_var;

      if (fss_val == 2) { // если замкнутая обратная связь  - Closed Loop
        ls_term_val = double(100.0 + (long_term_val + short_term_val)) / 100.0; // коэффициент корректировки расхода по ShortTerm и LongTerm
      }
      else {
        ls_term_val = double(100.0 + long_term_val) / 100.0; // коэффициент корректировки расхода по LongTerm
      }

      FuelFlowGramsPerSecond = double(MAF / AirFuelRatio) * ls_term_val; // Получаем расход грамм бензина в секунду в соотношении 14,7 воздуха/к 1 литра бензина, корректировка ls_term_val
      FuelFlowLitersPerSecond = FuelFlowGramsPerSecond / FuelDensityGramsPerLiter;  // Переводим граммы бензина в литры
      LPH = FuelFlowLitersPerSecond * 3600.0;       // Ковертирование литров в час
    }

    Speed(); // получить скорость

    if (time_old == 0) {
      time_old = millis();  // выполнится один раз при появлении оборотов
    }

    time_new = millis();   // время со старта программы в мс
    time = (double(time_new - time_old) / 1000.0) * tcorrect; // прошло время с последнего расчета скорости, расхода  - в сек
    if (time > 10) {
      time = 0;
    }
    time_old = time_new;  // записать новое время для сравнения в следующем цикле

    if (speed_var > 0) {
      odometr_add = double((double(speed_var * 1000.0) / 3600.0) * time) / 1000.0;
      odometr = odometr + odometr_add; //обший пробег в км
    }
    benz_add = FuelFlowLitersPerSecond * time;
    benz_potracheno = benz_potracheno + benz_add; // общий расход в литрах

    if (((speed_var > 1) and (speed_var < 10) and ((time_new - time_old_gurnal) > 30000)) or ((speed_var == 0) and ((time_new - time_old_gurnal) > 10000))) {
      double odometr_eeprom = EEPROM_float_read(111) + odometr_add_gurnal + odometr_add;
      double benz_eeprom = EEPROM_float_read(122) + benz_add_gurnal + benz_add;
      EEPROM_float_write(111, (odometr_eeprom)); // записываем в энергонезависимую память журнала расстояние каждые 5 секунд... в памяти занимаются ячейкм 111,112,113,114
      EEPROM_float_write(122, (benz_eeprom));  // записываем бензин
      odometr_add_gurnal = 0;
      benz_add_gurnal = 0;
      time_old_gurnal = time_new;
    }
    else {
      odometr_add_gurnal = odometr_add_gurnal + odometr_add;
      benz_add_gurnal = benz_add_gurnal + benz_add;
    }
  }

  if (odometr > 0) {
    LP100 = (benz_potracheno / odometr) * 100.0;                                    //расход бензина на 100 км (в литрах)
  }

  double full_odometr_gurnal = EEPROM_float_read(111);
  double full_benz_gurnal = EEPROM_float_read(122);

  switch (selmon) {
    case 0:
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(speed_var); // Скорость
      lcd.print(" km/h");
      lcd.setCursor(12, 0);
      lcd.print(int(rpm_var)); //Обороты
      lcd.print(" rpm");
      lcd.setCursor(0, 1);
      lcd.print(LPH); // л/час
      lcd.print(" L/h");
      lcd.setCursor(12, 1);
      if (voltage == 0) {
        lcd.print("-"); //Напряжение
        lcd.print("-");
        lcd.print(".");
        lcd.print("-");
      }
      else {
        lcd.print(voltage); //Напряжение
      }
      lcd.print(" V");
      lcd.setCursor(0, 2);
      if (odometr > 0.1) { // отображать расход на 100 км только после 100 метров пробега
        lcd.print(LP100);
      }
      else {
        lcd.print("-.--");
      }
      lcd.print(" L/100");
      lcd.setCursor(12, 2);
      lcd.print(tmp_var);  //Температура
      lcd.print(" \1");
      lcd.print("C");
      lcd.setCursor(0, 3);
      lcd.print(odometr); // пройденный путь с заводки авто
      lcd.print(" km");
      lcd.setCursor(12, 3);
      lcd.print(benz_potracheno); // бензина потрачено с заводки авто
      lcd.print(" L");

      break;

    case 1:

      value = digitalRead(pin); // проверка состояния кнопки для переключения экрана
      value2 = digitalRead(pin2);

      if ((value == LOW) and (value2 == LOW)) {
        float odometr0 = 0.00, benz0 = 0.00;
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("  Ochistka jurnala! ");
        lcd.setCursor(0, 1);
        lcd.print("--------------------");
        lcd.setCursor(0, 2);
        lcd.print(" Gdi 3 secundy dlya ");
        lcd.setCursor(0, 3);
        lcd.print("     ochistki..     ");
        delay(3000);
        lcd.clear();
        value = digitalRead(pin); // проверка состояния кнопки для переключения экрана
        value2 = digitalRead(pin2);

        if ((value == LOW) and (value2 == LOW)) {
          EEPROM_float_write(111, odometr0);
          EEPROM_float_write(122, benz0);
          lcd.setCursor(0, 1);
          lcd.print("|----[Clear OK]----|");
          delay(2000);
        }
        else {
          lcd.setCursor(0, 1);
          lcd.print("|----[Otmeneno]----|");
          delay(2000);
        }
      }

      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print(full_odometr_gurnal); // Полное расстояние
      lcd.print(" km");
      lcd.setCursor(12, 0);
      lcd.print(full_benz_gurnal); // Весь потраченный бензин
      lcd.print(" L");

      if (full_odometr_gurnal > 0) {
        lcd.setCursor(0, 1);
        lcd.print((full_benz_gurnal / full_odometr_gurnal) * 100.0); // Полный средний расход
        lcd.print(" L/100");

      }

      break;

    case 2:
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Nagruzka dvigatela");
      lcd.setCursor(0, 3);
      lcd.print(raschet_nagruzka_dvigatelya_var);
      lcd.print(" % ");

      break;

    case 3:

      Tmp();
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Temperatura");
      lcd.setCursor(0, 1);
      lcd.print("ohlazhdaiushchej");
      lcd.setCursor(0, 2);
      lcd.print("zhidkosti");
      lcd.setCursor(0, 3);
      lcd.print(tmp_var);
      lcd.print(" \1");
      lcd.print("C  ");

      break;

    case 4:

      Pdz();
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Polozhenie");
      lcd.setCursor(0, 1);
      lcd.print("drosselnoj zaslonki");
      lcd.setCursor(0, 3);
      lcd.print(polozh_dross_zaslon);
      lcd.print(" %  ");

      break;

    case 5:

      if (rpm_var < engine_on_rpm) {
        DavlenVpuskKoll();
      }
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Davlenie");
      lcd.setCursor(0, 1);
      lcd.print("vpusknogo kollektora");
      lcd.setCursor(0, 3);
      lcd.print(dvk_var);
      lcd.print(" kPa  ");

      break;

    case 6:

      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Obototy dvigatelya");
      lcd.setCursor(0, 3);
      lcd.print(rpm_var);
      lcd.print(" rpm   ");

      break;

    case 7:

      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Skorost avto");
      lcd.setCursor(0, 3);
      lcd.print(speed_var);
      lcd.print(" km/h  ");

      break;

    case 8:

      Uoz();
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("UOZ");
      lcd.setCursor(0, 3);
      lcd.print(uoz_var);
      lcd.print(" \1  ");

      break;

    case 9:

      if (rpm_var < engine_on_rpm) {
        IntakeAirTemp();
      }

      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Temperatura");
      lcd.setCursor(0, 1);
      lcd.print("vsasyvaemogo vozduha");
      lcd.setCursor(0, 3);
      lcd.print(intake_air_temp_var);
      lcd.print(" \1");
      lcd.print("C  ");

      break;

    case 10:

      Voltage();
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Napryazhenie");
      lcd.setCursor(0, 3);
      if (voltage == 0) {
        lcd.print("-"); //Напряжение
        lcd.print("-");
        lcd.print(".");
        lcd.print("-");
      }
      else {
        lcd.print(voltage); //Напряжение
      }
      lcd.print(" V   ");

      break;

    case 11:

      //    B1S1();
      //    B1S2();
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Oxygen B1S1:");
      lcd.setCursor(0, 1);
      lcd.print(b1s1_val);
      lcd.print(" V    ");
      lcd.setCursor(0, 2);
      lcd.print("Oxygen B1S2:");
      lcd.setCursor(0, 3);
      lcd.print(b1s2_val);
      lcd.print(" V    ");

      break;

    case 12:

      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Short fuel trim");
      lcd.setCursor(0, 1);
      lcd.print(short_term_val);
      lcd.print(" %    ");
      lcd.setCursor(0, 2);
      lcd.print("Long fuel trim");
      lcd.setCursor(0, 3);
      lcd.print(long_term_val);
      lcd.print(" %    ");

      break;

    case 13:

      Dts();
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Davlenie topliva");
      lcd.setCursor(0, 3);
      lcd.print(davlenie_topliva_var);
      lcd.print(" kPa  ");
      break;

    case 14:

      Uroventopliva();
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Uroven topliva");
      lcd.setCursor(0, 3);
      lcd.print(uroven_topliva_var);
      lcd.print(" %  ");

      break;

    case 15:

      Maf();
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Massovyj rasshod");
      lcd.setCursor(0, 1);
      lcd.print("vozduha");
      lcd.setCursor(0, 3);
      lcd.print(maf_var);
      lcd.print(" gramm/sec  ");

      break;

    case 16:

      Tempmasla();
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("Temperatura masla");
      lcd.setCursor(0, 1);
      lcd.print("dvigatelya");
      lcd.setCursor(0, 3);
      lcd.print(tmp_masla_var);
      lcd.print(" \1");
      lcd.print("C  ");

      break;

    case 17:
      if (rpm_var < engine_on_rpm) {
        FuelSystemStatus();
      }
      lcd.setCursor(0, 0);
      lcd.print(selmon);
      lcd.print(".");
      lcd.print("FuelSystemStatus:");
      lcd.setCursor(0, 3);
      lcd.print(fss_val); // если форсунки отключены то 1, если работают то 2

      break;

    case 18:   // экран технологический 1

      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("IMAP:");
      lcd.print(IMAP);
      lcd.setCursor(12, 0);
      lcd.print("VE: ");
      lcd.print(VE);
      lcd.setCursor(0, 1);
      lcd.print("MAF: ");
      lcd.print(MAF);
      lcd.setCursor(0, 2);
      lcd.print("Benzin: ");
      lcd.print(String(benz_potracheno, 9));
      lcd.setCursor(0, 3);
      lcd.print("AddMgn: ");
      lcd.print(String(benz_add, 9));
      break;

    case 19:  // экран технологический 2

      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("time_start: ");
      lcd.print(millis() / 1000);
      lcd.setCursor(0, 1);
      lcd.print("LS_kor: ");
      lcd.print(String(ls_term_val, 6));
      lcd.setCursor(0, 2);
      lcd.print("FSS: ");
      lcd.print(fss_val);
      lcd.setCursor(8, 2);
      lcd.print("Load: ");
      lcd.print(raschet_nagruzka_dvigatelya_var);
      lcd.setCursor(0, 3);
      lcd.print("time_loop: ");
      lcd.print(time);

      break;

    case 20:
      CheckEngineOchistka();
      CheckEngineKm();
      lcd.clear();
      value = digitalRead(pin);
      value2 = digitalRead(pin2);

      if ((value == LOW) and (value2 == LOW)) { // проверка состояния кнопки для очистки ошибок
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("  Ochistka oshibok! ");
        lcd.setCursor(0, 1);
        lcd.print("--------------------");
        lcd.setCursor(0, 2);
        lcd.print(" Gdi 4 secundy dlya ");
        lcd.setCursor(0, 3);
        lcd.print("     ochistki..     ");
        delay(4000);
        lcd.clear();
        value = digitalRead(pin); // проверка состояния кнопки для очистки ошибок
        value2 = digitalRead(pin2);

        if ((value == LOW) and (value2 == LOW)) {
          obd.clearDTC();// очистка ошибок
          lcd.setCursor(0, 1);
          lcd.print("|----[Clear OK]----|");
          delay(2000);
        }
        else {
          lcd.setCursor(0, 1);
          lcd.print("|----[Otmeneno]----|");
          delay(2000);
        }
      }

      lcd.setCursor(0, 0);
      lcd.print("S ochistki oshibok: ");
      lcd.setCursor(0, 1);
      lcd.print(check_engine_km);
      lcd.print(" km    ");
      lcd.setCursor(0, 2);
      lcd.print("Check Engine gorit: ");
      lcd.setCursor(0, 3);
      lcd.print(check_engine_flash);
      lcd.print(" km    ");

      break;
  }

}

void Speed(void) {
  obd.readPID(PID_SPEED, speed_var);
}

void Tmp(void) {
  obd.readPID(PID_COOLANT_TEMP, tmp_var);
}

void Rpm(void) {
  obd.readPID(PID_RPM, rpm_var);
}

void DavlenVpuskKoll(void) {
  obd.readPID(PID_INTAKE_MAP, dvk_var);
}

void IntakeAirTemp(void) {
  obd.readPID(PID_INTAKE_TEMP, intake_air_temp_var);
}

void Voltage(void) {
  voltage = obd.getVoltage();
}

void Rnd(void) {
  obd.readPID(PID_ENGINE_LOAD, raschet_nagruzka_dvigatelya_var);
}

void Dts(void) {
  obd.readPID(PID_FUEL_PRESSURE, davlenie_topliva_var);
}

void Uoz(void) {
  obd.readPID(PID_TIMING_ADVANCE, uoz_var);
}

void Maf(void) {
  obd.readPID(PID_MAF_FLOW, maf_var);
}

void Pdz(void) {
  obd.readPID(PID_THROTTLE, polozh_dross_zaslon);
}

void Uroventopliva(void) {
  obd.readPID(PID_FUEL_LEVEL, uroven_topliva_var);
}

void Tempmasla(void) {
  obd.readPID(PID_ENGINE_OIL_TEMP, tmp_masla_var);
}

void CheckEngineKm(void) {
  obd.readPID(PID_DISTANCE, check_engine_km);
}

void CheckEngineOchistka(void) {
  obd.readPID(PID_DISTANCE_WITH_MIL, check_engine_flash);
}

void ShortTerm(void) {
  obd.readPID(PID_SHORT_TERM_FUEL_TRIM_1, short_term_val);
}

void LongTerm(void) {
  obd.readPID(PID_LONG_TERM_FUEL_TRIM_1, long_term_val);
}

//void SearchErrorEngine(void) {
//}
//void B1S1(void) {
//}
//void B1S2(void) {
//}

void FuelSystemStatus(void) {
  obd.readPID(PID_FUEL_SYSTEM_STATUS, fss_val);
}
void EEPROM_float_write(int addr, float val) // запись в ЕЕПРОМ
{
  byte *x = (byte *)&val;
  for (byte i = 0; i < 4; i++) EEPROM.write(i + addr, x[i]);
}
float EEPROM_float_read(int addr) // чтение из ЕЕПРОМ
{
  byte x[4];
  for (byte i = 0; i < 4; i++) x[i] = EEPROM.read(i + addr);
  float *y = (float *)&x;
  return y[0];
}

 

помогите решить проблему ибо сам в програмировании не понимаю ничего))

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Во первых:  Вставка программного кода в тему/комментарий

Во-вторых:  По фразе "не могу запилить скетч" помочь невозможно. Нужны подробности. Что пишет Arduino IDE?

Marader54rus
Offline
Зарегистрирован: 06.05.2017

Arduino: 1.5.8 (Windows 8), Board: "Arduino Uno"

bk-relise.ino: In function 'void setup()':
bk-relise.ino:118:25: error: invalid conversion from 'const unsigned char*' to 'uint8_t* {aka unsigned char*}' [-fpermissive]
In file included from bk-relise.ino:13:0:
C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\src/LiquidCrystal.h:80:8: error:   initializing argument 2 of 'void LiquidCrystal::createChar(uint8_t, uint8_t*)' [-fpermissive]
   void createChar(uint8_t, uint8_t[]);
        ^
bk-relise.ino: In function 'void Speed()':
bk-relise.ino:889:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void Tmp()':
bk-relise.ino:893:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void Rpm()':
bk-relise.ino:897:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void DavlenVpuskKoll()':
bk-relise.ino:901:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void IntakeAirTemp()':
bk-relise.ino:905:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void Rnd()':
bk-relise.ino:914:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void Dts()':
bk-relise.ino:918:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void Uoz()':
bk-relise.ino:922:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void Maf()':
bk-relise.ino:926:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void Pdz()':
bk-relise.ino:930:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void Uroventopliva()':
bk-relise.ino:934:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void Tempmasla()':
bk-relise.ino:938:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void CheckEngineKm()':
bk-relise.ino:942:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void CheckEngineOchistka()':
bk-relise.ino:946:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void ShortTerm()':
bk-relise.ino:950:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void LongTerm()':
bk-relise.ino:954:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino: In function 'void FuelSystemStatus()':
bk-relise.ino:965:7: error: 'class COBD' has no member named 'readPID'
bk-relise.ino:965:15: error: 'PID_FUEL_SYSTEM_STATUS' was not declared in this scope
Ошибка компиляции.

  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
 

вот что пишет ардуино(( с кодом не понял где его брать ?)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Marader54rus, не нужно пытаться вводить пользователей форума в заблуждение: Вы не залить скетч не можете, Вы не можете его откомпилировать.

Вероятнее всего, Вам не хватает библиотеки OBD.h.