Показано с 1 по 10 из 152

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Новичок
    Регистрация
    09.04.2014
    Сообщений
    19
    Вес репутации
    131

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Добрый день.
    Написал свой код запуска двигателя, писал первый раз, может кто нибудь проверить? самому проверить пока не на чем, завтра буду травить платку под реле и ардуину.
    Код:
    int rele_1 = 2; //зажигание 
    int rele_2 = 3; //стартер
    int rele_3 = 4; //габариты
    int rele_4 = 5; //ближний свет
    int rele_5 = 6; //подсветка салона
    const int motor = 7; //определение работы двс
    const int LedPin = 8; //подсветка глазка
    const int LedButtonPin = 9; //подсветка кнопки
    const int buttonPin = 10; //кнопка 
    
    long lastDebounceTime = 0; // the last time the output pin was toggled
    long debounceDelay = 30; // the debounce time; increase if the output flickers
    long longDelay = 1000; //время длинного нажатия
    
    void setup() //конфигурирование системы после сброса
    { 
      char i;  
      
      pinMode(rele_1, OUTPUT);  
      pinMode(rele_2, OUTPUT);
      pinMode(rele_3, OUTPUT);
      pinMode(rele_4, OUTPUT);
      pinMode(rele_5, OUTPUT);
      pinMode(motor, INPUT);
      pinMode(LedPin, OUTPUT);
      pinMode(LedButtonPin, OUTPUT);
      pinMode(buttonPin, INPUT);
      
      //начальное положение реле
      setKeyState1();
    }
      
      //Состояние 1 все выключено
    void setKeyState1(){
      delay(25);
      digitalWrite(rele_1, LOW); 
      delay(25);
      digitalWrite(rele_2, LOW);  
      delay(25);
      digitalWrite(rele_3, LOW);  
      delay(25);
      digitalWrite(rele_4, LOW);  
      delay(25);
      digitalWrite(rele_5, LOW);
    }  
      //Состояние 2 зажигание
    void setKeyState2(){
      delay(25);
      digitalWrite(rele_1, HIGH); 
      delay(25);
      digitalWrite(rele_2, LOW);  
      delay(25);
      digitalWrite(rele_4, LOW);  
      delay(25);
      digitalWrite(rele_5, LOW);
    }
      //Состояние 3 зажигание и стартер
    void setKeyState3(){
      delay(25);
      digitalWrite(rele_1, HIGH); 
      delay(25);
      digitalWrite(rele_2, HIGH);  
      delay(25);
      digitalWrite(rele_4, LOW);  
      delay(25);
      digitalWrite(rele_5, LOW);
    }
      //Состояние 4 зажигание, подсветка, ближний
    void setKeyState4(){
     delay(25);
      digitalWrite(rele_1, HIGH); 
      delay(25);
      digitalWrite(rele_2, LOW);  
      delay(25);
      digitalWrite(rele_4, HIGH);  
      delay(25);
      digitalWrite(rele_5, HIGH);
      }
      //Состояние 5 зажигание, подсветка
    void setKeyState5(){
     delay(25);
      digitalWrite(rele_1, HIGH); 
      delay(25);
      digitalWrite(rele_2, LOW);  
      delay(25);
      digitalWrite(rele_4, LOW);  
      delay(25);
      digitalWrite(rele_5, HIGH);
      }
      //Автомат состояний
    void changeState(int s){
    int _delay;
    if(s==1){ //поступил сигнал длинного нажатия
    if(digitalRead(7)==HIGH) //если двигатель запущен, то ....
    {
    if(digitalRead(1)==HIGH) //если зажигание вкл, то ....
    {setKeyState1(); //выключаем все
    }
    }else{
    if(digitalRead(1)==HIGH) //если зажигание вкл, то ....
    {setKeyState4(); //Состояние 4 зажигание, подсветка, ближний
    }else{
    setKeyState2(); //Состояние 2 зажигание
    delay(2000);  //Даем подкачать бензонасосу
    setKeyState3(); //Состояние 3 зажигание и стартер
    _delay=millis();
    while(digitalRead(7)==LOW){ //крутим стартер пока не заведемся
    if((millis()-_delay)>3000)break; //но не более 3х сек
    }
    delay(2000);
    if(digitalRead(7)==LOW){ //если не завелись
    setKeyState1();  //Состояние 1 все выключено
    }else{ //если завелись
    setKeyState4(); //Состояние 4 зажигание, подсветка, ближний
    }
    }
    }
    }else{ //поступил сигнал короткого нажатия
    if(digitalRead(7)==HIGH) //если двигатель запущен, то ....
    {
    if(digitalRead(1)==HIGH) //если зажигание вкл, то ....
    {
    if(digitalRead(5)==HIGH) //если ближний вкл, то ....
    {
    setKeyState5(); //Состояние 5 зажигание, подсветка
    }else{
    setKeyState4(); //Состояние 4 зажигание, подсветка, ближний
    }
    }else{
    setKeyState4(); //Состояние 4 зажигание, подсветка, ближний
    }
    }else{
    if(digitalRead(1)==HIGH) //если зажигание вкл, то ....
    {
    setKeyState1(); //Состояние 1 все выключено
    }else{
    setKeyState2(); //Состояние 2 зажигание
    }
    }
    }
    }
    void loop() {
    if(digitalRead(7)==HIGH) //если двигатель запущен, то ....
    {
    delay(25);
    digitalWrite(rele_3, HIGH); //вкл габариты 
    delay(25);
    digitalWrite(LedPin, HIGH); //вкл подсветку глазка
    }
    if(digitalRead(1)==HIGH) //если зажигание вкл, то ....
    {
    delay(25);
    digitalWrite(LedButtonPin, HIGH); //вкл подсветку кнопки
    }
      
     //читаем состояние кнопки
    int reading = digitalRead(buttonPin);
     //сбрасываем таймер кнопки, пока отжата
    if(reading==1)
    {
    lastDebounceTime=millis();
    }else
    {
     //если кнопка нажата и дребезг контактов прекратился, 
    if((millis()-lastDebounceTime)>debounceDelay){
    while(reading==0){
     //то ждем пока отпустят кнопку
    reading = digitalRead(buttonPin);
     //если кнопку держали дольше longDelay
    if((millis()-lastDebounceTime)>longDelay)
     //то шлем в автомат 1
    changeState(1);
    else //иначе 0
    changeState(0);
    }
    }
    }
    }
    Логика работы на блок схеме. Постоянная проверка зажигания, т.к. движку мог завести в автозапуска. В планах собрать KeyLess систему со своей логикой работы))
    Габариты ВКЛ только когда работает двигатель, светодиоды отображают вкл зажигания и работу двигателя, пока всякие красивости делать не умеют. Двигатель запускается только в автоматическом режиме т.к. замок снимать не планирую, только блокирующий язычек выну.

    Нажмите на изображение для увеличения. 

Название:	Снимок.PNG 
Просмотров:	1897 
Размер:	31.7 Кб 
ID:	18015
    Последний раз редактировалось Polygalov; 01.09.2014 в 21:35.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •