В этом эксперименте мы делаем из тактовой кнопки триггер, борясь с «дребезгом».
define BUTTON_PIN 3
#define LED_PIN 13
boolean buttonWasUp = true ; // была ли кнопка отпущена?
boolean ledEnabled = false ; // включен ли свет?
void setup( )
{
pinMode(LED_PIN, OUTPUT) ;
pinMode(BUTTON_PIN, INPUT_PULLUP) ;
}
void loop( )
{
// определить момент «клика» несколько сложнее, чем факт того,
// что кнопка сейчас просто нажата. Для определения клика мы
// сначала понимаем, отпущена ли кнопка прямо сейчас...
boolean buttonIsUp = digitalRead(BUTTON_PIN) ;
// ...если «кнопка была отпущена и (&&) не отпущена сейчас»...
if (buttonWasUp && !buttonIsUp) {
// ...может это «клик», а может и ложный сигнал (дребезг),
// возникающий в момент замыкания/размыкания пластин кнопки,
// поэтому даём кнопке полностью «успокоиться»...
delay( 10 ) ;
// ...и считываем сигнал снова
buttonIsUp = digitalRead(BUTTON_PIN) ;
if ( !buttonIsUp) { // если она всё ещё нажата...
// ...это клик! Переворачиваем сигнал светодиода
ledEnabled = !ledEnabled;
digitalWrite(LED_PIN, ledEnabled) ;
}
}
// запоминаем последнее состояние кнопки для новой итерации
buttonWasUp = buttonIsUp;
}
buttonWasUp | buttonIsUp | !buttonIsUp | buttonWasUp && !buttonIsUp |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
wiki.amperka.ru