Непонятки с Serial.println
- Войдите на сайт для отправки комментариев
Доброго времени суток, друзья!
Будьте так любезны, поясните следующее явление:
Имеем простенький скетч:
#define BTN 2 #define LED 3 #define SS_PIN 10 byte count = 0; // Счетчик нажатий кнопки byte last_BTN = 0; // Последнее положение кнопки byte curr_BTN = 0; // Текущее положение кнопки void setup() { pinMode(BTN,INPUT_PULLUP); pinMode(LED,OUTPUT); Serial.begin(9600); } void loop() { curr_BTN = !digitalRead(BTN); // Считываем положение кнопки: 0 - не нажата, 1 - нажата if (curr_BTN > last_BTN) { // Если кнопка нажата digitalWrite(LED,HIGH); // Включаем светодиод count++; // Прибавляем одно нажатие last_BTN = 1; // Устанавливаем положение кнопки в "НАЖАТО" } if (curr_BTN < last_BTN) { // Если кнопка отжата digitalWrite(LED,LOW); // Выключаем светодиод last_BTN = 0; // Устанавливаем положение кнопки в "НЕ НАЖАТО" } Serial.println(count); // Выводим кол-во нажатий }
В таком виде всё работает прекрасно, нажатия считаются правильно, но напрягал непрерывный вывод в serial. Поэтому я взял и строчку Serial.println(count); засунул в первый if, сразу после строчки count++. И тут всё стало работать неправильно.
Если в первом случае 10 нажатий давало в мониторе 10, то после переноса вывода 10 нажатий кнопки стали выводить в итоге в монитор 15-16. Причем кол-во нажатий может прибавиться при отпускании кнопки или дать сразу +3 за одно нажатие
Так вот, вопрос: как это связано с положением строки Serial.println()? Почему если она вне условия if, то всё работает правильно, а под if-ом появляются ложные срабатывания нажатий?
Гуглите по словам "дребезг кнопки". Проблема именно в этом. Когда println так, как сейчас, он вызывает задержку, а засунув туда - Вы её убираете. С дребезгом нужно бороться, разумеется не с помощью println, а другими средствами.
добавить паралельно кнопке конденсатор на 220нФ. вставить delay(50); Думаю, проблемы уйдут.
Гуглите по словам "дребезг кнопки". Проблема именно в этом. Когда println так, как сейчас, он вызывает задержку, а засунув туда - Вы её убираете. С дребезгом нужно бороться, разумеется не с помощью println, а другими средствами.
Про дребезг вкурсе, но у меня же пин кнопки в режиме INPET_PULLUP, в таком случае он же с подтяжкой через резистор идёт и дребегка быть не должно
в таком случае он же с подтяжкой через резистор идёт и дребегка быть не должно
Почему? Как вы это сами для себя представляете?
Почему? Как вы это сами для себя представляете?
честно говоря, я без понятия, просто вот ему поверил на слово:
https://youtu.be/3UwgMAdV4xQ?t=357
ой, зря вы это написали :)
запомните, к автору видео тут крайне негативное отношение.
и это, верить никому нельзя... мне можно :)
ой, зря вы это написали :)
запомните, к автору видео тут крайне негативное отношение.
и это, верить никому нельзя... мне можно :)
ну я тут новенький, поэтому про внутренние терки не вкурсе )
т.е. нет там никакого "встроенного резистора"?
резистор есть, но проблему он не решает.
Резистор не дает входу "болтаться" в воздухе когда контакт разомкнут, ловя случайные помехи, но законному механическому замыканию-размыканию (что и образуется при дребезге контактов) он не препятствует.
Гуглите по словам "дребезг кнопки". Проблема именно в этом. Когда println так, как сейчас, он вызывает задержку, а засунув туда - Вы её убираете. С дребезгом нужно бороться, разумеется не с помощью println, а другими средствами.
Про дребезг вкурсе, но у меня же пин кнопки в режиме INPET_PULLUP, в таком случае он же с подтяжкой через резистор идёт и дребегка быть не должно
тут даже осциллограммы кто-то выгладывал, по дребезгу при таком потключении
Почему? Как вы это сами для себя представляете?
честно говоря, я без понятия, просто вот ему поверил на слово:
https://youtu.be/3UwgMAdV4xQ?t=357
опять Гайвер, всё скидываемся ему на магарыч, столько пользователей сюда привлёк, собирать будет Дет, он не пропьёт, надеюсь )))
По дребезгу кнопок у него в последующих уроках кстати...
Про дребезг вкурсе, но у меня же пин кнопки в режиме INPET_PULLUP, в таком случае он же с подтяжкой через резистор идёт и дребегка быть не должно
Судя по этой фразе - нет, Вы не в курсе про дребезг. гуглите, как я Вам сказал. Например, https://drive.google.com/open?id=0B9r7cRXQ4DU4TVJzQVhOMmtCc00
честно говоря, я без понятия, просто вот ему поверил на слово:
Верить можно только в Бога. Всё остальное нужно понимать. Это видео записано безграмотным человеком.
т.е. нет там никакого "встроенного резистора"?
Почему, есть. Но этот резистор совсем про другое. Он не позволяет пину ловить помехи. К дребезгу он не имеет никакого отношения.
Про дребезг вкурсе, но у меня же пин кнопки в режиме INPET_PULLUP, в таком случае он же с подтяжкой через резистор идёт и дребегка быть не должно
Это в "Песочницу" и Деду, в коллекцию.
Му уже скинулись. Вон сколько ляпов в его говнокоде нашли
и совершенно бесплатно!
Ещё бы исправлял.