бортовой компьютер на ауди

infyniti
Offline
Зарегистрирован: 15.07.2017

MaksVV пишет:

infyniti пишет:

Если я буду двигатся на скорости и отпущу газ он тоже точно мгновенный расход покажет?И если подумать еще примеров могу подкинуть.

покажет 0, потому как в таком режиме обычно время впрыска 0, сосчитай по формуле

Какой ноль если у меня обороы за счет движения.

infyniti
Offline
Зарегистрирован: 15.07.2017

Или каробка автомат?

MaksVV
Offline
Зарегистрирован: 06.08.2015

ты разве не замечал зависимости, что когда поднимаешь обороты двигателя , то расход топлива растёт. Странно да? А теперь подумай зависит ли расход от оборотов или нет?

MaksVV
Offline
Зарегистрирован: 06.08.2015

Корорче заканчивай с этой хернёй, ипать мозг. Это тебе на размышление. что будет с расходом если коробка автомат

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:

Какой ноль если у меня обороы за счет движения.

и чё?? ты в формулу подставь время впрыска, которое равно 0, и пох какие обороты. Если один из множетелей 0 то всё 0 дурья твоя башка. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

MaksVV пишет:

Как ты не поймешь что количество оборотов в минуту это и есть количество впрыскиваний в минуту, а количество впрыскиваний это количество топлива, получаем количество топлива в минуту, переводим в часы, получаем количество топлива в час, это и есть расход

по формуле  подсчитается количество нулевых порций топлива в минуту, это и будёт нулём 

infyniti
Offline
Зарегистрирован: 15.07.2017

MaksVV пишет:

ты разве не замечал зависимости, что когда поднимаешь обороты двигателя , то расход топлива растёт. Странно да? А теперь подумай зависит ли расход от оборотов или нет?

Нет это обороты зависят от того сколько на них тратится энергии.По трассе я могу топить на 5000 у меня расход будет меньше чем в городе Где я неподнимаю их выше 3000.По бездарожью в гору тоже. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:

MaksVV пишет:

ты разве не замечал зависимости, что когда поднимаешь обороты двигателя , то расход топлива растёт. Странно да? А теперь подумай зависит ли расход от оборотов или нет?

Нет это обороты зависят от того сколько на них тратится энергии.По трассе я могу топить на 5000 у меня расход будет меньше чем в городе Где я неподнимаю их выше 3000.По бездарожью в гору тоже. 

ты чё вообще дурик чтоли? в формуле, учитываются не  только обороты, но и ВРЕМЯ ВПРЫСКА. Одно умноржается на другое

infyniti
Offline
Зарегистрирован: 15.07.2017

MaksVV пишет:

infyniti пишет:

MaksVV пишет:

ты разве не замечал зависимости, что когда поднимаешь обороты двигателя , то расход топлива растёт. Странно да? А теперь подумай зависит ли расход от оборотов или нет?

Нет это обороты зависят от того сколько на них тратится энергии.По трассе я могу топить на 5000 у меня расход будет меньше чем в городе Где я неподнимаю их выше 3000.По бездарожью в гору тоже. 

ты чё вообще дурик чтоли? в формуле, учитываются не  только обороты, но и ВРЕМЯ ВПРЫСКА. Одно умноржается на другое

Ну да у вас формула всемогущая она знает когда машина под нагрузкой когда в торможении когда когда вгору когда с горы кога в холостую.и все это без участия датчиков а тем более самого ЭБУ удачи не буду мешать.

MaksVV
Offline
Зарегистрирован: 06.08.2015

для тупых  - обороты - количество порций топлива в минуту (хаха  в час),

                   время впрыска - размер порций топлива  

MaksVV
Offline
Зарегистрирован: 06.08.2015

infyniti пишет:
Ну да у вас формула всемогущая она знает когда машина под нагрузкой когда в торможении когда когда вгору когда с горы кога в холостую.и все это без участия датчиков а тем более самого ЭБУ удачи не буду мешать.

