Автозапуск авто на Arduino

Virusmc
Offline
Зарегистрирован: 22.11.2020

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

#define zazh1 4
#define zazh2 5
#define starter 10
#define obmanka 3
#define sceplenie 2
#define lamp_zar 6
#define ruchnik 8
#define signall 11

String val = ""; //переменная для чтения из сериал
int ch = 0; //хз прост переменная
int flag;
byte flag2;

void setup(void) { //Предустановки
  Serial.begin(9600); //скорость работы
  Serial.println("Start Program"); //текст запуска
  pinMode(zazh1, OUTPUT); // зажигание 1
  pinMode(zazh2, OUTPUT); // зажигание 2
  pinMode(starter, OUTPUT); // реле стартера
  pinMode(obmanka, OUTPUT);  // реле обманки иммобилайзера
  pinMode(sceplenie, OUTPUT); // реле иммитации нажатия педали сцепления
  pinMode(lamp_zar, INPUT); // считываем состояние лампы заряда
  pinMode(ruchnik, INPUT_PULLUP); // считываем состояние ручника
  pinMode(signall, INPUT_PULLUP); // считываем состояние импульса с блока сигнализаии

  digitalWrite(zazh1, HIGH); // выкл заж 1
  digitalWrite(zazh2, HIGH); // выкл заж 2
  digitalWrite(obmanka, HIGH); // выкл обманку
  digitalWrite(sceplenie, HIGH); // выкл сцепление
  digitalWrite(starter, LOW); // выкл реле стартера


}



