Установки значений таймера по кнопкам

ic746
Offline
Зарегистрирован: 04.12.2016

Делаю таймер с установками значений по нажатию кнопок.

Нажата кнопка на 4 пине таймер принимает значение 20.

Нажата кнопка на 5 пине таймер принимает значение 30.

Если обе кнопки не нажаты таймер равен 40.

Сделал набросок кода с использованием GOTO (синтаксис не причёсан) но GOTO говорят дурной тон. Чувствую надо прерывания по кнопкам использовать. Но что  то не получается. Подскажите как лучше это сделать?

#include <Rotary.h>
#include <Wire.h>
#include <LiquidCrystal.h>


#define TIMER 40


int flag=0;  // переменная для отслеживания перепада на пинах

//проверка состояния пинов и присвоение значения TIMER
if(digitalRead(4)==HIGH
TIMER=20;

if(digitalRead(5)==HIGH
TIMER=30;



BEGIN........
-------------
//код программы обработка энкодера вывод на LCD и.д.


-------------

 if(digitalRead(4)==HIGH&&flag==0)//если кнопка нажата   
     // и перемення flag равна 0 , то ... 
     { 
       TIMER=20;   
       flag=1;
       goto begin;		 
         
        //это нужно для того что бы с каждым нажатием кнопки 
        //происходило только одно действие 
        // плюс защита от "дребезга"  100% 
          
        
     }   
      

if(digitalRead(5)==HIGH&&flag==0)//если кнопка нажата   
     // и перемення flag равна 0 , то ... 
     { 
       TIMER=30;   
       flag=1;
       goto begin; 
         
        //это нужно для того что бы с каждым нажатием кнопки 
        //происходило только одно действие 
        // плюс защита от "дребезга"  100% 
          
        
     }  
      

 

vlad072
Offline
Зарегистрирован: 01.08.2017

1. Стока 06. Зачем TIMER обьявили макроопределением? У вас это переменная вообще то по идее.

2 Строки 20, 21 WTF??

3 "==HIGH&&flag==" WTF??

4. Строки 32, 37 куда переходим? Где begin???

5++.....

У вас это вообще компилируется? Это Arduino IDE код??

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а если обе нажаты?