какие нахер датчики? всё что ты написал это учитывает время впрыска - потому как время впрыска это и есть нагрузка на ДВС. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

ты вообще смысла измерения не понимаешь))) без разницы какие режимы, сколько ты на газ нажал и как там катится автомобиль.  Датчики нужны ЭБУ, чтобы сформировать время впрыска. мы измеряем уже конечный вариант, в котором расход топлива зависит ТОЛЬКО от оборотов и времени впрыска. Конечно тут не учитывается давление топлива и загрязнение форсунок, но эти параметры должны быть неизменны на исправном авто. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

мы замеряем количество порций топлива и их размер. ВСЁ, Больше топливу не откуда взяться. Ну можно конечно адсорбер паров бензина считать, но это уже ананизм. 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

а, почему нельзя вытащить переменную расхода топлива из бортового компьютера?

MaksVV
Offline
Зарегистрирован: 06.08.2015

Клапауций 112 пишет:

а, почему нельзя вытащить переменную расхода топлива из бортового компьютера?

имеется виду из ЭБУ двигателя? если да, то там как правило таких переменных нет

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

MaksVV пишет:

там как правило таких переменных нет

тут два варианта:

1. такая переменная есть и её нужно брать оттуда.

2. такой переменной нет и она нафиг никому не нужна.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

вдогонку - можно сколхозить эмпирическую формулу расхода топелева, загнав статистику фактического расхода, пробега, скорости, оборотов, температуры двигла, за бортом и всего, что доступно в нейросеть.

MaksVV
Offline
Зарегистрирован: 06.08.2015

1. в ауди сорок лохматого года, там такой переменной нет это 100%

2. Если бы она даже была , то чтоб её оттуда вытащить, тема ещё на 1000 страниц уйдёт, (см. бортовой про опель)

3. Нужна, судя по всему, раз ТС такую тему создал. 

4. короче нах мне всё это не нужно, бестолковые тут все)) я спать пошёл

MaksVV
Offline
Зарегистрирован: 06.08.2015

в мозжечок если быть точным , по вай фаю

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

MaksVV пишет:

1. в ауди сорок лохматого года, там такой переменной нет это 100%

и, как люди до 2017-го года ездили?

MaksVV
Offline
Зарегистрирован: 06.08.2015

если кто то собирается пользоваться формулой расхода, то имейте в виду, она выведена для фазированного впрыска (автомобили, имеющие датчик распредвала), т.е. один впрыск топлива за 2 оборота коленвала,

для попарно-параллельного впрыска и одновременного (старые а/м, где один впрыск топлива происходит за каждый оборот коленвала) значение расхода нужно просто умножить на 2. 

medvedka777
Offline
Зарегистрирован: 29.06.2017

В машине с мозгов идёт провод на приборку который на родной бк подаёт сигнал о расходе топлива, одна проблема хер поймёшь что он там даёт, расход мне нужен во первых потому что когда едешь по трассе можно экономить, на второй машине у меня есть бк который все это показывает и стоит он штатно, так вот можно ехать 110 и жрать оно будет 14 литров, но если правильно разогнать и держать педаль расход доходит до 6,5, а по нынешним ценам это не плохая экономия... брать с к линии что то это не вариант ибо при подключении диагностического шнура мозги уходят в сервисный режим и связь очень печальная, надо постоянно ебать мозг

medvedka777
Offline
Зарегистрирован: 29.06.2017

А по поводу лохматого года Ауди так она к меня с пробегом в пол миллиона реже ломается чем 10 летний Опель мотор которого уже умудряется сдирать 1 масла на 150 км

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Возьми внешний датчик расхода.

Это будет сильно точнее и независимо от настроек ЭБУ и хитростей производителя.

infyniti
Offline
Зарегистрирован: 15.07.2017

MaksVV пишет:

1. в ауди сорок лохматого года, там такой переменной нет это 100%

 

А как прошивка общается с ЭБУ,по вайфаю?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ничего не имею против Виталика, но с таким даччиком превращение автомобиля в пионерский костер - вопрос времени.  Хотя, если Audi карбюраторный, то мошт и прокатит

