Автозапуск авто на Arduino
- Войдите на сайт для отправки комментариев
Ср, 03/11/2021 - 18:47
Всем привет, помогите разобраться с кодом, автомобиль запускается и через некоторое время глохнет, может заглохнуть через минуту а может и через 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");
}
}
}
Чего в сериал выводит?
В сериал должна выводиться информация в момент запуска двигателя, не особо нужна эта функция, писал друг
автомобиль запускается и через некоторое время глохнет, может заглохнуть через минуту а может и через 20 минут, в чем может быть проблема?
это автофорум? - свечи давно менял?
Странно - вроде написано код автозапуска - а 90% строчек - вывод в Сериал всякой лабуды.
а код, по-моему, полный бред...
Если я правильно вижу - оно будет пытаться запускать мотор бесконечно, даже когда он уже давно будет работать, никакого контроля нет вообще
Аднака, сигналку нада покупать. С автозапуском.
Автор, найди в сети человека по нику Martinhol, он на этом собаку съел. Возьми готовое, хоть там и тоже код не ахти, но хоть опробован
Контролировать запуск по лампе заряда- та ещё хрень. Обороты чуть упали- она и моргнула. Сначала надо бы мотор и генератор в порядок привести. Что за автомобиль? Да ещё с механикой?! Тьфу на вас.