собрал бк для машины (не могу запилить скетч)
- Войдите на сайт для отправки комментариев
вот ссыль на бк 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];
}
помогите решить проблему ибо сам в програмировании не понимаю ничего))
Во первых: Вставка программного кода в тему/комментарий
Во-вторых: По фразе "не могу запилить скетч" помочь невозможно. Нужны подробности. Что пишет Arduino IDE?
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.
вот что пишет ардуино(( с кодом не понял где его брать ?)
Marader54rus, не нужно пытаться вводить пользователей форума в заблуждение: Вы не залить скетч не можете, Вы не можете его откомпилировать.
Вероятнее всего, Вам не хватает библиотеки OBD.h.