infyniti
Offline
Зарегистрирован: 15.07.2017

wdrakula пишет:

Возьми внешний датчик расхода.

Это будет сильно точнее и независимо от настроек ЭБУ и хитростей производителя.

Он не расход считает а пройденную через него жидкость.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

infyniti пишет:

wdrakula пишет:

Возьми внешний датчик расхода.

Это будет сильно точнее и независимо от настроек ЭБУ и хитростей производителя.

Он не расход считает а пройденную через него жидкость.

Мля! Тут уже мне стало интересно: а в чем вы видите разницу? ;) ;) ;)

столько-то литров в час... ну или в минуту, кому что нравится...

Можно поделить на среднюю скорость в сотнях  - будет условное число на 100 км, которое ничего не показывает, но шоферюги его любят.

infyniti
Offline
Зарегистрирован: 15.07.2017

wdrakula пишет:

infyniti пишет:

wdrakula пишет:

Возьми внешний датчик расхода.

Это будет сильно точнее и независимо от настроек ЭБУ и хитростей производителя.

Он не расход считает а пройденную через него жидкость.

Мля! Тут уже мне стало интересно: а в чем вы видите разницу? ;) ;) ;)

столько-то литров в час... ну или в минуту, кому что нравится...

Можно поделить на среднюю скорость в сотнях  - будет условное число на 100 км, которое ничего не показывает, но шоферюги его любят.

Дело в том что этот прибор не учитывает обратку,тоесть если бензонасос качает 6 бар а системе нужно 3 то остальное уходит в бак при нагреве системы давление повышается еще допустим на 0.5 и это тоже скидывается в бак чтобы на выходе форсунок было всегда 3бар .

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

блин! ну так бы сразу и сказал! В большинстве систем нужно два расходомера - на прямой и на обратку, и считать разницу.... это ...вроде-как очевидно, нет?

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

medvedka777
Offline
Зарегистрирован: 29.06.2017

Блин мужики, нахрена нужен какой то прибор за кучу денег который будет вмешиваться в работу авто и может вообще взорваться или треснуть и будет костёр, есть же форсунка, надо только описать код, я вначале бросал код на ардуино мега, его бы переработать под мой уно и мой экран, проблема в том что я нихрена в этом не понимаю, а человеку который понимает это пол часа времени

MaksVV
Offline
Зарегистрирован: 06.08.2015

medvedka777 пишет:

Блин мужики, нахрена нужен какой то прибор за кучу денег который будет вмешиваться в работу авто и может вообще взорваться или треснуть и будет костёр, есть же форсунка, надо только описать код, я вначале бросал код на ардуино мега, его бы переработать под мой уно и мой экран, проблема в том что я нихрена в этом не понимаю, а человеку который понимает это пол часа времени

я же написал код 

MaksVV
Offline
Зарегистрирован: 06.08.2015

wdrakula пишет:
Мля! Тут уже мне стало интересно: а в чем вы видите разницу? ;) ;) ;)

столько-то литров в час... ну или в минуту, кому что нравится...

Можно поделить на среднюю скорость в сотнях  - будет условное число на 100 км, которое ничего не показывает, но шоферюги его любят.

это бесполезно, этому человеку чтото доказывать, проще повеситься 

MaksVV
Offline
Зарегистрирован: 06.08.2015

medvedka777 пишет:

А по поводу лохматого года Ауди так она к меня с пробегом в пол миллиона реже ломается чем 10 летний Опель мотор которого уже умудряется сдирать 1 масла на 150 км

речь была совсем не про это, а про то, что на таких автомобилях совмеи старые протоколы, что нужно без соинения учитывать

MaksVV
Offline
Зарегистрирован: 06.08.2015

#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10
int oil = 4;    
int water = 5;
int speedtemp = 2;
int injector = 3;
int lichts = 7;

bool message = 1;
unsigned long lasttime =0;
int interval = 100;        // интервал,мс обновления данных расхода на ЖК



