подавление дребезга без делай и милис

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Irinka пишет:

 я программно проверяю на дребезг через 50-100 мкс

if (digitalRead(buttonPin)){
  delay(100);
  if (digitalRead(buttonPin)){
  нажата 
  }
}

это не микро, а миллисекунды. 

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

DetSimen пишет:

Irinka пишет:

 я программно проверяю на дребезг через 50-100 мкс

if (digitalRead(buttonPin)){
  delay(100);
  if (digitalRead(buttonPin)){
  нажата 
  }
}

это не микро, а миллисекунды. 

да-да, спасибо.

nik182
Offline
Зарегистрирован: 04.05.2015

В #50 сообщении диод нужен для быстрой перезарядки конденсатора при отпускании кнопки. Вообще микросхема для микроконтроллера ненужна. Она выполняет роль триггера, а большинство цифровых входов имеют встроенный. R2 защищает кнопку от нагара контактов. Я б поставил 100 Ом и не ставил диод - он почти не влияет на работу схемы.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

DetSimen пишет:

это не микро, а миллисекунды. 

Срочно зовите старого дядьку онкЕля !  Он ее в свою книгу мести запишет :)

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

Зовите крутых). https://www.youtube.com/watch?v=zNCrBJZPIm4

Irinka
Irinka аватар
Offline
Зарегистрирован: 28.06.2017

brokly пишет:

DetSimen пишет:

это не микро, а миллисекунды. 

Срочно зовите старого дядьку онкЕля !  Он ее в свою книгу мести запишет :)

 

https://www.youtube.com/watch?v=I5mNfhsimfA

Со 2 минуты  58 секунды)))

Dr_grizzly
Dr_grizzly аватар
Offline
Зарегистрирован: 07.12.2015

Всем привет )) Искал решения дребезга кнопки, наткнулся на эту тему ))

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

if ((digitalRead(Dt7Pin) == HIGH) && (stD7==false) && (readD7==true)) {
  stD7=true; // включили счетчик
  timestartD7=millis(); //  запоминаем когда было первое нажатие
}

if (stD7==true) {
  if (digitalRead(Dt7Pin)==HIGH) { // пока есть сигнал от кнопки 
   timestopD7=millis(); // записываем текущее значение таймера    
  }else {
    D7_ON=false;
    stD7=false; // отключаем счетчик
    timestopD7=millis();
    timestartD7=millis();
  }  
}

if ((stD7==true) && (timestopD7-timestartD7>=timeD7_on)) {
  D7_ON=true;// полезное действие.
  stD7=false;
  readD7=false;
  timestopD7=millis();
  timestartD7=millis();  
}

if (D7_ON) 
{
........ // что-то делаем когда нажали кнопку
}

readD7 - это флаг, который поднимаем в процессе для разрешения чтения данных с датчика/кнопки

Doooh
Offline
Зарегистрирован: 10.08.2017

Не смущает название темы? :)