Эксперимент 5_3. Эмуляция кнопки с фиксацией

Аппаратный способ устранения эффекта дребезга заключается в следующем:
параллельно кнопке включают конденсатор, сглаживающий скачки напряжения и делающий процесс переключения более плавным. Обычно номинал конденсатора делают не слишком большим, порядка 0.1 мкФ (микрофарад), иначе он будет заряжаться слишком долго и время переключения кнопки станет заметно больше.
Сглаживающий конденсатор заряжается до уровня HIGH почти мгновенно, а во время дребезга контактов разряжается, повышая уровень напряжения в цепи. Таким образом скачки напряжения значительно уменьшаются.
Теперь кнопка будет работать правильно, но схема все еще нуждается в доработке. Предположим, что во время написания программы, мы ошиблись и случайно определили вывод контроллера не как INPUT, а как OUTPUT. В этом случае через ножку контроллера потечет ток короткого замыкания, превышающий предельно допустимый и контроллер выйдет из строя.
Чтобы защитить контроллер, последовательно с кнопкой добавим токоограничительный резистор 1 кОм.

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Соберем эту схему: Рисунок 2. Монтажная схема эксперимента

Программный код эксперимента

Exp5_2
  1. // инициализация констант
  2.  
  3. #define LED 2 //определение константы LED с номером пина 2
  4. #define BUTTON 12 //определение константы BUTTON с номером пина 12
  5.  
  6. // инициализация переменных
  7. int switchState = 0; // актуальный статус кнопки
  8. int oldSwitchState = 0; // статус последней проверки кнопки
  9. boolean lightsOn = false; // статус светодиода on = true или off = false
  10.  
  11. void setup() {
  12. pinMode(BUTTON, INPUT);
  13. pinMode(LED, OUTPUT);
  14. }
  15.  
  16. void loop() {
  17. switchState = digitalRead(BUTTON);
  18. if (switchState != oldSwitchState) {
  19. oldSwitchState = switchState;
  20. if (switchState == HIGH) {
  21. lightsOn = !lightsOn;
  22. }
  23. }
  24. if(lightsOn) {
  25. digitalWrite(LED, HIGH); // зажигаем светодиод
  26. }
  27. else {
  28. digitalWrite(LED, LOW); // гасим светодиод
  29. }
  30. }

В соответствие инструкции, дополним схему конденсатором С1 и резистором R3.
Программный код остается без изменений.
Запустим программу на выполнение, и на этот раз все работает как и задумано.