volatile unsigned long t1=0;
volatile unsigned long t2=0;
volatile unsigned long t3=0;
volatile unsigned long t4=0;
volatile bool flag = 0;
volatile bool flagRPM = 0;
volatile bool ReadyRPM = 0;
volatile bool ReadyINJ = 0;

float InjTime =0.00;
float Lhour = 0.00;
float L100 = 0.00;
int Rpm =0;
float Speed = 0.00;




void setup() {
  

pinMode(oil, INPUT);     digitalWrite (oil, HIGH);
pinMode(water, INPUT);   digitalWrite (water, HIGH);
pinMode(lichts, INPUT);  digitalWrite (lichts, HIGH);


  pinMode(2,INPUT);        digitalWrite (2,HIGH);
  pinMode(injector,INPUT); digitalWrite (3,HIGH);
  
   attachInterrupt(0, INJTIME, CHANGE);
   attachInterrupt(1, RPM, RISING);



}

void loop() {

 if (ReadyINJ) {InjTime = (float)(t2-t1)/1000.00; ReadyINJ=0;}
 if (ReadyRPM) {Rpm = 120000/(t3-t1); ReadyRPM = 0;}
 Lhour = 9.00*(float)InjTime*(float)Rpm/20000.00; // формула расхода топлива л/час
 L100 = (float)Lhour*100.00/(float)Speed;          // формула расхода топлива л/100км

  
  
  if (digitalRead(oil)==LOW)
{

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);
tft.fillTriangle (120,0,0,250,240,250,ILI9341_RED);
tft.setTextColor(ILI9341_BLACK);  tft.setTextSize(17);
tft.setCursor(80, 110);
tft.println("!");
tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(6);
tft.setCursor(70, 120);
tft.println("OIL");
tft.setCursor(30, 255);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(4);
tft.println("warning!");
message=1;
 
}
else if (digitalRead(water)==LOW)
{
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);
tft.fillRect (0,0,240,250,ILI9341_YELLOW);
tft.setTextColor(ILI9341_RED);  tft.setTextSize(6);
tft.setCursor(70, 30);
tft.println("LOW");
tft.setCursor(40, 90);
tft.println("WATER");
tft.setCursor(40, 150);
tft.println("LEVEL");
tft.setCursor(30, 255);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(4);
tft.println("warning!");
   delay(1000);
   message=1;
 
}

else if (digitalRead(lichts)==LOW)
{
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);

tft.setTextColor(ILI9341_RED);  tft.setTextSize(6);
tft.setCursor(30, 30);
tft.println("brake");
tft.setCursor(7, 90);
tft.println("lights");
message=1;


}




else if (message)
{message=0;     
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
    tft.begin();
   tft.fillScreen(ILI9341_BLACK);
    tft.fillRect (0,150,240,3,ILI9341_WHITE);
tft.setCursor(150, 180);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(3);
tft.println("Litr");
tft.setCursor(150, 210);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(3);
tft.println("hour");    
    }

if (!message) {if (millis() - lastime > interval){
  
  // здесь печатаем на LCD переменные расхода 
  //только SetCursor надо выбрать
  tft.println(Lhour);
  tft.println(L100);
      
  
  lasttime = millis();
  }}
 
 
 }


void INJTIME() 
{
  flag=!flag;
  if (flag)  t1 = micros(); 
  else    {   t2 = micros(); ReadyINJ =1;}
  
}


void RPM () 
{
  flagRPM=!flagRPM;
  if (flagRPM)  t3 = millis(); 
  else       {   t4 = millis(); ReadyRPM =1;}
  
}
medvedka777
Offline
Зарегистрирован: 29.06.2017

Так, теперь мне надо все понять, у меня задумка была чтобы первее всего должно учитываться показания ошибок, у меня в программе оно впринципе так и выходило, сначала масло потом вода И так далее, и если все ок тогда только выводит рассчет топлива, я так понимаю что тут будет все намного не так, тоесть сначала прерываемы форсунки потом все остальное? Не совсем понял по поводу вывода значений на экран, как оно выводит, как зарисовывать потом изменяющую цифру, это я так понял надо ещё описать 

