Ребята помогите разобраться! Может я что не так сделал. Взял все отсюда https://sites.google.com/site/hobbya...home/car-start Переделал полностью схему. Машина заводится с допканала сигналки. Что нужно дописать в скетч, чтобы так заглушить ее с кнопки?? И еще установлено через 10 минут остановка двигателя, но этого не происходит. Только через 3 мин 10 секунд. В чем может быть проблема???
PHP код:
//v 22
//Настройки 
unsigned long ENGINE_WARM_TIME 600000//В миллисекундах время работы мотора после запуска 600000 миллисекунд = 10 минут
int ENGINE_START_MAX_TIME 3//В секундах масимальное время работы стартера типично 3 -10 сек




// select pins for input
const int hand_brake_in  5;  //d3 adruino Контакт стояночного тормоза "-"
const int start_in  4;  //d4 adruino Сигнал команды на старт от мобильного телефона вибра звонка
const int sharging_in  3;  //d5 adruino
 
const int sharging_on 0// 0 когда во время работы генератора или от датчика давления масла на этом входе низкое состояние , 1 когда на лампе генератора при работе генератора высокое состояние
const int hand_brake_on 0//  0= поднятый датчик ручника замыкает на массу тормоз активен (жигули), 1= датчик ручника в поднятом состоянии выдает высокий уровень напряжения 
 
// select pins for output
const int starter_out  6;  //d6 adruino реле стартера
const int engine_out  7;  //d7 adruino зажигание
const int secpower_out  8;  //d8 цепи вторичного питания печка, фары итд
const int status_out  9;  //d9 светодиод статуса системы  горит = система готова к работе(включена, ручник стоит). одно мигание запущен с первой попытки 2 со второй 3 с третьей 
                            //светодиод подключать с этого пина на массу

 
 
// variable for actual mode
int actual_mode 0//  2 engine started  
int left_start_try 0;  // переменная для хранения остатка числа попыток запуска 
 
unsigned long last_start_time 0//время в тысячных секунды когда был запущен движок 
 
 
 
 
 
