Здравствуйте!
Меня зовут Андрей!
Я преподаватель, мы с ребятами пытаемся сделать проект на конкурс кансат.
И у нас возник вопрос о аппаратной борьбе с дребезгом, т.к. проект сложный и лишний раз не хочется усложнять код.
Во вторых есть опасение, что нам не хватит памяти. По условию соревнований мы используем плату ардуино микро.
Что мы пробовали:
1. У Александра есть пример в уроке про кнопку. https://alexgyver.ru/lessons/arduino-buttons/
2. Дребезг контактов и как с ним бороться - https://radioprog.ru/post/251
И еще несколько похожих статей, но везде в общем одно и тоже, только номиналы чуть отличаются.
Схема подключения такая:
https://alexgyver.ru/wp-content/uploads/2020/08/debounce-sch.jpg
Мои номианалы:
R = 10kOm
C = 100nF
Использовался вот такой код.
Результат на макетке с Ардуиной Уно оказался забавным - светодиоды при нажатии загораются, при отпускании тухнут.
Но! Если нажать на одну кнопку то по нажатию на другую срабатывает...
Если убрать конденсатор, то работает как и должно без защит от дребезга.
Я к сожалению еще не разобрался как работает эта схема и не могу понять что нужно менять - номинал резистора или конденсатора, или код ...
Буду благодарен за любую подсказку!
Меня зовут Андрей!
Я преподаватель, мы с ребятами пытаемся сделать проект на конкурс кансат.
И у нас возник вопрос о аппаратной борьбе с дребезгом, т.к. проект сложный и лишний раз не хочется усложнять код.
Во вторых есть опасение, что нам не хватит памяти. По условию соревнований мы используем плату ардуино микро.
Что мы пробовали:
1. У Александра есть пример в уроке про кнопку. https://alexgyver.ru/lessons/arduino-buttons/
2. Дребезг контактов и как с ним бороться - https://radioprog.ru/post/251
И еще несколько похожих статей, но везде в общем одно и тоже, только номиналы чуть отличаются.
Схема подключения такая:
https://alexgyver.ru/wp-content/uploads/2020/08/debounce-sch.jpg
Мои номианалы:
R = 10kOm
C = 100nF
Использовался вот такой код.
C++:
bool flag1 = 0;
bool flag2 = 0;
void setup()
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(8,INPUT_PULLUP);
pinMode(9,INPUT_PULLUP);
}
void loop()
{
//digitalWrite(12,1);
bool btnState1 = !digitalRead(8);
bool btnState2 = !digitalRead(9);
if (btnState1 )
{
flag1 = !flag1;
}
if (btnState2 )
{
flag2 = !flag2;
}
if(flag1)
{
digitalWrite(13,1 );
}
else if(!flag1)
{
digitalWrite(13,0 );
}
if(flag2)
{
digitalWrite(12,1 );
}
else if(!flag2)
{
digitalWrite(12,0 );
}
}
Но! Если нажать на одну кнопку то по нажатию на другую срабатывает...
Если убрать конденсатор, то работает как и должно без защит от дребезга.
Я к сожалению еще не разобрался как работает эта схема и не могу понять что нужно менять - номинал резистора или конденсатора, или код ...
Буду благодарен за любую подсказку!