Проблемы с кнопкой запуска авто

Тема в разделе "Arduino & Shields", создана пользователем Mixailovsky, 27 авг 2017.

  1. Mixailovsky

    Mixailovsky Нуб

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

    Код (C++):
    int regim=1; // переменная для выбора нескольких режимов, типа что то выбора меню
    int flag=0; // переменная состояния нажатия или отжатия кнопки

    //-------------- для выполнения какого либо действия по истечению заданого времени после нажатия кнопки ---------------
    int valBut=0; // задаем переменную для счетчика
    long previousMillis=0; // зададим начальное значение счетчика millis
    long TimePush=200; // время нажатия на кнопку 500= 8секунд
    //---------------------------------------------------------------------------------------------------------------------


    //--------------------------------------------------------------------------

    //--------------- задержка для включеня стартера и ACC ---------------------
    int previousMillis2=0;
    int interval2=50;
    //--------------------------------------------------------------------------


    void setup()
    {
    pinMode(6, INPUT); // Вход button (кнопка start-stop)
    pinMode(7, INPUT); // Вход педаль тормоза
    pinMode(8, INPUT); // Вход сигнал генератора
    pinMode(9, OUTPUT); // Выход ACC (Акссесуары)
    pinMode(10, OUTPUT); // Выход ING 1 (зажигание)
    pinMode(11, OUTPUT); // Выход ING 2 (зажигание)
    pinMode(12, OUTPUT); // Выход STARTER (стартер)
    }

    void loop()
    {

    if(digitalRead(6)==HIGH&&flag==0) // если кнопка нажата и переменная flag равна 0, то ....
    {
    if(digitalRead(7)==LOW) // "ТОРМОЗ" НЕ НАЖАТ
    {
    regim++; // это нужно для того что бы с каждым нажатием кнопки
    flag=1; // происходило только одно действие
    // плюс защита от дребезга 100%

    if(regim>3) // ограничим количество режимов
    {
    regim=1; // так как мы используем только одну кнопку,
    // то переключать режимы будем циклично
    }
    }
    //================================ Режим автоматического пуска в одно нажатие ================================================== =
    if(digitalRead(7)==HIGH) // если тормоз нажат
    {
    start(); // включаем автопуск
    regim=0; // обнуляем все режимы(отключаем ручной запуск)
    }
    }
    //================================================== ================================================== ====

    if(digitalRead(6)==LOW&&flag==1) // проверяем нажата ли кнопка если да, то ... см.ниже
    {
    flag=0; // обнуляем переменную "кнопка"
    }

    if(regim==1) // первый режим
    {
    digitalWrite(9,!LOW); // выключаем ACC
    digitalWrite(10,!LOW); // выключаем ING 1
    digitalWrite(11,!LOW); // выключаем ING 2
    digitalWrite(12,!LOW); // выключаем STARTER

    // ВСЕ ВЫКЛЮЧАЕМ
    }


    if(regim==2) // второй режим
    {
    digitalWrite(9,!HIGH); // включаем ACC
    }
    if(regim==3) // третий режим
    {
    digitalWrite(10,!HIGH); // включаем ING 1
    digitalWrite(11,!HIGH); // включаем ING 2
    if(digitalRead(6)==HIGH&&digitalRead(7)==HIGH&&flag==0) // если нажата кнопка, нажат "ТОРМОЗ",
    {
    digitalWrite(12,!HIGH); // включаем стартер
    digitalWrite(9,!LOW); // выключаем ACC
    }

    if(digitalRead(6)==LOW) // проверяем отпушенна ли кнопка
    {
    digitalWrite(12,!LOW); // выключаем STARTER
    digitalWrite(9,!HIGH); // включаем ACC
    }
    }
    }


    //                                     ЗАПУСК В ОДНО КАСАНИЕ КНОПКИ

    void start() // Подпрограмма запуска ДВС
    {
    //if(digitalRead(6)==HIGH) // если кнопка нажата, то ....
    {
    digitalWrite(9,!LOW); // выключаем acc
    digitalWrite(10,!HIGH); // включаем ing 1
    digitalWrite(11,!HIGH); // включаем ing 2
    delay(2000); // задержка перед пуском стартера                                             НУЖНО ЗАМЕНИТЬ НА МИЛЛИС
    digitalWrite(12,!HIGH); // включаем STARTER
    delay(1000); //                                                                             ЗАМЕНИТЬ НА МИЛЛИС
    }

    if(digitalRead(8)==HIGH||digitalRead(7)==LOW) // если есть сигнал с генератор(+12V) или отпущенн тормоз

    {
    digitalWrite(12,!LOW); // выключаем стартер
    // delay(50); // задержка на включение ACC
    digitalWrite(9,!HIGH); // включить ACC

    }
    }
     
     
  2. ostrov

    ostrov Гуру

    Вам в "закажу проект".
     
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    Код (C++):
    digitalWrite(9,!HIGH);
    Шикарно! :D
     
  4. Mixailovsky

    Mixailovsky Нуб

    Ясно,отличный форум....всем спасибо...
     
  5. Tomasina

    Tomasina Сушитель лампочек Модератор

    А что вы ожидали?
    К примеру, я вопроса вообще не понял, как запятые ни расставляй.
     
  6. b707

    b707 Гуру

    Mixailovsky, это которая ваша тема по этому вопросу тут и на Арудуино.ру - четвертая? Вам же уже дали кучу советов - и опять форум виноват? может стоит все же своей головой поработать?
     
  7. Airbus

    Airbus Радиохулиган Модератор

    Так а что тут сложного стартер крутить?Вы дома как свет включаете?Выведите кнопку комутирующую реле стартера на торпеду и жмите если лень ключом тыкать.Видео про угонщиков не смотрели?Зачем Вам какие то коды?Все просто как Апельсин.
     
    Последнее редактирование: 28 авг 2017
  8. ostrov

    ostrov Гуру

    Я предложил решение в первом же ответе. Работа стоит денег, причем большая часть за то чтобы вникнуть в суть просьбы. Практика показывает, что если задание сразу написано непонятно, то придется потратить очень много сил и времени чтобы вытянуть из автора смысл его желаний.
     
  9. Airbus

    Airbus Радиохулиган Модератор

    Дык а смысл?Автозапуск у него работает и от ключа как я понимаю тоже тогда задача проще пареной Репы запаралелить контакты зажигания и стартера с переключателями от торшера включи зажигание и жми крути стартер на здоровье!Вопрос только накуя?Вот хоть убейте не понимаю я смысла использования макроконтроллеров там где можно использовать геркон в крайнем случае реле тем более людьми которые не спецы в программировании.Или думают что магический AVR кристал прочитает их хотелки и все за них сам сделает?
     
    Последнее редактирование: 28 авг 2017