void setup() {
  
  
//---- настройка входов и выходов контроллера --------------  
// init selected pins
  
pinMode(hand_brake_inINPUT); // enable input 
//  digitalWrite(hand_brake_in, HIGH); //если подтяжка реализована аппаратно то тут ненадо
 
pinMode(start_inINPUT); // enable input 
//  digitalWrite(start_in, HIGH); //pullup resustor enable
 
  
pinMode(sharging_inINPUT); // enable input 
//  digitalWrite(sharging_in, LOW); //generator LOW normaly
 
// init outputs
  
pinMode(starter_outOUTPUT); // enable output
  
digitalWrite(starter_outLOW); //set digital 0
 
  
pinMode(engine_outOUTPUT); // enable output
  
digitalWrite(engine_outLOW); //set digital 0
 
  
pinMode(secpower_outOUTPUT); // enable output
  
digitalWrite(secpower_outLOW); //set digital 0 

  
pinMode(status_outOUTPUT); // enable output
  
digitalWrite(status_outLOW); //set digital 0 
  //---- конец настройки входов и выходов контроллера --------------    
  
 
}
 
 
void loop()
{
  
//---- собственно это и есть весь код программы --------------
if (actual_mode )    //если двигатель не запущен
        
check_start();  //Управляем режимом запуска
//код условия обязательно включать в фигурные скобки если должно быть выполнено несколько инструкций, в данном случае одна, поэтому скобки опущены        
      
else   // иначе
        
{
        
check_for_shutdown(); //Управляем режимом ожидания окончания прогрева
        
//но хорошая привычка фигурные скобки ставить всегда
 
      
 
set_status_led(); //независимо от режима Управляем светодиодом статуса

  //------------------конец основного кода -----------------
 
}
 
 
 
 
 
  
//---- а дальше идут используемые функции и подфункции -------------- 
 
void check_start() 
{
if (
digitalRead(start_in) == && left_start_try == 0// 1 is command for start  - 1  значит импульс старта пришел с дистанционного управления <--- тут определяется полярность импульса запуска
  
{
   
left_start_try 3;   // указываем что нужно попытаться трижды запустить движок
  


 
 if ( 
left_start_try )   
 {
    
digitalWrite(engine_outHIGH);   //включаем зажигание 
    
digitalWrite(secpower_outHIGH); //включаем печку фары итд
    
delay(3000); // останавливаем код на 3 секунды чтобы бензонасос набрал давление, все датчики включились
    
    
if (digitalRead(hand_brake_in) != hand_brake_on//без ручника не делаем запуск
    
{
      
actual_mode 2// заканчиваем попытки запустить движок
      
left_start_try 0//без ручника другие попытки бесполезны
      
return;  
    }
    
  
   if (
digitalRead(sharging_in) != sharging_on  )    // проверяем что генератор не работает 
   
{
      
do_start(); // пытаемся запустить движок
      
left_start_try left_start_try //уменьшаем число попыток

        
if (left_start_try == 
          
actual_mode 2// заканчиваем попытки запустить движок
    
// конец проверки что ручник стоит а генератор не работает
}   

      
// конец процедуры старта
 
 
void do_start()
{
 
//тут будет запуск движка    
 //   digitalWrite(engine_out, HIGH);   //включаем зажигание 
 //   digitalWrite(secpower_out, HIGH); //включаем печку фары итд
 //   delay(3000); // останавливаем код на 3 секунды чтобы бензонасос набрал давление
    
    
digitalWrite(secpower_outLOW); //выключаем печку фары итд

//----------------------------------------------------------------------------------- цикл стартера 
    
digitalWrite(starter_outHIGH); //включаем стартер 
    
for (int secs=0secs <= ENGINE_START_MAX_TIME secs++) // 
      
{
      
delay(1000); // и продолжаем его держать включенным 1 секунду
      
if (digitalRead(sharging_in) == sharging_on//если зарядка пошла то 
               
break;  // прерываем цикл
      
}
//----------------------------------------------------------------------------------- 
    
digitalWrite(starter_outLOW); //отключаем стартер 

    
if (digitalRead(sharging_in) == sharging_on//еще раз смотрим что  зарядка пошла  
    
{
      
actual_mode 2//Запоминаем что движок запущен
      
last_start_time millis(); // запоминаем время запуска движка
    
}
    else
    {
      
digitalWrite(engine_outLOW);   //выключаем зажигание чтбы разблокировать реле стартера
      
digitalWrite(secpower_outLOW); //выключаем печку фары итд
      
delay(5000); // останавливаем код на 3 секунды чтобы бензонасос набрал давление
    
}
    
    
}
 

 
 
 
 
 
 
 
void check_for_shutdown() 
{
//сюда мы попадаем когда контроллер считает что движок работает
 
    
if (digitalRead(sharging_in) != sharging_on  //проверяем что движок случайно не заглох
          
do_shutdown();
    else 
          
digitalWrite(secpower_outHIGH); //включаем печку фары итд
    
    
if (digitalRead(hand_brake_in) != hand_brake_on  //проверяем что если злодеи сняли с ручника то глушим мотор
      
{
         
do_shutdown();
         
left_start_try =0// и больше не заводим
      
}
  
//тут будем контролировать чтоб если забыли машинку заведенной она не молотила до скончания бензобака а выключалась через какоето время
 
 
    
if (actual_mode != 0  //значит не выключили заглохший двигатель только что 
    
{
      
      
// милисекунды в ардуино обнуляются каждые 49 суток
      // для того чтобы в случае если запуск произошел в течении последних 20 минут до обнуления мотор не молотил еще 49 суток
      //  нужно обнулить и время старта, при этом мотор максимум будет прогреваться вдвое больше обычного 
      
if (millis() < last_start_time)
          {
          
last_start_time 0;
          }   
      
      
      if (
millis() > last_start_time+ENGINE_WARM_TIME)  // если текущее время больше чем время старта + время прогрева
         
{
         
do_shutdown();
         
left_start_try =0// и больше не заводим
         
}
    }
 }



void do_shutdown()
{
        
digitalWrite(secpower_outLOW); //выключаем печку фары итд         
        
digitalWrite(engine_outLOW); //вырубаем зажигание
        
actual_mode 0;  // движок выключили запомним это
        
last_start_time 0// ну и забудем о том что он был включен
}


void set_status_led()
{
if (
digitalRead(hand_brake_in) != hand_brake_on  //Если ручник не стоит то выкл светодиод нечего ему в пути мигать попусту
  
{
  
digitalWrite(status_outLOW);
  return; 
//прерываем выполнение функции
  
}
  
if (
actual_mode ==  2//Движок запущен
     
status_led_flash(); // показываем с какой попытки был прошлый запуск
else
     
digitalWrite(status_outHIGH); // постоянное свечение - показываем что готов к следующему запуску

}



void status_led_flash()
{
static 
unsigned long big_interval 0;
static 
unsigned long flash_interval 0;
unsigned long flash_count 0;
flash_count left_start_try;  //сколько раз мигать


//1 секндный интервал
if (millis() > flash_interval 1000L)
      
flash_interval millis() ; //задаем счетчие от 0 до 1 секунды

//задаем 6 секунд 
if (millis() > big_interval 6000L)
     {
      
big_interval millis() ;  //задаем счетчие от 0 до 10секунд
      
flash_interval big_interval;
     }  



if (
millis() <  big_interval +  flash_count 1000L// делим 6 секндный интервал на два периода, в первый мигаем количество раз соответствующее числу израсходованных попыток
  
//мигает 
    
if (millis() > flash_interval 500L
      
digitalWrite(status_outHIGH);
    else
      
digitalWrite(status_outLOW);

  } 
else 
  { 
// негорит
    
digitalWrite(status_outLOW); //set digital 0 
  
}