MaksVV
Offline
Зарегистрирован: 06.08.2015

medvedka777 пишет:

Так, теперь мне надо все понять, у меня задумка была чтобы первее всего должно учитываться показания ошибок, у меня в программе оно впринципе так и выходило, сначала масло потом вода И так далее, и если все ок тогда только выводит рассчет топлива

в скетч поменял кое что, должно заработать

MaksVV
Offline
Зарегистрирован: 06.08.2015

medvedka777 пишет:
тоесть сначала прерываемы форсунки потом все остальное?

измерение импульсов форсунок будет как бы в реальном времени проиходить, т.к. подключено на прерывание, скажем грубо - одновременно со всем остальным это будет происходить. 

medvedka777 пишет:
Не совсем понял по поводу вывода значений на экран, как оно выводит, как зарисовывать потом изменяющую цифру, это я так понял надо ещё описать

Да это надо доделать, в библиотеках для TFT иногда такая функция есть, читай либу. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

вот попробовал на одном прерывании измерять и время впрыска и обороты, поэтому второе прерывание остаётся под датчик скорости 


#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10
#define oil  4    
#define water  5
#define Speedpin  3
#define injector  2
#define lichts 7

bool message = 1;
unsigned long lasttime =0;
int interval = 100;        // интервал,мс обновления данных расхода на ЖК



volatile unsigned long t1=0;
volatile unsigned long t2=0;
volatile unsigned long t3=0;
volatile unsigned long t4=0;
volatile bool flag = 0;
volatile bool flagRPM = 0;
volatile bool ReadyRPM = 0;
volatile bool ReadyINJ = 0;

float InjTime =0.00;
float Lhour = 0.00;
float L100 = 0.00;
int Rpm =0;
float Speed = 0.00;




void setup() {
  

pinMode(oil, INPUT);     digitalWrite (oil, HIGH);
pinMode(water, INPUT);   digitalWrite (water, HIGH);
pinMode(lichts, INPUT);  digitalWrite (lichts, HIGH);


  pinMode(Speedpin,INPUT); digitalWrite (Speedpin,HIGH);
  pinMode(injector,INPUT); digitalWrite (injector,HIGH);
  
   attachInterrupt(0, INJTIME, CHANGE);
   attachInterrupt(1, SPEED, RISING);



}

void loop() {

 if (ReadyINJ) {InjTime = (float)(t2-t1)/1000.00; ReadyINJ=0;}
 if (ReadyRPM) {Rpm = 120000000/(t4-t3); ReadyRPM = 0;}
 Lhour = 9.00*(float)InjTime*(float)Rpm/20000.00; // формула расхода топлива л/час
 L100 = (float)Lhour*100.00/(float)Speed;          // формула расхода топлива л/100км

  
  
  if (digitalRead(oil)==LOW)
{

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);
tft.fillTriangle (120,0,0,250,240,250,ILI9341_RED);
tft.setTextColor(ILI9341_BLACK);  tft.setTextSize(17);
tft.setCursor(80, 110);
tft.println("!");
tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(6);
tft.setCursor(70, 120);
tft.println("OIL");
tft.setCursor(30, 255);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(4);
tft.println("warning!");
message=1;
 
}
else if (digitalRead(water)==LOW)
{
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);
tft.fillRect (0,0,240,250,ILI9341_YELLOW);
tft.setTextColor(ILI9341_RED);  tft.setTextSize(6);
tft.setCursor(70, 30);
tft.println("LOW");
tft.setCursor(40, 90);
tft.println("WATER");
tft.setCursor(40, 150);
tft.println("LEVEL");
tft.setCursor(30, 255);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(4);
tft.println("warning!");
   delay(1000);
   message=1;
 
}

else if (digitalRead(lichts)==LOW)
{
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);

