Citazione:
Originalmente inviato da romoloman Ti ho ripulito un po il codice...
ho fra l'altro notato che c'era un problema in "mezzo" il controllo del tasto veniva fatto solo ogni 2 secondi...
Normalmente per far lampeggiare un led quando c'è di mezzo il controllo di eventi esterni l'uso dei delay non è la cosa più corretta da fare... si usano anzi gli interrupt sui timers ma visto che sei alle prime armi evitiamo di complicarti la vita: Codice: program MyProject
' Declarations section
sub function controlla_gpio() as integer
dim count as integer
count=0
'semplice procedura di debouncing....
while ((gpio.0=1) and (count<200))
delay_ms(1)
count=count+1
wend
if (count=200) then
result=1
else
result=0
end if
end sub
main:
' RIMUOVERE I COMMENTI SUcCESSIVI IN CASO DI OSCILLATORE INTERNO
'asm
' bsf status,RP0;
' call 0x3FF
' movwf osccal
' bcf status,RP0
'end asm
TRISIO.1=0
TRISIO.2=0
TRISIO.0=1
cmcon=7
fissa:
while true
gpio.1=1
gpio.2=1
if controlla_gpio()=1 then
goto inizio
end if
wend
inizio:
delay_ms(100)
while true
GPIO.1=1
gpio.2=1
delay_us(50)
GPIO.2=0
gpio.1=0
delay_us(50)
IF controlla_gpio()=1 THEN
GOTO mezzo
end if
wend
mezzo:
delay_ms(100)
while true
gpio.2=1
delay_ms(500)
if controlla_gpio()=1 then
goto strobo
end if
gpio.2=0
delay_ms(500)
if controlla_gpio()=1 then
goto strobo
end if
gpio.1=1
delay_ms(500)
if controlla_gpio()=1 then
goto strobo
end if
gpio.1=0
delay_ms(500)
if controlla_gpio()=1 then
goto strobo
end if
wend
strobo:
delay_ms(100)
while true
gpio.1=1
gpio.2=1
delay_ms(50)
gpio.1=0
gpio.2=0
delay_ms(50)
if controlla_gpio()=1 then
goto fissa
end if
wend
end. |
Il primo codice che mi hai postato, rimane fisso sul primo effetto, mentre
il secondo parte, premo il pulsante, mi cambia effetto e dopo 2 secondi torna al primo effetto... oppure se premo un po' di piu cambia effetto poi torna al primo