IF Button = Pressed THEN
WHILE Button = Pressed
LOOP
ENDIF
IF Button = Pressed THEN
WHILE Button = Pressed
LOOP
ENDIF
I did it in the different way:
Code:setuploop: if but2=0 then dlycnt=dlycnt+1 'increase debounce variable while button is pressed ticker=ticker+1 pause 1 endif if ticker>1500 and BUT2=0 then gasvla 'if long pressed, then exit and (or) go to selector item if BUT2=1 and dlycnt>100 then 'if short pressed, then do the rap ticker=0 dlycnt=0 menuitem=menuitem+1 'this is incremental variable, substitute another next time you need it lcdout $fe,$c0, " selection: " #menuitem," " 'debug just for case pause 1 endif goto setuploop
I did a setup to check for...... short press, then 2 second or 5 second then long press to enter program mode, for next for the timing, then go on to next check and goto's
Code:FOR A1= 1 TO 5 '<.1 SECONDS FOR TIMER PAUSE 3 GOSUB RDSW if SWCH=0 then start NEXT A1 HIGH 2 read 1,A4 :PAUSE 10: C1=60*A4:C2=C1 FOR A1 = 1 TO 100 '2 SECONDS FOR 8 HR PAUSE 8 GOSUB RDSW if SWCH=0 then TIMER NEXT A1 C1=28800 '8 HRS HIGH 5 FOR A1 = 1 TO 100 'CHECK FOR PROGRAM 5 SEC TOTAL PAUSE 40 GOSUB RDSW if SWCH=0 then TIMER NEXT A1 LOW 2:GOTO PROGRAM
All the above methods block the program execution. If this is not a problem then it I guess ok.
But if the PIC must do other things, it is better to have a ticker in a timer interrupt routine and count up when a key is pressed. Periodically check the ticker for the required value and decide what to do.
That way, program does not stay in a closed loop until button release.
Ioannis
Bookmarks