Challenge? ... What challenge? 
Started with a previous version ...
Code:
'****************************************************************
'* Name : THE_BUTON_sleep.BAS *
'****************************************************************
@ DEVICE PIC12F675, intrc_osc_noclkout, wdt_OFF, pwrt_on, mclr_off, bod_off
DEFINE OSC 4
DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50
CMCON = 7
OPTION_REG = %10000110
TRISIO = %00011110
ANSEL = %00011000
ADCON0 = %10001101
GIE var intcon.7 ' global interrupt enable 1=on ; 0=off
gpie var intcon.3 'port change interrupt enable 1=0n ; 0=off
gpif var intcon.0 'port change interrupt flag bit
adval var Word
vt var word
u var byte
cnt var byte
but1 var gpio.3
but2 var gpio.2
rel1 var gpio.5
rel2 var gpio.0
Timer1 VAR WORD EXT :@Timer1 = TMR1L
TMR1ON VAR T1CON.0
TMR1IF VAR PIR1.0
T1Count VAR BYTE
LongPress VAR BIT
T1CON = %00110100
u=0
cnt=0
GIE=0
GPIE=1
IOC.2=1 ' int-on-change for GPIO.2 enabled
IOC.3=1 ' int-on-change for GPIO.3 enabled
but1=0
but2=0
rel1=0
rel2=0
main:
rel1=0
rel2=0
@ sleep
pause 100
Timer1 = 3037
T1Count = 0
LongPress = 0
btn1: 'actionare buton up
if but1=1 and rel2=0 then
high rel1
TMR1ON = 1
pause 20
while but1=1
call check
wend
IF LongPress THEN Stop_UP
T1Count = 0
pause 20
while but1 = 0 and but2 = 0
call check
if rel1=0 then
GOTO Btn1PressDone
endif
wend
Stop_UP:
LOW rel1
while but1=1 OR but2 = 1
wend
pause 100
endif
GPIF=0 'Clear ort change interrupt flag
Btn1PressDone:
btn2: ' actionare buton down
if but2=1 and rel1=0 then
high rel2
TMR1ON = 1
pause 20
while but2=1
call check
wend
IF LongPress THEN Stop_Down
pause 20
while but2 = 0 and but1 = 0
call check
if rel2 = 0 then
GOTO Btn2PressDone
endif
wend
Stop_Down:
low rel2
while but2=1 or but1=1
wend
pause 100
endif
GPIF=0 'Clear ort change interrupt flag
Btn2PressDone:
GOTO MAIN
check: ' verificare pentru supracurent
adcin 3, adval
vt=adval * 5000
vt=div32 1023
for cnt = 1 to 5
if vt > 270 then
u=u+1
if u > 5 then
gpio.0=0
gpio.5=0
endif
pause 50
goto check
else
u=0
endif
next cnt
IF TMR1IF then
TMR1IF = 0
Timer1 = 3037
T1Count = T1Count + 1
if T1Count = 2 then
TMR1ON = 0
T1Count = 0
LongPress = 1
endif
ENDIF
return
end ' of program
I'll have to charge you for the next one though. 
<br>
Bookmarks