Citazione:
Originalmente inviato da MSchiepp L'errore sta nel fatto che tu impieghi più di 100 mS per premere il pulsante e quindi quello che succede è che tu premi il pulsante, il programma esegue un ciclo dell'effetto selezionato poi arriva in fondo dove trova il pulsante ancora premuto e quindi passa al successivo, finchè non trova il pulsante rilasciato e rimane nell'ultimo effetto selezionato.
Puoi provare due soluzioni:
1) prima del ritardo di 100 mS aspetti che il pulsante venga rilasciato: questo fa partire il nuovo effetto quando rilasci il pulsante; il ritardo di 100 mS serve ad eliminare i rimbalzi del pulsante.
2) Usi una variabile come flag inizializzata a '0' e all'inizio del ciclo di ogni effetto verifichi se il pulsante è rilasciato; se sì metti il flag ad 1 e alla fine passi al ciclo successivo se trovi il pulsante premuto e il flag=1.
Michele |
Per prima cosa ti ringrazio veramente per la pronta risposta.
Se effettuo la modifica che mi indichi al punto 1, devo aumentare il valore di 100ms?
Non so se ho capito bene.
mentre per il punto due, ho scritto un altro programma con una variabile K ma questo va ancora peggio... mi si impunta al secondo effetto eccolo qui:
program Lampeggioled
const tasto as byte[4]=(0,1,2,3)
dim K as byte
dim premuto as byte
main:
gpio.0=0
gpio.1=0
gpio.2=0
K=0
premuto=0
trisio.1=0
trisio.2=0
trisio.0=1
cmcon=7
while true
if gpio.0=0 then
premuto=0
end if
if (gpio.0=1)and (K<3) and (premuto=0) then
K=K+1
premuto=1
end if
if(gpio.0=1) and (K=3)and(premuto=0)then
K=0
end if
if K=0 then
gpio.1=1
gpio.2=1
end if
if K=1 then
gpio.1=1
gpio.2=1
delay_us(50)
gpio.1=0
gpio.2=0
delay_us(50)
end if
if K=2 then
gpio.1=1
delay_ms(500)
gpio.1=0
delay_ms(500)
gpio.2=1
delay_ms(500)
gpio.2=0
delay_ms(500)
end if
if K=3 then
gpio.1=1
gpio.2=1
delay_ms(50)
gpio.1=0
gpio.2=0
delay_ms(50)
end if
wend
end.