tft.setTextColor(ILI9341_RED);  tft.setTextSize(6);
tft.setCursor(30, 30);
tft.println("brake");
tft.setCursor(7, 90);
tft.println("lights");
message=1;


}




else if (message)
{message=0;     
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
    tft.begin();
   tft.fillScreen(ILI9341_BLACK);
    tft.fillRect (0,150,240,3,ILI9341_WHITE);
tft.setCursor(150, 180);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(3);
tft.println("Litr");
tft.setCursor(150, 210);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(3);
tft.println("hour");    
    }

if (!message) {if (millis() - lastime > interval){
  
  // здесь печатаем на LCD переменные расхода 
  //только SetCursor надо выбрать
  tft.println(Lhour);
  tft.println(L100);
 // и затирание организовать изменияющегося числа 
  
  lasttime = millis();
  }}
 
 
 }


void INJTIME() 
{
 flag=!flag;
  if (flag)  {   t1 = micros();   
  
  flagRPM=!flagRPM;
  if (flagRPM)   t3 = micros(); 
  else       {   t4 = micros(); ReadyRPM =1;}
     
  }
  else    {   t2 = micros(); ReadyINJ =1;}

}


void SPEED () 
{
  // тут считаем импульсы датчика скорости 
  //искать код измерения частоты, этого много на форуме
  // частоту потом можно в скорость перевести
 
  
}

 

medvedka777
Offline
Зарегистрирован: 29.06.2017

Ну вот, начинает что то нарисовываиься, жаль что тут видео не вставить, так бы запускал и все бы видели как оно и что, было бы интереснее, но жаль вот что больше никто не проникся....

MaksVV
Offline
Зарегистрирован: 06.08.2015

создай яндекс диск, там можно для каждого файла , который у тебя на этом вебдиске , генерить гостевую ссылку. Покажи, интересно ведь

medvedka777
Offline
Зарегистрирован: 29.06.2017

Вроде как 4 импульса на метр датчик скорости считает, сейчас полажу по форумам может найду способы вывода под эту библиотеку и кусок кода который будет считать скорость 

medvedka777
Offline
Зарегистрирован: 29.06.2017
MaksVV
Offline
Зарегистрирован: 06.08.2015

дак я думал у тебя уже расход показывает)) скорость добавил


#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"

// For the Adafruit shield, these are the default.
#define TFT_DC 9
#define TFT_CS 10
#define oil  4    
#define water  5
#define Speedpin  3
#define injector  2
#define lichts 7

bool message = 1;
unsigned long lasttime =0;
unsigned long Prev =0;
unsigned long prev =0;
unsigned long prevSpeed =0;
int interval = 100;        // интервал,мс обновления данных расхода на ЖК



volatile unsigned long t1=0;
volatile unsigned long t2=0;
volatile unsigned long t3=0;
volatile unsigned long t4=0;
volatile unsigned long T1=0;
volatile unsigned long T2=0;
volatile int impulse = 0;

volatile bool b=0;
volatile bool c=0;
volatile bool d=0;

int shet = 0;


volatile bool flag = 0;
volatile bool flagRPM = 0;
volatile bool ReadyRPM = 0;
volatile bool ReadyINJ = 0;

float InjTime =0.00;
float Lhour = 0.00;
float L100 = 0.00;
int Rpm =0;
int Speed = 0;




void setup() {
  

pinMode(oil, INPUT);     digitalWrite (oil, HIGH);
pinMode(water, INPUT);   digitalWrite (water, HIGH);
pinMode(lichts, INPUT);  digitalWrite (lichts, HIGH);


  pinMode(Speedpin,INPUT); digitalWrite (Speedpin,HIGH);
  pinMode(injector,INPUT); digitalWrite (injector,HIGH);
  
   attachInterrupt(0, INJTIME, CHANGE);
   attachInterrupt(1, SPEED, RISING);



}

