Помогите с кодом короткого мырга диода
- Войдите на сайт для отправки комментариев
Вс, 25/03/2012 - 20:33
Не получается толком написать код короткого мигания светодиода при каждом нажатии на кнопку.
Вот это не работает
if (buttonState == HIGH && trigerState == LOW) { digitalWrite(ledPin, HIGH); delay(10); while (buttonState == HIGH) { digitalWrite(ledPin, LOW); }
ну 10 милисекунд маловато конечно, попробуй побольше, и во вторых внутри цикла while никак не меняется ButonState... если случится так что программа пройдется по этому циклу, то дальше она уже не пойдет... да и вообще не понятен смысл всех этих манипуляций с кодом, почему просто не включить диод, подождать, и выключить его?
Задержка в 10 миллисекунд должна быть по заданию.
А смысл такой, при нажатии на кнопку светодиод должен мигнуть один раз независимо от длительности нажатия на кнопку. При отпускании кнопки цикл должен прерваться для дальнейшего опроса состояния кнопки.
Попробуйте ориентироваться не на СОСТОЯНИЕ "кнопка нажата", а на СОБЫТИЕ "кнопка нажата".
В чем разница?
СОСТОЯНИЕ длится все то время, пока кнопка нажата.
СОБЫТИЕ - лишь один-единственный миг при переходе кнопки из ненажатого состояния в нажатое.
Т.е. в терминах обработки сигналов - ловите не уровни, а фронты.
Правильно пишит step962 нужно ловить событие, к примеру если использовать прерывания, то там это реализованно параметрами RISING и FALLING, но в прерывании не будет работать задержка. Поэтому для начала выложите весь код и опишите как подключаете кнопку.
В общем случае (при нажатии кнопки пин замыкается на минус) будет так:
И для устранения дребезга кнопки можно паралельно ей поставить конденсатор.
А если при нажатии кнопки пин замыкается на плюс (в этом случае нужен подтягивающий резистор к минусу), то вот так:
maksim
Я немножко продублирую тему, простите.
Подскажите пожалуйста с кодом, как можно оптимизировать и главное где подсмотреть решение задачи. При нажатии кнопки( на данный момент без фиксации) послать только один раз команду в сом порт и оставить светодиод включеным. Если я сменю на кнопку с фиксацией, то данные будут идти постоянно, как этого можно избежать ? сейчас три кнопки и два светика. А, вообще нужно три и три. Но это не главное.
И вам не нужно менять кнопку, "фиксацию" можно сделать програмно.
Или так:
Максим, огромное спасибо. Много нового увидал, незнаю как, но работает. Я пытался, разобраться и продолжаю. Спасибо за время.