Ingernirated
@Ingernirated
Романыч

Как реализовать код для срабатывания нефиксированной Кнопки?

Добрый день, подскажите, как написать код, который бы реагировал на нажатие кнопки?

Есть функция, но при нажатии кнопки, получается, что она срабатывает много раз и диоды начинают моргать.
Как сделать так, чтобы после нажатия кнопки выполнение было мгновенным, но при этом через это мгновение ещё раз функция не сработала(не изменила снова 1 в 0), а ожидала, пока отпустят кнопку, а после продолжила следующий круг while и крутила уже while как надо с быстрой частотой, пока снова не нажмут кнопку?
При попытке делать интервал, он получается либо длинным, либо как повезёт.

int main(void)
{
	DDRD = 0xFF;
	PORTD = 0x00;
	DDRB = 0b00000000;
	PORTB = 0b00000001;
	
       char change = 0;
    while(1)
    {
         if(PINB &= 0b00000000) {
                   change++;
                if(change == 2) {
                     change = 0;
                  }
        }

       if(!change) {
          PORTD = 0x00;
        }
        else {
              PORTD = 0xFF;
         }
       _delay_ms(100);
	}
}
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
UPD1. У вас опять игрушечное никогда не выполняющееся условие PINB &= 0b00000000.
Если всё-таки сделаете работающее условие, то должно быть что-то вроде
char oldState = 0, newState = 0
...
oldState = newState;
newState = PINB & 0b00000001;
if (!newState && oldState) {
  // нажатие кнопки зарегистрировано.
  // 1. переключить состояние.
  // 2. Записать что надо в порт.
  // 3. Сделать задержку на дребезг.
}

Естественно, считается, что кнопка замыкается на землю и !newState — это как раз «прижата».
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы