Bonjour a tous
Je sollicite votre aide pour peaufiner un programme Picaxe, très simple, mais compliqué pour moi .
Ce programme servira pour piloter des feux tricolore.
Voici mon cahier des charges :
* Mise sous tension = état 0
- Buzzer sonne 1sec
- Led rouge ON
- Led orange OFF
- Led verte OFF
Ces quatre étape doivent s'accomplirent en même temps.
*Lors d'un appui court sur un poussoir on passe a l'état 1
A Led rouge OFF
B Led orange ON X seconde , puis s’éteint
C Led verte ON X seconde , puis s'éteint
D Led orange ON X seconde , puis s'éteint
E Retour a l'état 0
* Lors d'un appui long supérieur a 2 sec , quand on est a l'état 1 on repasse a l'état 0
Pour le moment mon programme fonctionne , mais il bug lors d'appui court quand on est a l'état 1 ,
je m'explique , si l'on fait un appuie court quand on est a l'état 1 , il faudrait que rien ne ce passe et pour le moment c'est pas le cas , il enchaîne
les étape A, B, C, D a chaque appuie court .
N'étant pas une lumière en programmation , merci par avance de votre aide .
Voici mon programme actuel :
Code:#picaxe 08M2 symbol pous=pinC.3 symbol ledorange=C.1 symbol ledverte=C.2 symbol ledrouge=C.0 symbol buzzer=C.4 symbol etat =b1 setint %0,%1000 ;interrupt sur C.3 niveau bas pullup %1000 etat=0 ;etat au demarrage do select etat case 0 low ledorange low ledverte high ledrouge ;ON high buzzer pause 1000 low buzzer do loop while etat=0 case 1 low ledrouge high ledorange ;ON pause 3000 ;led orange ON 30sec low ledorange high ledverte ;ON pause 45000 ;led verte ON 45sec pause 45000 ;led verte ON 45sec low ledverte high ledorange ;ON pause 3000 ;led oronge ON 30sec low ledorange high ledrouge ;ON etat=0 end select loop interrupt: time=0 do loop while pous=0 and time<2 if time>1 then high buzzer ;remise a l'état 0 apres 2sec if etat=1 then reset endif else if etat=0 then etat=1 endif endif setint %0,%1000 ;interrupt sur C.3 niveau bas return
-----