Докатись до личных оскорблений? Весьма достойно для российского ученого, хоть и в отставке. А про антидребезг через прерывания я бы, на вашем месте, не вспоминал. Потому что он так и остался в вашем секретном коде (или воображении), а я его сделал и опубликовал. То, что вы не глядя назвали мой способ говнокодом, не делает вам ни малейшей чести. Скорее наоборот.
Ну вообще-то совет освежить в памяти физику - это совет, а совсем не оскорбление. Вы же, когда написали что я ик с уф спутал - не считали свое мнение за оскорбление? Засим свои советы вам заканчиваю, но если будут по -прежнему появляться вредные и (или) безграмотные советы от вашего имени- буду стараться вас поправить.
я поглядел. и увидел, что вы проверяете состояние пина (не изменилось ли) постоянным опросом этого пина. Отсюда и характеристика вашего кода.
Оскорбление это субъективная оценочная характеристика выраженная в уничижительной форме. Вопрос "спутал не спутал" не является оскорблением, а вот слово "балбес" является. За весь трёхтомник нашего общения последних пары недель я вам ни одного грубого слова не сказал. В отличии от. Я не против поправок, если они по делу, а не про меня. Поправляйте и дополняйте.
Давайте подробнее с этого места. А лучше в отдельную тему давайте вынесем. Я опубликую еще раз код, его описание и видео, а вы раскритикуете. Мне вот не понятно чем плох постоянный опрос кнопки в некоторых случаях, когда этот опрос является основным действием программы. Вместо двух digitalRead() с промежутком через delay() или каким то еще вы получаете переменную, в которой всегда хранится устоявшееся положение пина (или нескольких, при необходимости). Я этот метод придумал, благодаря вам в том числе, и уже его использую в реальных устройствах. Код стал проще, прозрачнее и быстрее на опросах. Предложите наконец альтернативу с запуском таймера каждый раз при нажатии кнопки и отлова результата чуть спустя в этом же месте. Сравним чей код лучше. Но не здесь и не сейчас.
устоявшееся положение пина ВСЕГДА хранится в регистровой переменной PIND (для порта D), PINB и PINC для пинов портов В и С. Переменные эти ВСЕГДА доступны через оператор, выполняемый за один такт.
Я под "устоявшимся" имел ввиду тот, что после дребезга. Именно его вычисляет "говнокод" игнорируя все перепады в заданный промежуток времени.
Отнюдь. Если период дребезга больше периода опроса, то говнокод будет давать нам в результате либо "устоявшееся", либо тот же самый дребезг, и мы не можем заранее знать, что в результате дал нам говнокод. А по таймеру- сможем. Так что вкуривайте сабж.
нет, не вычисляет. Но это не делает ваш говнокод кодом.Мы должны из других каких-то данных знать время дребезга и заложить это при определении параметров таймера. При этом мы должны реально понимать, что дребезг только что вынутого из заводской упаковки контакта и дребезг контакта, стоящего на двери калитки при -30 или при влажности под 100% - две большие разницы. Я вам рыбу не обещал, я вам дал удочку. По таймерам, поскольку тут каждый второй вопрос про сервомашинки начинается "дрожит серва", я написал слегка беллетризированный фак по работе с таймерами на примере сервомашинки, почитайте в "что я сделал" про нажиматель кнопок на сервомашинке. Там все про таймеры написано.
В мой код так же закладывается период опроса как и в любой другой (включая аппаратный), в чем разница? Принцип ровно такой же: получили изменение, выждали Nмс, сравнили. Ваша критика не объективна. Понимаю ваше желанине меня обидеть, но это не делает мой код говнокодом. И еще, если бы вы действительно его посмотрели, то не стали бы учить меня работой с портами через PINX. ps: Закладывать более 40мс вообще смысла нет, так как это уже не дребезг а быстрое нажатие.
Это откуда такой постулат? у меня 0.3 с. Принципы совершенно разные. У грамотного кода принцип- один раз прерывание по таймеру проверяет код, а до и после проверки мк спокойно делает свою работу, например шимом рулит. А у говнокода принцип все время проверять. Один раз и все время (при каждой прокрутке) - есть разница? По- моему есть.
Проводил замеры, у меня получалось нажимать кнопку за 35мс. При 150мс некоторые быстрые нажатия пропускаются вовсе, например на клавиатуре. 300мс, как у вас, это уже неспешное нажатие как на кнопку звонка, кнопку с таким дребезгом неплохо бы поменять. До сих пор не понимаю как и зачем вы прерываете шим на время опроса кнопки и, самое главное, как это прерывание на один запуск используете. Расскажите, если не хотите показать. Мой код вполне рабочий, компактный и стабильный. Он весьма полезен для ряда случаев. Например при работе с клавиатурой из одной и более кнопок. Разумеется, если все таймеры заняты под завязку плавным освещением лестницы или управлением фонтанных струй, то такой способ может быть не самый удобным. Но с теми задачами, что я реально сталкиваюсь таймеров требуется не так уж много. Куда чаще приходится бороться с дребезгом и таковым способом это удобно и просто. Если вы этого не видите, то либо не хотите, либо не можете, либо неприязнь ко мне заставляет пожертвовать объективностью. В любом случае ваше мнение на этот счет вызывает сомнение в своей абсолютной истинности.
у меня нет кнопок с таким дребезгом, Зачем вы за меня выдумываете?. У меня 300 мс типовое время антидребезга. Я не прерываю шим на время опроса кнопки. Зачем вы за меня выдумываете? Только как пример говнокода, это вроде удаления гландов через задний проход.
Зачем? Разнять великосветскую беседу? Ветку от флуда почистить разве что не помешало бы. И не только эту.
Напишите уже как вы удалянте гланды. Я вот удаляю успешно, в чем каждый может убедиться скопипастив открытый пример. Только пока сравнить не с чем, разве что поверить на слово. Переделать код под Уну, чтобы было проще?