Помощь при обработке кнопки

danir1998
Offline
Зарегистрирован: 15.06.2016

Допустим есть кнопка подключенный на 18 пин Меги, есть так же массив чисел 8x8, нужно при нажатии на кнопку каждый элемент массива прибавить единицу.

 

buttonState1 = digitalRead(buttonPin);
 
  if (buttonState1 == HIGH) {   


  for(byte i = 0; i < COLS; i++){     
    for(byte j = 0; j < ROWS; j++){    
       kpdNote[i][j] = kpdNote[i][j] + 0x01;
       
       Serial.print("\t");
       Serial.print (kpdNote[i][j] );
    }  
    Serial.println();
  }
   
  }

 

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

 

Помогите пожалуйста в чем беда???))

T.Rook
Offline
Зарегистрирован: 05.03.2016

Админы подчистили дубли - СПСИБО!

Повторюсь:

danir1998 пишет:

Помогите пожалуйста в чем беда???))

Нажали кнопку, код 6-14 отработал.  Что будет, если кнопка еще нажата, а код опять пришел на 3 строку? Есть контроль от повторной отработки этого куска кода при нажатой долгое время кнопки?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Введите флаг состояния кнопки. Изначально равен 0. Если кнопка нажимается, флаг переводится в состояние 1. Есои состояние 1, то обработать массив и установить состояние 2. Если состояние 2 и кнопка отпускается, состояние переводится в исходное (обнуляется).

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Дребезжит поди кнопка-то. Подавите дребезг и будет Вас счастье:)

http://www.eng.utah.edu/~cs5780/debouncing.pdf