void loop() {


if (millis()-prevSpeed>1000){      
  Speed = impulse/4*3600/1000;
  impulse = 0;  
  prevSpeed = millis();}



if (b)shet=0;

if (d){
if (millis()-Prev>200){
 
if (!b&&!c)shet++;
b=0; c=0; d=!d;
 Prev=millis();}}
else {if (millis() -prev>170){
 
if (!b&&!c)shet++;
b=0; c=0; d=!d;
 prev=millis();}}

 if (shet>=6) {InjTime=0; Rpm = 0;}

 if (ReadyINJ) {InjTime = (float)(t2-t1)/1000.00; ReadyINJ=0;}
 if (ReadyRPM) {Rpm = 120000000/(t4-t3); ReadyRPM = 0;}
 Lhour = 9.00*(float)InjTime*(float)Rpm/20000.00; // формула расхода топлива л/час
 L100 = (float)Lhour*100.00/(float)Speed;          // формула расхода топлива л/100км

  
  
  if (digitalRead(oil)==LOW)
{

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);
tft.fillTriangle (120,0,0,250,240,250,ILI9341_RED);
tft.setTextColor(ILI9341_BLACK);  tft.setTextSize(17);
tft.setCursor(80, 110);
tft.println("!");
tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(6);
tft.setCursor(70, 120);
tft.println("OIL");
tft.setCursor(30, 255);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(4);
tft.println("warning!");
message=1;
 
}
else if (digitalRead(water)==LOW)
{
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);
tft.fillRect (0,0,240,250,ILI9341_YELLOW);
tft.setTextColor(ILI9341_RED);  tft.setTextSize(6);
tft.setCursor(70, 30);
tft.println("LOW");
tft.setCursor(40, 90);
tft.println("WATER");
tft.setCursor(40, 150);
tft.println("LEVEL");
tft.setCursor(30, 255);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(4);
tft.println("warning!");
   delay(1000);
   message=1;
 
}

else if (digitalRead(lichts)==LOW)
{
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
tft.begin();  tft.fillScreen(ILI9341_BLACK);

tft.setTextColor(ILI9341_RED);  tft.setTextSize(6);
tft.setCursor(30, 30);
tft.println("brake");
tft.setCursor(7, 90);
tft.println("lights");
message=1;


}




else if (message)
{message=0;     
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
    tft.begin();
   tft.fillScreen(ILI9341_BLACK);
    tft.fillRect (0,150,240,3,ILI9341_WHITE);
tft.setCursor(150, 180);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(3);
tft.println("Litr");
tft.setCursor(150, 210);
tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(3);
tft.println("hour");    
    }

if (!message) {if (millis() - lastime > interval){
  
  // здесь печатаем на LCD переменные расхода 
  //только SetCursor надо выбрать
  tft.println(Lhour);
  tft.println(L100);
 // и затирание организовать изменияющегося числа 
  
  lasttime = millis();
  }}
 
 
 }


void INJTIME() 
{
  b=1;
 flag=!flag;
  if (flag)  {   t1 = micros();  c=1; 
  
  flagRPM=!flagRPM;
  if (flagRPM)   t3 = micros(); 
  else       {   t4 = micros(); ReadyRPM =1;}
     
  }
  else    {   t2 = micros(); ReadyINJ =1; c=1;}

}

void SPEED () 
{
 impulse++;
}

 

medvedka777
Offline
Зарегистрирован: 29.06.2017

Не, ну не все сразу)) это просто как оно получилось, как по мне так как заводское, экран в аккурат лёг и его спокойно видно днём, конечно хуже чем в новых машинах но вполне достойно, до расхода сначала прогу надо доделать, по выводу на экран пока ещё не разобрался, поидее ничего сложного, все так же как и я вывожу надписи, только добавить затирку, угадать со шрифтом и месторасположениям, ну и как всегда без косяков никуда))) ну и как бы сейчас машину хочу попутно до ума довести, масло из под головы потекло после 4 х месяцев ежедневного издевательства над ним, доведения до отсечки и прочее, да и дороги наши.... оборвало полушку на подрамнике... поэтому все как бы делается постепенно