цель - таймер для для засветки резиста/маски. интерфейс 1 кнопка (замыкаем на землю). индикация рабочии UV леды.
короткое нажатие выбор времени из 3 предустановленных (с подтверждением текущих установок таймера миганием ледов) длинное нажатие - отработка заданного времени.
вопрос - как проще всего реализовать определение длинного (скажем больше секунды) и короткого нажатия.
у меня была идея воспользоваться командой BUTTON использую значение автоповтора
из доработок проситься светодиод статуса (а ля прогресс бар) для сверхдлинных выдержек - около часа.
теперь вернемся к кнопке.
может воспользоваться прерываниями.
прерывание по нажатию (приходу нуля). в обработке прерывания прерывание перепрограммировать по отжатию. и запускать цикл/таймер. по приходу прерывания отжатия смотреть цикл таймер и делать нужное...
но хочется сделать как можно проще..вот бы с этими баттансами разобраться, проще по моему не придумаешь..
Сколько работаю с кнопками, дребезга не замечал!!! Чтобы избежать дребезга, посадите параллельно кнопке емкость на 100Н, можно АЦП клаву использовать!!! А по Вашему поводу, где то на форуме видел, человек предложил так (могу и ошибиться, видел давно и пишу по памяти, но смысл такой): IF Button = 0 then But = 1 .... Else But = 0 Endif DelayMs 1000
If but = 1 Then - условие...
Что то так...
Добавлено (13.07.2012, 17:36) --------------------------------------------- Ошибся!!! После задержки, опять смотрите вход МК!!!
Добавлено (13.07.2012, 17:39) --------------------------------------------- Можно сделать в условии цикл, скажем от 0 до n - где n - время которое Вас интересует, и в этом цикле отслеживать кнопку!!! Если она изменилась меньше чем за нужное время, идти в одно место программы, если прошло все время, тов другое...
премного благодарен. это, то, что было нужно. спасибо.
Добавлено (14.07.2012, 16:45) --------------------------------------------- кривее кода я еще не писал....
но в общем он работает.
' коротким нажатием выбирается одно из трех значения таймера ' подтверждение выбора - мигание светодиода ' длительное нажатие запускает отсечку времени
'pin1 +V power 'pin2 GPIO5 OUT UV LED 'pin3 GPIO4 OUT STATUS LED 'pin4 GPIO3 free 'pin5 GPIO2 input StartButton 'pin6 GPIO1 free 'pin7 GPIO0 free 'pin8 GND
If DelayBut < 5 And START <> 0 Then ' нажали кратковременно DelayBut = 0 ; ' обработка событий короткого нажатия goto shtpres: endif
If DelayBut > 5 And START <> 0 Then ' нажали долго DelayBut = 0 ; goto lngpres: EndIf
goto main_loop end
lngpres: select case i case 1 gosub blink read 8,timer case 2 gosub blink pause 100 gosub blink read 9,timer case 3 gosub blink pause 100 gosub blink pause 100 gosub blink read 10,timer timer=timer*60 end select pause 200 high LED_OUT ' on leds for i=0 to timer ' do exposure pause 1000 next i low LED_OUT ' led off goto main_loop
'return
shtpres: i=i+1 if i>3 then i=1 endif
select case i case 1 gosub blink case 2 gosub blink pause 100 gosub blink case 3 gosub blink pause 100 gosub blink pause 100 gosub blink end select
' for k=1 to i ' gosub blink ' make blink ' next k ' return goto main_loop