code avec boutons poussoirs

steph41

New Member
Bonjour je souhaite faire un code d'accès avec deux boutons poussoirs, genre "rouge rouge vert" = code bon donc je peux ouvrir une porte sans déclenchement d'un alarme. Si la série de 3 appuis est mauvaise, l'alarme sonne.

J'ai fait qq essais mais ça me semble compliqué, de prendre en compte le fait que l'utilisateur a appuyé 3 fois au total ; il peut avoir appuyé 10 fois sur le vert avant de faire le rouge.
J'ai fait deux essais de programmes; ci joint.
Si quelqu'un peut me les compléter ou me proposer un programme du même genre ça m'aiderait bien.
D'avance merci.
Stéphane
 

Attachments

PieM

Senior Member
Bonjour,

Effectivement, ces programmes ne peuvent pas fonctionner. Par curiosité, les convertir en basic ....

Dans le principe, le programme principal doit gérer les appuis successifs, de façon séquentielle.
Le passage d'une séquence à l'autre ne doit être autorisé que si le test bon bouton a été enfoncé, puis relaché.

Donc:
- Un pg principal avec trois test successifs.
- Un sous programme comprenant une boucle d'attente de l'appui sur un bouton et qui retourne la valeur rouge ou vert dans une variable, qui est testée dans le pg principal.

Je ne sais pas si je suis bien clair ... mais je n'ai pas trop de temps pour l'instant. Je ferais mieux dans quelques instants! :)

C'est quoi le test porte fermée: si la porte est fermée, le programme boucle ... c'est normal ?
 

PieM

Senior Member
Suite ...

Voilà un petit programme (non testé) qui explicite un peu ce que je voulais dire.
Il est fait directement sous PPE . Je n'aime pas trop les logigrammes pour ce type de programmation... :)

Ce principe peut être étendu facilement à un code supérieur à 3 appuis, et l'alarme déclenchée avant d'attendre 3 appuis mauvais.

Code:
'=================================
'Test séquentiel d'appui sur des boutons
'avec sécurité - pour Steph41
'=================================

symbol  BPRouge = pin0
symbol  BPVert = pin1
symbol  Buzzer = xxxx

symbol  ValBP = b0
symbol  NbErreur = b1	


Principal: '======================================================================

	If NbErreur >= 3 then  'teste si le nombre d'appuis non conformes est supérieur à 2
		gosub alarme	    
		NbErreur = 0
	endif
	
gosub testBP
	If ValBP <> 2 then
		inc NbErreur 
		goto Principal	' retour si BP nest pas Vert
	endif

gosub testBP
	If ValBP <> 1 then 
		inc NbErreur
		goto Principal	' retour si BP nest pas Rouge
	endif

gosub testBP
	If ValBP <> 2 then 
		inc NbErreur
		goto Principal	' retour si BP nest pas Vert
	endif
	
gosub testOK



'--------------------------------------------------------------------------------
testBP: 	'retourne la valeur 1 dans ValBP si BPRouge, et retourne 2 si BPVert

	do while BPRouge = 0 and BPvert = 0	'boucle d'attente de l'appui sur un bouton
	loop

	If BPRouge = 1 then 
		ValBP = 1
	else 
		ValBP = 2
	endif

	do while BPRouge = 1 or BPVert =1  'attente du relachement des boutons
	loop

return
'------------------------------------------------------------------------------
Alarme:
	buzzer = 1
	pause 30000
	buzzer = 0
return
'------------------------------------------------------------------------------
testOK:  'suite du programme si les tests sont réussis.

goto principal
 

steph41

New Member
Bonjour merci pour ta réponse complète ;
le test sur la porte est normal c'est à dire si elle reste fermée on ne se préoccupe pas du code et l'alarme est inactive.
Si cette porte est ouverte on teste le code pour activer ou non l'alarme.
Je vais donc tester ton programme ce weekend et je te dirais si ça marche.
Merci beaucoup !
 

PieM

Senior Member
Bonjour,
dans le sous-programme TestOK ne pas oublier (comme moi !) de remettre à zéro NbErreur

Bon W.E.
 
Top