Estudio de Soluciones
if ina[21]
outa[9..4]++
elseif ina[23]
outa[9..4]--
5) Ejemplo de Solución:
''File: SecondCountdownTimer.spin
''Imita botones de alarma de reloj.
PUB SetTimerWiCountdown | counter, divide, T
dira[9..4]~~
repeat
repeat until ina[22]
'Retraso de 1 ms.
waitcnt(clkfreq/1000 + cnt)
{Si se presiona un botón...
NOTA: Reiniciar el contador a -1 hace posible presionar y soltar
rápidamente el botón y avanzar la pantalla minuto sin ningún retraso aparente.}
if ina[21] or ina[23]
counter++
else
counter := -1
'Reinicia sobre flujo minutos
if outa[9..4] == 63
outa[9..4] := 59
elseif outa[9..4] == 60
outa[9..4] := 0
'Activa duración de tiempo
if counter > 2000
divide := 50
else
divide := 200
'Si uno de los tiempos ha pasado
if counter // divide == 0
if ina[21]
elseif ina[23]
presiona
T := cnt
repeat while outa[9..4]
T += clkfreq
segundos
waitcnt(T)
outa[9..4]--
Pagina 204 · Kit Educativo de Prácticas Propeller: Fundamentos
outa[9..4]++
outa[9..4]--
' si botón P21 se presiona
' incrementa outa[9..4]
' si botón P23 se presiona
' decrementa outa[9..4]
' Activa pisn E/S a salida
' Ciclo principal
' Quiebra si
' Retraso 1 ms
' Si se presiona un botón
' incrementa contador
' de otra forma
' active contador a -1
' Si 0 pasa sobre 63
' reinicia a 59
' De otra forma si 59 incrementa a 60
' Activa a 0
' Si contador > 2000 (10 incrementos)
' 50 ms entre incrementos
' de lo contrario
' 200 ms entre incrementos
' si uno de los tiempos ha pasado
' si botón P21 se presiona
' incrementa outa[9..4]
' de otra forma si botón P23 se
' decrementa outa[9..4]
' Marca el tiempo
' repite mientras outa[9..4] no es 0
' Calcula el siguiente valor de
' Espera por el...
' Decrementa outa[9..4]