Таймер периодического включения нагрузки

Нет ответов
nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Попробывал создать код для управления клапаном.Пока не нажата кнопка -клапан закрыт. При нажатии и удержании кнопки клапан должен оставаться закрытым какое-то время(3 сек в примере)и открыватьсяна 1 сек. И так пока нажата кнопка.Решил обойтись без Delay.Попробывал переделать коды из разных примеров и вот что у меня получилось:

/* если кнопка нажата - клапан закрыт 3 сек,открывается на 1 сек
*и так пока нажата кнопка.
*если отпустить кнопку-клапан остается закрытым
*/
 long previousMillis = 0; 
 int val=0; //переменная времени когда клапан закрыт

 void setup()    
 { 
        
     pinMode(6, OUTPUT); //выход на клапан        
              
 } 

 void loop() 

 { 
     if(digitalRead(1)==HIGH)//если кнопка нажата ... 
     { 
         
      if (millis() -previousMillis >1000) //время когда клапан  включен 
     { 
        previousMillis = millis();     
        val++;//
       digitalWrite(6,LOW); 
     } 
     } 
     else //если убрать этот блок то нажатия на кнопку не сбрасывают время когда клапан выключен
    { // и если кнопка окажется нажатой во время val>=3, клапан откроется на время открытия(пока нажата кнопка)
       val=0; //обнуляем переменную
     } 
        
     if(val>=3) //время когда клапан выключен
     { 
       digitalWrite(6,HIGH);
       val=0;//обнуляем переменную
      
     }
    if(digitalRead(1)==LOW)//если кнопка не нажата ... 
     {   digitalWrite(6,LOW); //выключаем клапан
     }        
 } 
 

 

код работает как мне и надо.Но может можно это сделать как-то попроще?Можно ли это сделать с SimpleTimer? Прошу сильно не пинать. Это мои первые шаги .