Перейти к содержанию

Электронная приборная панель ВАЗ-2106 (7-сегментные индикаторы)


Рекомендуемые сообщения

Чуток переделал, делал замеры на разное время, вродебы результат совпадал.

#include <SPI.h>
#include <math.h>
#include <EEPROM.h>
#define button 5
unsigned long Tahometr_impulse_count;
unsigned long Tahometr_impulse_count2;
byte TahometrPin=2;
double RPM; 
unsigned long Check_time ;
int clockPin = 7;
int dataPin = 8;    // Это отдельные регистры под квазианалоговую шкалу.
int kvaz = 6;
float kmh;
float kmha;
float kmh1;
float kmh2;
//+++++++++++++++++++++++++
float oildvs;
float oiltrans;
float oilredy;
float filvoz;
float antifriz;
float svechi;
float kolodki;
float tormoz;
//+++++++++++++++++++++++++
int menu = 0;
int vid1 = 1;
int vid2 = 0;
int vid3 = 0;
int piu=0;
int m=0;
int kva=0;
enum { vse = 9, tax = 10};
#define debounce 10 // ms debounce period to prevent flickering when pressing or releasing the button
#define holdTime 1500 // ms hold period: how long to wait for press+hold event
#define holdTime1 5000
int buttonVal = 0; // value read from button
int buttonLast = 0; // buffered value of the button's previous state
long btnDnTime; // time the button was pressed down
long btnUpTime; // time the button was released
long btnDn1Time;
boolean ignoreUp = false; // whether to ignore the button release because the click+hold was triggered
 void setup()
{
    kmh = EEPROM_float_read1(10);
    kmh1 = EEPROM_float_read2(20);
    kmh2 = EEPROM_float_read3(30);
oildvs = EEPROM_float_read4(40);
    oiltrans = EEPROM_float_read5(50);
    oilredy = EEPROM_float_read6(60);
    filvoz = EEPROM_float_read7(70);
    antifriz = EEPROM_float_read8(80);
    svechi = EEPROM_float_read9(90);
    kolodki = EEPROM_float_read10(100);
    tormoz = EEPROM_float_read11(110);
    SPI.begin();
    pinMode(3, OUTPUT);   //13й вывод - выход
    pinMode(4, INPUT);	 //2й – вход. Здесь кнопка, замыкающая на землю
    digitalWrite(4, HIGH); //включаем подтягивающий резистор
    pinMode(button, INPUT);
    digitalWrite(button, LOW );
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);
pinMode(vse, OUTPUT);
    pinMode(kvaz, OUTPUT);
    pinMode(TahometrPin, INPUT); 
    digitalWrite(TahometrPin, HIGH);  
    Check_time = millis();
    attachInterrupt(0, TahometrImpulse_on, FALLING);    //Задаем прерывания для тахометра
}

unsigned long hundreds_thousands=0, ten_thousands=0, thousands=0, hundreds=0, tens=0, ones=0;
int delayTime=1;	   
static uint8_t digit[11] = {0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde};   // Массив цифр которые выводим
static uint8_t digit2[12] ={0x81,0xf3,0x49,0x61,0x33,0x25,0x05,0xf1,0x01,0x21,0xff};
static uint8_t pos[9]= {0xef,0xf7,0xfb};
static uint8_t pos2[9]= {0x40,0x02,0x10,0x20,0x08,0x04};
unsigned int riad[9] = {
0B00000000,
0B11111110,
0B11111100,
0B11111000,								    // Массив вывода ряда на квазианалоговой шкале
0B11110000,
0B11100000,
0B11000000,
0B10000000,
0B00000000
};
unsigned int riad2[9] = {
0B00000000,
0B11111110,
0B11111101,
0B11111011,								    // Массив вывода ряда на квазианалоговой шкале
0B11110111,
0B11101111,
0B11011111,
0B10111111,
0B00000000
};
unsigned int poz[9] = {
0B00000000,
0B00000001,
0B00000011,
0B00000111,
0B00001111,								  //Массив вывода количества на квазианалоговой шкале
0B00011111,
0B00111111,
0B01111111,
0B11111111
};

unsigned long timer=0, timerPrev=0, thinkingTime=500;    //время считывания импульсов
unsigned long timer1=0, timerPrev1=0, thinkingTime1=3000;   //время показания в каком я разделе во 2 меню (ТО)
unsigned long timer2=0, timerPrev2=0, thinkingTime2=300;  //время смены анимации
unsigned long timer4=0, timerPrev4=0, thinkingTime4=3000; //время отображения что надо заменить при запуске
unsigned long timer5=0, timerPrev5=0, thinkingTime5=50; //время вывода загорания 1 светодиода на квазианалоговой шкале

 void Calc_RPM()		  //тут считаем количество оборотов
    {										
	    int Taho_ChekTime = millis()-Check_time;					  
	    if (Taho_ChekTime > 0) 
		  {							   
			   if (Tahometr_impulse_count > 0)
				   {						
					    RPM=((Tahometr_impulse_count*60*1000*60)/(5*Taho_ChekTime));
					    RPM=RPM*0.0017;
				   }	  
			   else
				   {
					    RPM=0;
				   }
		  }
		  if (Tahometr_impulse_count2 > 0)
				   {   
					    kmha=Tahometr_impulse_count2;
					    kmha=kmha*0.0002833;					  
				   }	  
			   else
				   {
					    kmha=0;
				   }
	    Tahometr_impulse_count = 0;
	    Tahometr_impulse_count2 = 0;							  
	    Check_time = millis();											 
    }

 void output2(int rpm)
{				   
 if (rpm >= 1000)
		  {
			    rpm=rpm/10;	
		  }

hundreds=rpm/100;
tens=(rpm-hundreds*100)/10;
ones=rpm-hundreds*100-tens*10;  
if (hundreds==0) hundreds=10;  
if (hundreds==10 && tens==0)tens=10;
digitalWrite(tax, LOW);	  
SPI.transfer(digit[hundreds]);
SPI.transfer(pos[0]);	 
digitalWrite(tax, HIGH);
delay(delayTime);
digitalWrite(tax, LOW);
SPI.transfer(digit[tens]);
SPI.transfer(pos[1]);			   
digitalWrite(tax, HIGH);
delay(delayTime);

digitalWrite(tax, LOW);
SPI.transfer(digit[ones]);
SPI.transfer(pos[2]);			   
digitalWrite(tax, HIGH);
delay(delayTime);
    digitalWrite(tax, LOW);
SPI.transfer(0x00);
SPI.transfer(pos[1]);			   
digitalWrite(tax, HIGH);
}
void output5(float kmh)
{
if(menu==0){
 if (vid1 == 0)
{   
hundreds_thousands=kmh/100000;
    ten_thousands=(kmh-hundreds_thousands*100000)/10000;
    thousands=(kmh-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(kmh-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(kmh-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=kmh-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
void output6(float kmh1)
{ 
 if(menu==0){
 if (vid1 == 1)
{   
hundreds_thousands=kmh1/100000;
    ten_thousands=(kmh1-hundreds_thousands*100000)/10000;
    thousands=(kmh1-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(kmh1-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(kmh1-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=kmh1-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0x11);
SPI.transfer(pos2[0]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
void output7(float kmh2)
{ 
 if(menu==0){
 if (vid1 == 2)
{   
hundreds_thousands=kmh2/100000;
    ten_thousands=(kmh2-hundreds_thousands*100000)/10000;
    thousands=(kmh2-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(kmh2-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(kmh2-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=kmh2-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0x05);
SPI.transfer(pos2[0]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void output8(float oildvs)
{ 
 if(menu==1){
 if (vid2 == 0)
{   
   if (vid3 == 1){
    digitalWrite(vse, LOW);	  
SPI.transfer(0x81);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x9f);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x8f);
SPI.transfer(pos2[2]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    if (piu==1){
    digitalWrite(vse, LOW);	  
SPI.transfer(0xb9);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x57);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0xb9);
SPI.transfer(pos2[5]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);
			 }
    else	 {
    digitalWrite(vse, LOW);	  
SPI.transfer(0x57);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0xb9);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x57);
SPI.transfer(pos2[5]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);
			 }

    digitalWrite(vse, LOW);	  
SPI.transfer(0xff);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
 } 
else
{
hundreds_thousands=oildvs/100000;
    ten_thousands=(oildvs-hundreds_thousands*100000)/10000;
    thousands=(oildvs-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(oildvs-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(oildvs-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=oildvs-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime); 
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
}
void output9(float oiltrans)
{ 
 if(menu==1){
 if (vid2 == 1){   
  if (vid3 == 1){
    digitalWrite(vse, LOW);	  
SPI.transfer(0x81);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x9f);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x8f);
SPI.transfer(pos2[2]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x8d);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xed);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0xe1);
SPI.transfer(pos2[5]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xff);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
 } 
else
{
hundreds_thousands=oiltrans/100000;
    ten_thousands=(oiltrans-hundreds_thousands*100000)/10000;
    thousands=(oiltrans-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(oiltrans-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(oiltrans-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=oiltrans-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
}
void output10(float oilredy)
{ 
 if(menu==1){
 if (vid2 == 2)
{   
    if (vid3 == 1){
    digitalWrite(vse, LOW);	  
SPI.transfer(0x81);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x9f);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x8f);
SPI.transfer(pos2[2]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    if (piu==1){

    digitalWrite(vse, LOW);	  
SPI.transfer(0x39);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x47);
SPI.transfer(pos2[5]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);
			 }
    else	 {

    digitalWrite(vse, LOW);	  
SPI.transfer(0x47);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x39);
SPI.transfer(pos2[5]);	 
digitalWrite(vse, HIGH);
    delay(delayTime);
			 }

    digitalWrite(vse, LOW);	  
SPI.transfer(0xff);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
 } 
else
{
hundreds_thousands=oilredy/100000;
    ten_thousands=(oilredy-hundreds_thousands*100000)/10000;
    thousands=(oilredy-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(oilredy-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(oilredy-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=oilredy-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
}
void output11(float filvoz)
{
if(menu==1){
 if (vid2 == 3)
{   
    if (vid3 == 1){
    digitalWrite(vse, LOW);	  
SPI.transfer(0x1d);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x9f);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x8f);
SPI.transfer(pos2[2]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x01);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x81);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x61);
SPI.transfer(pos2[5]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0xff);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
 } 
else
{
hundreds_thousands=filvoz/100000;
    ten_thousands=(filvoz-hundreds_thousands*100000)/10000;
    thousands=(filvoz-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(filvoz-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(filvoz-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=filvoz-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
}
void output12(float antifriz)
{ 
 if(menu==1){
 if (vid2 == 4)
{   
	   if (vid3 == 1){
    digitalWrite(vse, LOW);	  
SPI.transfer(0xf1);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0xfd);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x81);
SPI.transfer(pos2[2]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x8d);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x81);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x8f);
SPI.transfer(pos2[5]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0xff);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
 } 
else
{
hundreds_thousands=antifriz/100000;
    ten_thousands=(antifriz-hundreds_thousands*100000)/10000;
    thousands=(antifriz-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(antifriz-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(antifriz-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=antifriz-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
}
void output13(float svechi)
{ 
 if(menu==1){
 if (vid2 == 5)
{   
	   if (vid3 == 1){
    digitalWrite(vse, LOW);	  
SPI.transfer(0x8d);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x01);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x0d);
SPI.transfer(pos2[2]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x33);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0x9f);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
delay(delayTime);

    digitalWrite(vse, LOW);	  
SPI.transfer(0xff);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
 } 
else
{
hundreds_thousands=svechi/100000;
    ten_thousands=(svechi-hundreds_thousands*100000)/10000;
    thousands=(svechi-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(svechi-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(svechi-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=svechi-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
}
void output14(float kolodki)
{ 
 if(menu==1){
 if (vid2 == 6)
{   
   if (vid3 == 1){
    digitalWrite(vse, LOW);	  
SPI.transfer(0x25);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xf1);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xfd);
SPI.transfer(pos2[2]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x81);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x19);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xf3);
SPI.transfer(pos2[5]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xff);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
 } 
else
{
hundreds_thousands=kolodki/100000;
    ten_thousands=(kolodki-hundreds_thousands*100000)/10000;
    thousands=(kolodki-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(kolodki-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(kolodki-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=kolodki-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
}
void output15(float tormoz)
{ 
 if(menu==1){
 if (vid2 == 7)
{   
	   if (vid3 == 1){
    digitalWrite(vse, LOW);	  
SPI.transfer(0x25);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xf1);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xfd);
SPI.transfer(pos2[2]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x81);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x19);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x49);
SPI.transfer(pos2[5]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xff);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
 } 
else
{
hundreds_thousands=tormoz/100000;
    ten_thousands=(tormoz-hundreds_thousands*100000)/10000;
    thousands=(tormoz-hundreds_thousands*100000-ten_thousands*10000)/1000;
    hundreds=(tormoz-hundreds_thousands*100000-ten_thousands*10000-thousands*1000)/100;
tens=(tormoz-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100)/10;
ones=tormoz-hundreds_thousands*100000-ten_thousands*10000-thousands*1000-hundreds*100-tens*10;  

    if (hundreds_thousands==0) hundreds_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==0)ten_thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==0)thousands=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==0)hundreds=10;
    if (hundreds_thousands==10 && ten_thousands==10 && thousands==10 && hundreds==10 && tens==0)tens=10;
digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds_thousands]);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[ten_thousands]);
SPI.transfer(pos2[1]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[thousands]);
SPI.transfer(pos2[2]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(digit2[hundreds]);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
digitalWrite(vse, LOW);
SPI.transfer(digit2[tens]);
SPI.transfer(pos2[4]);			   
digitalWrite(vse, HIGH);
delay(delayTime);

digitalWrite(vse, LOW);
SPI.transfer(digit2[ones]);
SPI.transfer(pos2[5]);			   
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);
SPI.transfer(0xff);
SPI.transfer(pos2[3]);			   
digitalWrite(vse, HIGH);
}
}
}
}
void output16()
{ 
 if(menu==1){
 if (vid2 == 8)
{   
    digitalWrite(vse, LOW);	  
SPI.transfer(0x0d);
SPI.transfer(pos2[0]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x13);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0x9f);
SPI.transfer(pos2[2]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xf1);
SPI.transfer(pos2[3]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xfd);
SPI.transfer(pos2[4]);	 
digitalWrite(vse, HIGH);
delay(delayTime);
    digitalWrite(vse, LOW);	  
SPI.transfer(0xff);
SPI.transfer(pos2[1]);	 
digitalWrite(vse, HIGH);
}
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  void output4(int rpm)				   //Тут подсчет и выделение цифр для зажигания определенных светодиодов, светодиоды в квазианалоговой шкале подключаются матрицей к двум регистрам
{
    int kvm =rpm;
    kvm = map(kvm, 0, 120, 0, 60);
    if(timer5-timerPrev5>thinkingTime5)			   
	 {
		  if (kvm>kva)
		  {
		    kva++;
		  }
		  if (kvm<kva)
		  {
		    kva--;
		  }
		 timerPrev5=timer5;
	 }
    int pozi=0;
    double sot=0;   
    pozi=kva/8;
sot=(kva/8.0-pozi)*8.0; 
    int sot1=sot;
	   if (pozi>=1)
		  {
			  digitalWrite(kvaz, LOW);
			  shiftOut(dataPin, clockPin, MSBFIRST,riad[pozi]);    //вывод ряда
			  shiftOut(dataPin, clockPin, MSBFIRST,poz[8]);
			  digitalWrite(kvaz, HIGH);
			  delay(delayTime);
		  }

    digitalWrite(kvaz, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST,riad2[pozi+1]);   //вывод количества
    shiftOut(dataPin, clockPin, MSBFIRST,poz[sot1]);
    digitalWrite(kvaz, HIGH);
    delay(delayTime);

    digitalWrite(kvaz, LOW);
    shiftOut(dataPin, clockPin, MSBFIRST,riad2[0]);   //вывод количества
    shiftOut(dataPin, clockPin, MSBFIRST,poz[0]);
    digitalWrite(kvaz, HIGH);
}

 void loop(void)
  {
  digitalWrite(3, !digitalRead(4));
  if (digitalRead(4)==LOW)
  {
	  EEPROM_float_write1(10, kmh);
	  EEPROM_float_write2(20, kmh1);
	  EEPROM_float_write3(30, kmh2);
	  EEPROM_float_write4(40, oildvs);
	  EEPROM_float_write5(50, oiltrans);
	  EEPROM_float_write6(60, oilredy);
	  EEPROM_float_write7(70, filvoz);
	  EEPROM_float_write8(80, antifriz);
	  EEPROM_float_write9(90, svechi);
	  EEPROM_float_write10(100, kolodki);
	  EEPROM_float_write11(110, tormoz);
  }
  timer=millis();
  timer1=millis();
  timer2=millis();
  timer4=millis();
  timer5=millis();

  kmh=kmh+kmha;
  kmh1=kmh1+kmha;
  kmh2=kmh2+kmha;
  oildvs=oildvs-kmha;
  oiltrans=oiltrans-kmha;
  oilredy=oilredy-kmha;
  filvoz=filvoz-kmha;
  antifriz=antifriz-kmha;
  svechi=svechi-kmha;
  kolodki=kolodki-kmha;
  tormoz=tormoz-kmha;
  kmha=0;

  zagr();
  output2(RPM);
  output4(RPM);
  output5(kmh);
  output6(kmh1);
  output7(kmh2);
  output8(oildvs);
  output9(oiltrans);
  output10(oilredy);
  output11(filvoz);
  output12(antifriz);
  output13(svechi);
  output14(kolodki);
  output15(tormoz);
  output16();
  if (kmh>999999)
		  {
			 kmh=0;
		 }
  if (kmh1>99999)
		  {
			 kmh1=0;
		  }
  if (kmh2>99999)
		  {
			 kmh2=0;
		  }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
buttonVal = digitalRead(button);

if (buttonVal == HIGH && buttonLast == LOW && (millis() - btnUpTime) > long(debounce))
{
btnDnTime = millis();
btnDn1Time = millis();
}

if (buttonVal == LOW && buttonLast == HIGH && (millis() - btnDnTime) > long(debounce))
{
if (ignoreUp == false) event1();
else ignoreUp = false;
btnUpTime = millis();
}

if (buttonVal == HIGH && (millis() - btnDnTime) > long(holdTime))
{
event2();
ignoreUp = true;
btnDnTime = millis();
}
if (buttonVal == HIGH && (millis() - btnDn1Time) > long(holdTime1))
{
event3();
ignoreUp = true;
btnDn1Time = millis();
}
buttonLast = buttonVal;
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(timer1-timerPrev1>thinkingTime1)			   
							  {
								  vid3=0; 
							  }
if(timer2-timerPrev2>thinkingTime2)			   
							  {
								  piu++;
								  if (piu==2){
										   piu=0;
										  }
								  timerPrev2=timer2;
							  }
if(timer-timerPrev>thinkingTime)			   
	 {
		 Calc_RPM();
		 timerPrev=timer;
	 }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void event1()
{
 if(menu==0)
		 {
				 vid1++;
						  if(vid1==3)
									 {
									    vid1=0;
									 }
		 }
 if(menu==1)
		 {
				 vid2++;
				 vid3=1;
				 timerPrev1=timer1;
						  if(vid2==9)
									 {
									    vid2=0;
									 }
		 }
}
void event2()
{
  if(menu==0)
		 {
		   if(vid1==1)			   
				    {
					  kmh1=0;		
				    }
		   if(vid1==2)			   
				    {
					  kmh2=0;		
				    }	 
		 }
  if(menu==1)
		 {
		   if(vid2==0)			   
				    {
					  oildvs=10000.00;		
				    }
		   if(vid2==1)			   
				    {
					  oiltrans=100000.00;		
				    }
		   if(vid2==2)			   
				    {
					  oilredy=50000.00;	 
				    }
		   if(vid2==3)			   
				    {
					  filvoz=2500.00;		
				    }

		   if(vid2==4)			   
				    {
					  antifriz=100000.00;		
				    }
		   if(vid2==5)			   
				    {
					  svechi=35000;		
				    }
		   if(vid2==6)			   
				    {
					  kolodki=35000.00;		
				    } 
		   if(vid2==7)			   
				    {
					  tormoz=100000.00;		
				    }  
		 }

}

void event3()
{
		   if(menu==0)
					 {
					    if(vid1==0)			   
								   {
									 menu=1;
									 vid2=0;
									 vid3=1;
									 timerPrev1=timer1;
								   }
					 }
		   if(menu==1)
					 {
					    if(vid2==8)			   
								   {
								    menu=0;
								    vid1=0;
								    }
					 }
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write1(int addr, float kmh) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&kmh;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read1(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write2(int addr, float kmh1) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&kmh1;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read2(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write3(int addr, float kmh2) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&kmh2;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read3(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write4(int addr, float oildvs) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&oildvs;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read4(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write5(int addr, float oiltrans) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&oiltrans;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read5(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write6(int addr, float oilredy) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&oilredy;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read6(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write7(int addr, float filvoz) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&filvoz;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read7(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write8(int addr, float antifriz) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&antifriz;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read8(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write9(int addr, float svechi) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&svechi;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read9(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write10(int addr, float kolodki) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&kolodki;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read10(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void EEPROM_float_write11(int addr, float tormoz) // запись в ЕЕПРОМ
{ 
 byte *x = (byte *)&tormoz;
 for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]);
}
float EEPROM_float_read11(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];
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 void  TahometrImpulse_on()
  {
	    Tahometr_impulse_count++;
	    Tahometr_impulse_count2++;
  }
 void zagr()
{
 if(m<=8)
    {
    if(timer4-timerPrev4>thinkingTime4)			   
							  {
								  m++;
								  if (m>=8){
										   menu=0;
										   vid2=0;
										   m=10;
										  }
								  timerPrev4=timer4;
							  }
  if(m<=8)
    {  
		    menu=1;
		    vid3=1;
		    if(m==0)			   
				    {		 
		    if(oildvs<=500.00)			   
				    {
					 vid2=0; 
				    }
		    else
			 {
			   m++;
			 }
				    }
		   if(m==1)			   
				    {		
		   if(oiltrans<=100.00)			   
				    {
					 vid2=1;
				    }
				    else
			 {
			   m++;
			 }
				    }
		   if(m==2)			   
				    {	   
		   if(oilredy<=100.00)			   
				    {
					 vid2=2;
				    }
				    else
			 {
			   m++;
			 }
				    }
		   if(m==3)			   
				    {		
		   if(filvoz<=500.00)			   
				    {
					 vid2=3;
				    }
				    else
			 {
			   m++;
			 }
				    }
		   if(m==4)			   
				    {		
		   if(antifriz<=100.00)			   
				    {
					 vid2=4;
				    }
				    else
			 {
			   m++;
			 }
				    }
		   if(m==5)			   
				    {	   
		   if(svechi<=100.00)			   
				    {
					 vid2=5;
				    }
				    else
			 {
			   m++;
			 }
				    }
		   if(m==6)			   
				    {	   
		   if(kolodki<=100.00)			   
				    {
					 vid2=6;
				    }
				    else
			 {
			   m++;
			 }
				    }
		   if(m==7)			   
				    {	   
		   if(tormoz<=100.00)			   
				    {
					 vid2=7;
				    }
				   else
			 {
			   m++;
			 }
				    }
    }   
    }	   
} 

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Помогите пожалуйста, не могу понять в чем дело. Вот схема подключения датчика скорости ваз 2110 к ардуино, датчик стоит в моей коробке ваз 2106.

post-123848-0-65917800-1427829096_thumb.jpg

Схема была сделана методом проб и перебора всевозможных вариантов подключения датчиков скорости к микроконтроллерам с интернета. Вообщем как то подключил и заработало, справа это фильтр от помех с машины которые наводили всевозможные реле, тоесть при срабатывании реле, ардуино типо видела что было сделано примерно 100 импульсов, хотя датчик скорости не трогался, а срабатывало 1 простое 12 вольтовое реле в автомобиле. Пройтись по всей машине и каждому реле ставить диод не хотел. Поэтому колхозил типо фильтр, но оно работает, значит оправдано.

Проблема в том что датчик скорости начинает считать скорость, все хорошо, но при скорости больше 40 километров в час, он не поднимал скорость выше, а наоборот опускал, в итоге когда я ехал со скоростью примерно 100 км\ч, мой спидометр показывал 40 км\ч. Проверял дома на столе, датчик четко видит все 6 импульсов на 1 оборот. То-есть чем меньше время между импульсами (больше скорость), ардуина пропускает половину импульсов.

Моя мысль такая, что у КТ315 не хватает частоты срабатывания. Верна моя мысль? Если да, то какой транзистор лучше поставить?

И я понимаю (ну если не ошибаюсь, что возможно) что диод перед резистором и транзистором должен быть развернут, но тогда схема не работает. Поправьте если ошибся

Может кто посоветует другую схему включения?

Вот скетч, почистил от ненужной информации.

kmha - это пройденное расстояние

RPM - это скорость

#include <SPI.h>
#include <math.h>
unsigned long Tahometr_impulse_count;
unsigned long Tahometr_impulse_count2;
byte TahometrPin=2;
double RPM;
unsigned long Check_time ;
float kmha;
//+++++++++++++++++++++++++
float oildvs;
float oiltrans;
float oilredy;
float filvoz;
float antifriz;
float svechi;
float kolodki;
float tormoz;

enum { tax = 10};

void setup()
{
 SPI.begin();
 pinMode(TahometrPin, INPUT);
 digitalWrite(TahometrPin, HIGH);
 Check_time = millis();
 attachInterrupt(0, TahometrImpulse_on, FALLING); //Задаем прерывания для тахометра
}

unsigned long hundreds=0, tens=0, ones=0;
int delayTime=1;	
static uint8_t digit[11] = {0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde}; // Массив цифр которые выводим
static uint8_t pos[9]= {0xef,0xf7,0xfb};

unsigned long timer=0, timerPrev=0, thinkingTime=500; //время считывания импульсов

void Calc_RPM()		 //тут считаем количество оборотов
 {										
	 int Taho_ChekTime = millis()-Check_time;					
	 if (Taho_ChekTime > 0)
		 {							
			 if (Tahometr_impulse_count > 0)
				 {						
					 RPM=((Tahometr_impulse_count*60*1000*60)/(Taho_ChekTime));
					 RPM=RPM*0.000194888;
				 }	
			 else
				 {
					 RPM=0;
				 }
		 }
		 if (Tahometr_impulse_count2 > 0)
				 {
					 kmha=Tahometr_impulse_count2;
					 kmha=kmha*0.000194888;					
				 }	
			 else
				 {
					 kmha=0;
				 }
	 Tahometr_impulse_count = 0;
	 Tahometr_impulse_count2 = 0;							
	 Check_time = millis();											
 }

void output2(int rpm)
{				  
hundreds=rpm/100;
tens=(rpm-hundreds*100)/10;
ones=rpm-hundreds*100-tens*10;
if (hundreds==0) hundreds=10;
if (hundreds==10 && tens==0)tens=10;
digitalWrite(tax, LOW);	
SPI.transfer(digit[hundreds]);
SPI.transfer(pos[0]);	
digitalWrite(tax, HIGH);
delay(delayTime);
digitalWrite(tax, LOW);
SPI.transfer(digit[tens]);
SPI.transfer(pos[1]);			
digitalWrite(tax, HIGH);
delay(delayTime);

digitalWrite(tax, LOW);
SPI.transfer(digit[ones]);
SPI.transfer(pos[2]);			
digitalWrite(tax, HIGH);
delay(delayTime);
 digitalWrite(tax, LOW);
SPI.transfer(0x00);
SPI.transfer(pos[1]);			
digitalWrite(tax, HIGH);
}

void loop(void)
{
 timer=millis();
 if (kmha>0)
		 {
 oildvs=oildvs-kmha;
 oiltrans=oiltrans-kmha;
 oilredy=oilredy-kmha;
 filvoz=filvoz-kmha;
 antifriz=antifriz-kmha;
 svechi=svechi-kmha;
 kolodki=kolodki-kmha;
 tormoz=tormoz-kmha;
 kmha=0;
		 }
if(timer-timerPrev>thinkingTime)			
	 {
		 Calc_RPM();
		 timerPrev=timer;
	 }
 output2(RPM);
}

void TahometrImpulse_on()
{
	 Tahometr_impulse_count++;
	 Tahometr_impulse_count2++;
}

0.000194888 это расстояние в километрах, которое проезжает машина за 1 импульс. тоесть 19.4888 сантиметров

Изменено пользователем Yurchik26
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Измени схему питания датчика скорости. Питание на датчик (+12 В и общ.) после фильтра из диода и конденсатора. К датчику провода экранированные или свитые. Схему подключения измени: +5В с платы ардуно через 1,5-2 кОм на базу КТ315, с базы через 100 Ом на открытый коллектор датчика и 0,01 мкФ на общий. Массы ко всем датчикам отдельным проводом с одной точки от Ардуно.

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В нем отпадет необходимость если сделаешь токовый вход как написано выше с подтяжкой через резистор к +5В. Из-за емкости наступает ограничение по частоте, начнешь менять значение емкости расширишь диапазон но упадет помехоустойчивость.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Извините за время, работа, некогда было. Вообщем сделал все как написано, не помогло. Обороты считает, но как только заводишь двигатель сразу показывает 15-20 км\ч.

Может есть ещё какие нибудь варианты?

Ссылка на комментарий
Поделиться на другие сайты

Проверь падение напряжения между корпусом генератора , кузовом и минусовой клеммой аккумулятора при заведенном двигателе. Если более 0,5 В продублируй массу от клеммы до кузова или генератора. Замени провод от катушки зажигания до трамблера на высокоомный. Намотай на ферритовом кольце симметричный фильтр (ферритовое кольцо от компьютерного блока питания из цепи 220В), 5-10 витков свитыми проводами (12В, сигнал, масса) от датчика скорости. Фильтр расположи как можно ближе к плате.

Ссылка на комментарий
Поделиться на другие сайты

Проверю обязательно. Но как помню, от клемы до кузова идет провод сечением гдето 1 сантиметр, и от кузова до движка нормальная косичка медная. Но один фиг проверю. Но забыл кое что указать, система зажигания у меня не обычная, у меня стоит 2 канальный коммутатор и 2 катушки от движка газели ЗМЗ-406. Кстати как только установил эту систему, у меня ДХО (светодиодное) на холостом начало моргать, при этом заряд 14.0 - 14.3 (на холостом) но все равно они моргают пока обороты не будут выше 1100 (где то так). Получается что, примерно в течении недели попробую заменить все провода.

И генератор с восьмерки

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Померил падение напряжения, его нет, все в норме. А как думаете стоит ли параллельно катушке поставить диод? чтоб убрать обратную ЭДС? или это как то повлияет на время заряда в катушке?

Ссылка на комментарий
Поделиться на другие сайты

Помеха вроде ушла без фильтров. Я увеличил зазор свечей как на инжекторе, и вместо 0.7 сделал 1.0.

Теперь новая проблема.

Есть коммутатор 133.3774-03 производства энергомаш, внутри микрухи кр1055хп2р (2 шт) и кт898А1 (2шт). В итоге эта система сильно греется. Пришлось ставить на радиатор, для запаса думал взять еще один коммутатор. В итоге купил коммутатор, и для проверки воткнул вместо своего, машина проработала 5 минут и выгорел 1 канал. Эта не надежная система мне не нравится. Можно ли на МК собрать свой коммутатор, но вместо транзисторов использовать MOSFET чтоб не так сильно грелись? Как я понимаю транзистор еще умеет некоторое врмя оставаться открытым после срабатывания датчика холла, чтоб накопить энергию в катушке. А умеет ли открываться MOSFET, не портя сигнал, и не давать сбой ?

В общем можно ли заменить кт898А1 каким нибудь MOSFET? (Чтоб не так сильно грелся)

Но и не только заменить, вместе с установкой MOSFET могу переделать систему управления на МК.

Просто я формы сигнала не знаю, осциллографа нет.

Изменено пользователем Yurchik26
Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...

http://www.mediafire.com/download/noe99pdua68adbw/%D0%9F%D1%80%D0%B8%D0%B1%D0%BE%D1%80%D0%BD%D0%B0%D1%8F.rar

Здесь архив с 3 скетчами, 1-(бензин,температур,вольтметр,тах) 2-(спидометр) 3-(замок по RFID метке). Коды на вид ужасные, знаю. Но есть как есть. Данные кстати усредняются, сидел думал над усреднениями наверное 2 дня. Схемы дать не могу так как они тоже безобразны. Может кому и пригодится опыт, поэтому и выкладываю это.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

http://hostingkartin...0f3cb8df85ae9f2

http://www.mediafire.com/view/gtqxrvs1729uq7s/IMG_20151010_192249.jpg

По спидометру-долго мучался чтоб не было помех от реле и работающей катушки зажигания. В итоге подключение к МК по схеме, но запитывающий провод самого датчика, по правилам должен подключаться к +12в, но этого делать не надо, подключайте на +5 в. Стабилизированное с МК, и никаких проблем.

По тахометру-сам схему так и не придумал, та схема что на картинке, это с бортового компьютера БК-06, она точно рабочая, но вместо ULN2003, не ставьте транзистор, я много перебирал много транзисторов, но схема так и не заработала, ставьте именно ULN2003.

Вольт метр, это обычный делитель, либо номиналы подбирайте, либо код меняйте, либо 1 резистор поставить подстроечный, это как кого желание. Еще посоветую в самом начале на +12 в поставить диод.

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

Литры в баке думаю тоже понятно, но тут надо немного доработать сам датчик, его надо вынуть с бака, и вскрыть маленькую крышку. А там отогуть 1 ус, который отвечает за то чтобы мигала лампа когда мало топлива. Можно и с ним, но когда в баке будет оставать ещё литра 3-7, на дисплее у вас будет 0 литров остаток.

Квазианалоговая шкала подключается как матрица. Подключается линейки светодиодов ПАРАЛЛЕЛЬНО (на схеме можно подумать последовательно). И на схеме они как лампочки, но это СВЕТОДИОДЫ, просто светодиоды долго рисовать, лампы быстрее.

Если есть ошибки пишите.

Изменено пользователем Yurchik26
Ссылка на комментарий
Поделиться на другие сайты

не читал всей ветки, поэтому на угад. если у вас сильные помехи по бортовой сети, то это явно не от катушки. поставте свечи с встроенным сопротивлением или провода которые к свечам идут тоже бывают с встроенным сопротивлением на 1 мОм. помехи должны уйти.

пример.

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

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

Пробывал как вы говоите. Помех стало меньше, но они не ушли. Вернул зазоры как было. 0.6-0.7

Но самое странное, помехи только на тахометре, спидометр идеально. Убрал вообще сигнальный провод с катушки, помехи остались. Отсоединил все сигнальные провода, помеха осталась. Хотя схема тахометра и спидометра одинаковая, они даже от одного стабилизатора запитаны. Да хер с ней, за*б**а, больше ничего с ней делать не буду. Есть как есть. Работает всё кроме тахометра.

Изменено пользователем Yurchik26
Ссылка на комментарий
Поделиться на другие сайты

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

Изменено пользователем Yurchik26
Ссылка на комментарий
Поделиться на другие сайты

поэтому и глюки))) что напрямую, Я видел зажигание с двумя двойными катушками от волги и двумя ВАЗовскими коммутаторами. Снять сигнал можно не с коммутатора а с датчика хола который на трамлере установлен, там уж точно помех не будет больших единственное но при подключении к ДХ, нужно помнить что за один оборот колена он срабатывает 4 раза.

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

А сколько раз по вашему он должен срабатывать если у вас 4 цилиндра и сгорают они не по 2 а по очереди????

так, стопе, это я напутал, 2 раза он срабатывает. извините)))

еще больше вас запутал, у меня на балконе лежат 2 трамблера, с 2108, так вот у них ротор 4 кулачковый(или кулачек с 4мя буграми, как правильно так и пусть будет), значит всетаки 4 раза срабатывает ДХ.

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

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

Трамблер вращается в 2 раза медленнее коленвала (хотя кулачка (это для контактного трамблера) или выреза в шторке (для ДХ) действительно 4). Вы забыли что двигатель то 4х тактный! БВС надо еще и сжимать перед воспламенением, хоть инжектор, хоть карбюратор. Или Вы хотите сказать, что за один оборот коленвала должно проскочить 4 искры в 4х цилиндрах?

Зря зачеркнули первое предложение.

Изменено пользователем Pilulkin
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...