анти дребезг
- Войдите на сайт для отправки комментариев
Сб, 28/03/2015 - 20:44
Ребята подскажите новичку как это читается правильно
digitalWrite(ledOn,!digitalRead(ledOn))
Установаливае 1 ledOn не равно ledOn
Я правильно понимаю или нет?
Ребята подскажите новичку как это читается правильно
Так скинте полностью код
digitalWrite(ledOn,!digitalRead(ledOn))
установить на пине светодиода инвертированный уровень, считанный с пина светодиода
режим пина светодиода - OUTPUT, его нельзя считать ( читаются пины с режимом INPUT )
SU-27-16, Как нельзя? Да не, прочесть то можно в любом режиме . Читается через регистр PINx, ему всё равно . Есть ещё малоизвестная фишка -можно не только читать из PINx.*, то и писать в него, а меняться будет значение в PORTx.* Причём если писать единицу поверх единицы -то значение в регистре инвертируется. DDR можно тоже и читать и писать.
SU-27-16, Как нельзя? Да не, прочесть то можно в любом режиме . Читается через регистр PINx, ему всё равно . Есть ещё малоизвестная фишка -можно не только читать из PINx.*, то и писать в него, а меняться будет значение в PORTx.* Причём если писать единицу поверх единицы -то значение в регистре инвертируется. DDR можно тоже и читать и писать.
этда....
digitalWrite(ledOn,!digitalRead(ledOn))
...нету смысла, нет ?
SU-27-16, должно работать, вроде нет таких ардуиновских функций, что б упростить выражение.. Я бы конечно написал так: PINB|=1<<5; (это используя "секрет" о котором сейчас написал) или так PORTB ^= (1<<5) если светик на 13 пине.
никогда не пробовал digitalRead(ledOn) если пин прописан как выход....
ledOn - может быть статусом состояния СД, но тогда тревожит digitalWrite(ledOn.... - номер пина
будем подождать весь код :)
никогда не пробовал digitalRead(ledOn) если пин прописан как выход....
ledOn - может быть статусом состояния СД, но тогда тревожит digitalWrite(ledOn.... - номер пина
будем подождать весь код :)
Строка в таком виде точно работает, сам иногда пользую. Инвертить светики - релюшки нормально выходит.
Я бы конечно написал так: PINB|=1<<5; (это используя "секрет" о котором сейчас написал)
PINB=1<<5; - так правильней. А в первом случае могут проинвертироваться биты, которые инвертировать совсем не предполагалось.
PINB=1<<5; - так правильней. А в первом случае могут проинвертироваться биты, которые инвертировать совсем не предполагалось.
Почему, есть какое-то обоснование? Я всегда делал с | , соседние биты никогда не трогает..
Вот написал от дребезга контактов нажимаем кнопку СД горит отпускаем горит. Повторное нажатие на кнопку СД не горит. Не судите строго. Я только начинающий )))
Wip85, есть и лучше :) Тут вы вынуждены использовать delay() и чем больше он будет тем лучше, т.к. в противном случае программа может успеть снять флаг быстрее, чем человек снимет палец с кнопки. Более совершенный алгоритм, когда программа исключает дребезг совсем , т.е. после нажатия кнопки ждёт примерно 20мс, потом снова читает вход, если состояние такое -же -значит кнопку держит человек ) И тоже самое при обратном движении.Если при опросе digitalRead стал LOW, то через 20мс снова проверяется на LOW. И только после второго чтения принимается решение что кнопку больше не дерджат. И Всё это без delay() разумеется..
так можно ? делей на антидребезг , while - ждём отпускания....
Скажите пожалуйста я правильно функцию написал или нет?
ИК выключатель.
На кнопке тоже работает
Wip85 Я для себя написал функцию для дребезга, работает. Посмотрите может Вам подойдет
А я уже не использую программные способы подавления дребезга :) Раньше не пользовался внешними прерываниями, а позже всё же оценил их удобства. Но в прерывании дребезг подавлять очень проблематично. Можно конечно, но как говорится "мне этой геморой не нужен" :) Но не всё так плохо, если подобрать конденсатор паралельно кнопке, то вероятность ложного срабатывания будет почти нулевой. При условии использования внутренней подтяжки я остановился на электролитах 1uF. С самой обычной кнопкой (а-ля ресет с морды компьютерного системника) вероятность корректного срабатывания при тестировании была 100 раз из 100. Если у вас уже заняты оба внешних перывания, то есть ещё одно "секретное" -прерывание компаратора. Не видел что-бы его кто-нибудь использовал, а ведь оно такое же функциональное, как и два обычных внешних. Вот заодно пример работы с ним. Кнопка с паралельно включённым конденсатором 1мкф вешается на 7 ногу ардуины, включается внутренняя подтяжка. В качестве индикации срабатывания традиционно вкл/выкл встроенный светик на 13 ноге.
Большое спасибо Dimax. Я так понимаю что ваша профессиональная деятельность связана с программирование микроконтроллеров? А еще хотел спросить у вас. Что посоветуете в освеоение программирование МК. Какой язык лучше осваивать? Какую литературу посоветуете в этом не легком деле? Я только начинающий в программирование. Но вообще интересное это ремесло. Работа творческая )))) Спасибо что отвечаете на комментарии.
PINB=1<<5; - так правильней. А в первом случае могут проинвертироваться биты, которые инвертировать совсем не предполагалось.
Почему, есть какое-то обоснование? Я всегда делал с | , соседние биты никогда не трогает..
Извините, давно сюда не заходил.
Соседние биты не трогает, только если на соответствующих входах PINB были нули.
А единичные биты должны инвертироваться.
Кажется так, если не ошибаюсь.
Wip85, микроконтроллеры -исключительно моё хобби) Если вы начали заниматься с ардуино, то язык сответственно СИ, ибо под него всё и задумывалось. Литературы хорошей нет, но на многое можно найти примеры на этом форуме или на arduino.cc. На robocraft.ru очень много полезного, есть практические статьи-уроки по работе с датчиками, дисплеями, итп. Но главные помощники -яндекс и гугль :)
http://lord-n.narod.ru/download/books/walla/programming/Spr_po_C/main.ht...
Dimax Я так и делаю. Правильно вы заметили что хорошей литературы нет. Что то читать безполезно. Гугл и яндекс. Все по крупицам приходиться собирать. ((( Опыт дело дорогое.
dimax вопрос конкретно к вам. Есть задача управление трех фазный тиристорным мостом . Суть в том что есть три синхроимпульса каждый от своей фазы нужно по каждому из них независимо друг от друга отсчитывать время и давать импульс на свой выход . ?