В #50 сообщении диод нужен для быстрой перезарядки конденсатора при отпускании кнопки. Вообще микросхема для микроконтроллера ненужна. Она выполняет роль триггера, а большинство цифровых входов имеют встроенный. R2 защищает кнопку от нагара контактов. Я б поставил 100 Ом и не ставил диод - он почти не влияет на работу схемы.
#define buttonPin 2 // номер входа, подключенный к кнопке
#define ledPin 13 // номер выхода светодиода
// переменные
boolean buttonState = 0; // переменная для хранения состояния кнопки
byte bState=0; // переменная для хранения дребезга
void setup() {
// инициализируем пин, подключенный к светодиоду, как выход
pinMode(ledPin, OUTPUT);
// инициализируем пин, подключенный к кнопке, как вход
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);
//Serial.begin(9600);
}
void loop(){
// считываем значения с входа кнопки
if (digitalRead(buttonPin) == LOW) {
bState++;
if (bState==3) buttonState = HIGH;
}
else {
buttonState = LOW;
bState = 0;
}
digitalWrite(ledPin, buttonState);
//Serial.print("States ");
//Serial.println(buttonState);
}
С этого и начали. Вы не знаете сколько в обще случае loop() выполняется, поэтому решение в одном случае может работать нормально, а в другом нет. В чем смысл игнорировать millis и писать такое для меня загадка ) как впрочем и подключение целых микросхем с обвязкой ради подавления дребезга (не, ну если в космос запускать или кнопки в агрессивной среде - хз).
Вы не знаете сколько в обще случае loop() выполняется не имеет значения
#define buttonPin 2 // номер входа, подключенный к кнопке
#define ledPin 13 // номер выхода светодиода
// переменные
boolean buttonState = 0; // переменная для хранения состояния кнопки
byte bState = 0; // переменная для хранения дребезга
void setup() {
// инициализируем пин, подключенный к светодиоду, как выход
pinMode(ledPin, OUTPUT);
// инициализируем пин, подключенный к кнопке, как вход
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);
}
void loop(){
// считываем значения с входа кнопки
if (digitalRead(buttonPin) == LOW) {
if (bState==0) { buttonState =! buttonState; } // действие buttonState=0;
bState = 1;
}
else {
if (bState!=0) bState++;
if (bState==4) { bState=0; } // действие buttonState-1;
}
digitalWrite(ledPin, buttonState);
}
Привязываться к времени выполнения loop вообще то дурной тон. Программа должна быть универсальной. Сегодня она на 16 мгц, а завтра на 256 гкц-ах и чё? Имею одно ус-во с лупом в 1 сек, но и с 1 мкс она тоже будет работать.
ээээээ да вы, оказывается, сами не понимаете, как этот код работает? А мы-то с вами как со взрослым...
Длительность оборота луп имеет значение в этом коде - именно она и определяет время " дребезга" в этом алгоритме. Если вы этого не видите, то дальше с вами и говорить не о чем.
Знакомый рассказывал случай на экскурсии, как бы не в Сухумском обезьяньем питомнике, что ли. В общем, они на лестнице, а внизу обезьяны. И вот девки говорят, смотри, смотри... А внизу такая картина: одна обезьяна чешет другую, самца. А взади третья, кидает камешки в него. Ну тот не поймёт откуда, почему, оглядывается... Когда эта взяла камешек побольше и видать очень больно попала в обезьяна. Тот увидел, понял кто это, погнался, догнал, поставил в соответствующую позу и долбит... Девки сразу переключились на другую тему.)
Кстати о дребезге, смотрим тут, кнопку держим до погасания светодиода...
далее снимаем маркировку со строки 2 и повторяем...
эмулятор показывает минимальное время задержки на дребезг 3 миллисекунды
...удивительное рядом но оно запрещено...
Кстати о дребезге, смотрим тут, кнопку держим до погасания светодиода...
далее снимаем маркировку со строки 2 и повторяем...
эмулятор показывает минимальное время задержки на дребезг 3 миллисекунды
...удивительное рядом но оно запрещено...
Как выясняется, по умолчанию, в Wokwi есть имитация дребезга.
Цитата:
When you press physical pushbutton, the circuit opens and closes tens or hundreds of times. This phenomenon is called Bouncing. This happens because of the mechanical nature of pushbuttons: when the metal contacts come together, there's a brief period when the contact isn't perfect, which causes a series of rapid open/close transitions.
Wokwi simulates button bouncing by default. You can disable bouncing simulation by setting the "bounce" attr to "0"
я программно проверяю на дребезг через 50-100 мкс
это не микро, а миллисекунды.
я программно проверяю на дребезг через 50-100 мкс
это не микро, а миллисекунды.
да-да, спасибо.
В #50 сообщении диод нужен для быстрой перезарядки конденсатора при отпускании кнопки. Вообще микросхема для микроконтроллера ненужна. Она выполняет роль триггера, а большинство цифровых входов имеют встроенный. R2 защищает кнопку от нагара контактов. Я б поставил 100 Ом и не ставил диод - он почти не влияет на работу схемы.
это не микро, а миллисекунды.
Срочно зовите старого дядьку онкЕля ! Он ее в свою книгу мести запишет :)
Зовите крутых). https://www.youtube.com/watch?v=zNCrBJZPIm4
это не микро, а миллисекунды.
Срочно зовите старого дядьку онкЕля ! Он ее в свою книгу мести запишет :)
https://www.youtube.com/watch?v=I5mNfhsimfA
Со 2 минуты 58 секунды)))
Всем привет )) Искал решения дребезга кнопки, наткнулся на эту тему ))
Хочу показать мой код решения. Громоздкий вроде код, но мне кажется довольно рабочий
readD7 - это флаг, который поднимаем в процессе для разрешения чтения данных с датчика/кнопки
Не смущает название темы? :)
С этого и начали. Вы не знаете сколько в обще случае loop() выполняется, поэтому решение в одном случае может работать нормально, а в другом нет. В чем смысл игнорировать millis и писать такое для меня загадка ) как впрочем и подключение целых микросхем с обвязкой ради подавления дребезга (не, ну если в космос запускать или кнопки в агрессивной среде - хз).
Вы не знаете сколько в обще случае loop() выполняется не имеет значения
Привязываться к времени выполнения loop вообще то дурной тон. Программа должна быть универсальной. Сегодня она на 16 мгц, а завтра на 256 гкц-ах и чё? Имею одно ус-во с лупом в 1 сек, но и с 1 мкс она тоже будет работать.
не имеет значения
ээээээ да вы, оказывается, сами не понимаете, как этот код работает? А мы-то с вами как со взрослым...
Длительность оборота луп имеет значение в этом коде - именно она и определяет время " дребезга" в этом алгоритме. Если вы этого не видите, то дальше с вами и говорить не о чем.
https://www.youtube.com/watch?v=I5mNfhsimfA
Со 2 минуты 58 секунды)))
стало интересно, как будет наказывать, как петух в курятнике?
Знакомый рассказывал случай на экскурсии, как бы не в Сухумском обезьяньем питомнике, что ли. В общем, они на лестнице, а внизу обезьяны. И вот девки говорят, смотри, смотри... А внизу такая картина: одна обезьяна чешет другую, самца. А взади третья, кидает камешки в него. Ну тот не поймёт откуда, почему, оглядывается... Когда эта взяла камешек побольше и видать очень больно попала в обезьяна. Тот увидел, понял кто это, погнался, догнал, поставил в соответствующую позу и долбит... Девки сразу переключились на другую тему.)
Кстати о дребезге, смотрим тут, кнопку держим до погасания светодиода...
далее снимаем маркировку со строки 2 и повторяем...
эмулятор показывает минимальное время задержки на дребезг 3 миллисекунды
...удивительное рядом но оно запрещено...
https://wokwi.com/projects/331442316603556435
Кстати о дребезге, смотрим тут, кнопку держим до погасания светодиода...
далее снимаем маркировку со строки 2 и повторяем...
эмулятор показывает минимальное время задержки на дребезг 3 миллисекунды
...удивительное рядом но оно запрещено...
https://wokwi.com/projects/331442316603556435
Как выясняется, по умолчанию, в Wokwi есть имитация дребезга.
Поэтому и срабатывает второй раз на отпускании.
в реальной кнопке время дребезга поболее будет, пробегали тут осциллограммы когда-то