опрос кнопок

fora983
Offline
Зарегистрирован: 10.09.2016

имеются электронные часы. решил собрать новую электроную начинку но не как не могу победить кнопки. не могу организовать разовое значение нажатия кнопки добавление флагов не помогает. проблема в том что нога 4 меняет свое значение.то мы с нее считывает то она общая. код но в нем работает бесконечно пока нажата кнопка.

int flag=0;
void setup() {

Serial.begin(9600);

}

void loop() {

pinMode(2, OUTPUT);
digitalWrite(2, LOW);


pinMode(8,INPUT_PULLUP); // вход с подтяжкой
if (digitalRead(8)==LOW&&flag==0)
     {         flag=1  ;  
     digitalWrite(A5, HIGH);  Serial.println("Alarm");
     } 
if (digitalRead(8)==HIGH&&flag==1)
     {         flag=0; 
     digitalWrite(A5, LOW);
     } 



pinMode(7,INPUT_PULLUP); // вход с подтяжкой
if (digitalRead(7)==LOW&&flag==0)
     {          
     digitalWrite(A4, HIGH); Serial.println("M-");
     } 
if (digitalRead(7)==HIGH&&flag==1)
     {        flag=0;  
     digitalWrite(A4, LOW);
     } 


pinMode(4,INPUT_PULLUP); // вход с подтяжкой
if (digitalRead(4)==LOW&&flag==0)
     {          
     digitalWrite(A3, HIGH); Serial.println("H+");
     } 
if (digitalRead(4)==HIGH&&flag==1)
     {         flag=0; 
     digitalWrite(A3, LOW);
     } 



pinMode(3,INPUT_PULLUP); // вход с подтяжкой
if (digitalRead(3)==HIGH&&flag==0)
     {          
     digitalWrite(A2, HIGH); Serial.println("Set");
     } 
if (digitalRead(3)==HIGH&&flag==1)
     {         flag=0; 
     digitalWrite(A2, LOW);
     } 

pinMode(4, OUTPUT);
digitalWrite(4, LOW);
pinMode(5,INPUT_PULLUP); // вход с подтяжкой
if (digitalRead(5)==LOW&&flag==0)
     {          
     digitalWrite(A1, HIGH); Serial.println("M+");
     } 
if (digitalRead(5)==HIGH&&flag==1)
     {         flag=0; 
     digitalWrite(A1, LOW);
     } 


pinMode(6,INPUT_PULLUP); // вход с подтяжкой
if (digitalRead(6)==LOW&&flag==0)
     {          
     digitalWrite(A0, HIGH); Serial.println("H-");
     } 
if (digitalRead(6)==HIGH&&flag==1)
     {        flag=0;  
     digitalWrite(A0, LOW);
     } 
}

решает проблему 

pinMode(8,INPUT_PULLUP); // вход с подтяжкой
if (digitalRead(8)==LOW&&flag==0)
     {         flag=1  ;  
     digitalWrite(A5, HIGH);  Serial.println("Alarm");
     } 
if (digitalRead(8)==HIGH&&flag==1)
     {         flag=0; 
     digitalWrite(A5, LOW);
     } 

но только если использовать 1 кнопку. если применить для всех 6 то но при передлючении в режим 4 ноги на общий получается бесконечное нажатие кнопки постоянно.

как решить проблему не могу понять.у китайцев собранно было по воттакой схеме если правильно ее прочитал

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

А в чем высший смысл от смены направления 4 пина? Посадите общий провод на землю и радуйтесь - 7 проводов, 6 кнопок. Еще и порт освободите. Или из любви к искусству?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ну тут типа пытались пины сэкономить, по факту нет.
А так да, можно было все эти кнопки(и ещё столько же сверху) повешать на 4 провода. Но видимо у реализатора мозгов не хватило.

Green
Offline
Зарегистрирован: 01.10.2015

Если нужна экономия, то 6 кнопок с диодами вешаются на 3 цифровых пина. Почти как у китайцев.)