void loop(void) { //основная программа
  if (digitalRead(signall) == LOW && digitalRead(lamp_zar) == LOW) {
    delay (700);
    flag = 1;
  }
  else if (digitalRead(signall) == LOW && digitalRead(lamp_zar) == HIGH) {
    delay (700);
    flag = 2;
  }

  if (digitalRead(ruchnik) == HIGH) {

    digitalWrite(zazh1, HIGH);
    digitalWrite(zazh2, HIGH);
    digitalWrite(obmanka, HIGH);
    digitalWrite(sceplenie, HIGH);
    digitalWrite(starter, LOW);

    if (flag2 == 0) {
      Serial.println("!!!!No Start Motor!!!!"); // для красивой строчки
      flag2 = 1;
    }
    flag=0;
    val = ""; //очищаем сообщение
    
  }
  ///////////////////////////сохраняем сообщение из сериал///////////////////////////////////////////
  if (Serial.available() || flag != 0 && digitalRead(ruchnik) != 1) {        //есть данные от Serial
    delay(200);                        //выждем, чтобы строка успела попасть в порт целиком раньше чем будет считана
    while (Serial.available()) {      //сохраняем входную строку в переменную val
      ch = Serial.read();
      val += char(ch);
      delay(10);
    }
    Serial.print ("******** Postupilo soobshenie ("); //Просто подтверждаем
    Serial.print(val);      // сообщаем об этом в терминал (если нужно)
    Serial.println(")**************************");// для красивой строчки



    if (val == "Za1") { // если поступило Za1
      Serial.print ("Zapysk ("); //Просто подтверждаем
      Serial.print(val);      // сообщаем об этом в терминал (если нужно)
      Serial.println(")"); // для красивой строчки
      val = ""; //очищаем сообщение
      digitalWrite(zazh1, LOW); // вкл зажиг 1
      Serial.println(digitalRead(zazh1));   // выводим состояние
    }

    else if (val == "Za2") { // если поступило Za2
      Serial.print ("Zapysk ("); //Просто подтверждаем
      Serial.print(val);      // сообщаем об этом в терминал (если нужно)
      Serial.println(")"); // для красивой строчки
      val = ""; //очищаем сообщение
      digitalWrite(zazh2, LOW); // вкл зажиг 2
      Serial.println(digitalRead(zazh2));   // выводим состояние
    }


    else if (val == "Scep") { // если поступило Scep
      Serial.print ("Push ("); //Просто подтверждаем
      Serial.print(val);      // сообщаем об этом в терминал (если нужно)
      Serial.println(")"); // для красивой строчки
      val = ""; //очищаем сообщение
      digitalWrite(sceplenie, LOW); // эмитируем нажатие педали сцепления
      Serial.println(digitalRead(sceplenie));   // выводим состояние
    }

    else if (val == "Obman") { // если поступило Obman
      Serial.print ("Start ("); //Просто подтверждаем
      Serial.print(val);      // сообщаем об этом в терминал (если нужно)
      Serial.println(")"); // для красивой строчки
      val = ""; //очищаем сообщение
      digitalWrite(obmanka, LOW); // эмитируем нажатие педали сцепления
      Serial.println(digitalRead(obmanka));   // выводим состояние
    }

    else if (val == "Starter") { // если поступило Starter
      Serial.print ("Start ("); //Просто подтверждаем
      Serial.print(val);      // сообщаем об этом в терминал (если нужно)
      Serial.println(")"); // для красивой строчки
      val = ""; //очищаем сообщение
      Serial.println("!!!!Start Starter!!!!"); // для красивой строчки
      digitalWrite(starter, HIGH); // запускаем реле стартера
      Serial.println(digitalRead(starter));   // выводим состояние в сериал
      delay (3000); // ждем 3 секунды
      digitalWrite(starter, LOW ); // останавливаем реле стартера
    }

    else if (val == "Off" || flag == 2) { // Запрет на запуск
      Serial.print ("!!! Warning  ("); //Просто подтверждаем
      Serial.print(val);      // сообщаем об этом в терминал (если нужно)
      Serial.println(")  !!!!"); // для красивой строчки
      val = ""; //очищаем сообщение
      Serial.println("!!!!Stop  Auto!!!!"); // для красивой строчки
      digitalWrite(zazh1, HIGH); //выкл заж 1
      digitalWrite(zazh2, HIGH); //выкл заж 2
      digitalWrite(sceplenie, HIGH); //выкл сцепление
      digitalWrite(starter, LOW); // выкл стартер
      delay (2000);
      digitalWrite(obmanka, HIGH); //выкл обманку
      Serial.print("1. starter = ");   // выводим состояние в сериал
      Serial.println(digitalRead(starter));   // выводим состояние в сериал
      Serial.print("2. zazh1 = ");   // выводим состояние в сериал
      Serial.println(digitalRead(zazh1));   // выводим состояние в сериал
      Serial.print("3. zazh2 = ");   // выводим состояние в сериал
      Serial.println(digitalRead(zazh2));   // выводим состояние в сериал
      Serial.print("4. sceplenie = ");   // выводим состояние в сериал
      Serial.println(digitalRead(sceplenie));   // выводим состояние в сериал
      Serial.print("5. obmanka = ");   // выводим состояние в сериал
      Serial.println(digitalRead(obmanka));   // выводим состояние в сериал
      Serial.print("6. ruchnik = ");   // выводим состояние в сериал
      Serial.println(digitalRead(ruchnik));   // выводим состояние в сериал
      Serial.print("7. lamp_zar = ");   // выводим состояние в сериал
      Serial.println(digitalRead(lamp_zar));   // выводим состояние в сериал
      Serial.print("8. signall = ");   // выводим состояние в сериал
      Serial.println(digitalRead(signall));   // выводим состояние в сериал
      Serial.println("!!!!//Stop  Auto//!!!!"); // для красивой строчки
      flag = 0;
    }

    else if (val == "Info") { // если поступило Info
      Serial.print ("Commanda ("); //Просто подтверждаем
      Serial.print(val);      // сообщаем об этом в терминал (если нужно)
      Serial.println(")"); // для красивой строчки
      val = ""; //очищаем сообщение
      Serial.print("1. starter = ");   // выводим состояние в сериал
      Serial.println(digitalRead(starter));   // выводим состояние в сериал
      Serial.print("2. zazh1 = ");   // выводим состояние в сериал
      Serial.println(digitalRead(zazh1));   // выводим состояние в сериал
      Serial.print("3. zazh2 = ");   // выводим состояние в сериал
      Serial.println(digitalRead(zazh2));   // выводим состояние в сериал
      Serial.print("4. sceplenie = ");   // выводим состояние в сериал
      Serial.println(digitalRead(sceplenie));   // выводим состояние в сериал
      Serial.print("5. obmanka = ");   // выводим состояние в сериал
      Serial.println(digitalRead(obmanka));   // выводим состояние в сериал
      Serial.print("6. ruchnik = ");   // выводим состояние в сериал
      Serial.println(digitalRead(ruchnik));   // выводим состояние в сериал
      Serial.print("7. lamp_zar = ");   // выводим состояние в сериал
      Serial.println(digitalRead(lamp_zar));   // выводим состояние в сериал
      Serial.print("8. signall = ");   // выводим состояние в сериал
      Serial.println(digitalRead(signall));   // выводим состояние в сериал
    }

    else if (val == "On" || flag == 1 ) { // Запуск
      Serial.print ("Start ("); //Просто подтверждаем
      Serial.print(val);      // сообщаем об этом в терминал (если нужно)
      Serial.println(")"); // для красивой строчки
      val = ""; //очищаем буфер сообщения
      Serial.println("!!!!Start Auto!!!!"); // для красивой строчки
      if (digitalRead(lamp_zar) == LOW  && digitalRead(ruchnik) == LOW) {
        Serial.println("**************** Razreshaem start DVS  *************");   // выводим состояние
        digitalWrite(obmanka, LOW); // вкл обманку
        delay(2000);
        digitalWrite(zazh1, LOW); // вкл заж 1
        digitalWrite(zazh2, LOW); // вкл заж 2
        digitalWrite(sceplenie, LOW); // вкл сцепление
        delay(3000); // ждем 3 сек для бензонасоса
        for (int z = 0; z < 1; z++) { //Число попыток запуска ДВС
          if (digitalRead(lamp_zar) == HIGH || digitalRead(ruchnik) == HIGH) break; // проверяем лампу заряда и ручник, если че вылетаем из цикла  ()
          
          Serial.print("**************** Cikl zapyska startera #");   // выводим надпись
          Serial.print(z);   // выводим номер попытки
          Serial.println(" **************** ");   // выводим надпись
          digitalWrite(sceplenie, LOW); // выжимаем сцепление
          Serial.print("Sostoyanie sceplenye :");  // выводим надпись
          Serial.println(digitalRead(sceplenie));   // выводим состояние педпли сцепления
          digitalWrite(starter, HIGH); // врубаем стартер
          Serial.print(". Starter = ");   // выводим состояние реле стартера в сериал порт
          Serial.println(digitalRead(starter));   // выводим состояние
          for (int i = 0; i < 3; i++) { //Количество секунд прокрутки стартера
            delay(1000); // задержка в 1 сек
            if (digitalRead(lamp_zar) == HIGH || digitalRead(ruchnik) == HIGH) break; // проверяем лампу заряда и ручник и если че вылетаем из цикла
          }
          Serial.print("**************** Cikl ostanovki startera #");   // выводим надпись
          Serial.print(z);   // выводим состояние
          Serial.println(" **************** ");   // выводим состояние
          digitalWrite(starter, LOW); // останавливаем стартер
          Serial.print(". Starter = ");   // выводим состояние реле стартера в сериал порт
          Serial.println(digitalRead(starter));   // выводим состояние
          digitalWrite(sceplenie, HIGH); //отпускаем педаль сцепления
          Serial.print(". Sceplenye = ");   // выводим состояние реле сцепления в сериал порт
          Serial.println(digitalRead(sceplenie));   // выводим состояние
          flag = 0;
          flag2 = 0;
          delay   (10000); // задержка между попытками 
        }
      }
    }


    else {
      Serial.print ("Comand ("); //Просто подтверждаем
      Serial.print(val);      // сообщаем об этом в терминал (если нужно)
      Serial.println(") ne vipolnima"); // для красивой строчки
      val = ""; Serial.println("No comand");
    }
  }

}

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Чего в сериал выводит?

Virusmc
Offline
Зарегистрирован: 22.11.2020

В сериал должна выводиться информация в момент запуска двигателя, не особо нужна эта функция, писал друг

b707
Offline
Зарегистрирован: 26.05.2017

Virusmc пишет:

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

это автофорум? - свечи давно менял?

 

Странно - вроде написано код автозапуска - а 90% строчек - вывод в Сериал всякой лабуды.

b707
Offline
Зарегистрирован: 26.05.2017

а код, по-моему, полный бред...

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

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

Аднака, сигналку нада покупать. С автозапуском. 

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

Автор, найди в сети человека по нику Martinhol, он на этом собаку съел. Возьми готовое, хоть там и тоже код не ахти, но хоть опробован

bizzon
Offline
Зарегистрирован: 29.03.2016

Контролировать запуск по лампе заряда- та ещё хрень. Обороты чуть упали- она и моргнула. Сначала надо бы мотор и генератор в порядок привести. Что за автомобиль? Да ещё с механикой?! Тьфу на вас.