serrure codée

zylix

New Member
Bonjour

j'essaie de travailler en ce moment sur une serrure codée.

serrure_codee.jpg

le problème est qu'avec le programme que j'utilise sous picaxe 18, je bute sur un problème de reconnaissance de code.
certain codes sont reconnus et déclenche la led verte ainsi que l'ouverture du solénoid mais avec d'autres je n'ai aucun déclenchement et toujours led rouge.

j'ai verifier a l'ohmètre mon clavier pour ecarter tout problème "hard" mais tout est normal, il s'agit bien d'un problème de programmation

voici le code

Code:
' Keypad Lock For PICAXE-18  


symbol key_pos = b1
symbol key_value = b2

init:

let key_pos = 0

scan:
let key_value = 0
let pins = %00010001
gosub key_test
let key_value = 3
let pins = %00010010
gosub key_test
let key_value = 6
let pins = %00010100
gosub key_test
let key_value = 9
let pins = %00011000
gosub key_test
goto scan

key_test:
if pin0 = 1 then add1
if pin1 = 1 then add2
if pin2 = 1 then add3
return

add3: let key_value = key_value + 1
add2: let key_value = key_value + 1
add1: let key_value = key_value + 1

sound 6,(60,50) ‘(continued overleaf)

let key_pos = key_pos + 1
if key_pos = 1 then test1
if key_pos = 2 then test2
if key_pos = 3 then test3
if key_pos = 4 then test4


test4: 
if key_value = 2 then open
goto reset
test3:
if key_value = 4 then continue
goto reset
test2:
if key_value = 5 then continue
goto reset
test1: 
if key_value = 6 then continue
goto reset

open: let pins = %10100000
wait 5
goto reset

reset:
let key_pos = 0

continue:
return
je tourne en rond et ne trouve pas d'explication. le code me paraissant correct.

????

je travaille à partir de ce doc

http://www.picaxe.com/docs/chi008.pdf
 
Last edited:

MGU

Senior Member
Bonjour,

Je n'ai pas vérifié le détail du programme, mais j'ai un doute sur la fiabilité du système.

Ces claviers ont un contact plus ou moins bon suivant les touches, il n'y a par exemple aucun anti rebond dans le programme et ces claviers ne sont pas des contacts idéaux.

La probabilité de détecter un code juste est donc aléatoire. Quelques courtes pauses ne feraient pas de mal. (voir doc interfaces picaxe).

Si c'est pour ouvrir une porte, regarde ce lien:

http://electromag1.over-blog.com/pages/Gache_electronique_programmable_Picaxe_08M2-3494202.html

Le système fonctionne sur mon portail extérieur, par tous les temps, sans une ratée depuis deux ans.


MM
 
Last edited:

zylix

New Member
Je veux bien croire qu'en terme de qualite ce n'est pas le top mais certain code marche tres bien.
Pourquoi d'autres pas du tout.
Je prefere croire que je suis pas assez bon en programmation plutot que de mettre en doute tout de suite le montage.
 

PieM

Senior Member
Je veux bien croire qu'en terme de qualite ce n'est pas le top mais certain code marche tres bien.
Pourquoi d'autres pas du tout.

Bonsoir,

dans le programme il y a ces lignes :

Code:
key_test:
if pin0 = 1 then add1
if pin1 = 1 then add2
if pin2 = 1 then add3
return

add3: let key_value = key_value + 1
add2: let key_value = key_value + 1
add1: let key_value = key_value + 1
add3, add2, add1 conduisent à la même formule !
 

MGU

Senior Member
add3 conduit aussi aux deux lignes suivantes donc +3, add2 donne +2...

Enfin, je pense

MM
 

zylix

New Member
en fait j'ai suivi l'algorithme proposé dans la doc que j'ai cité dans mon premier post.

l'algo. du scan du clavier :

scan.JPG

et celui de la verification du code:

pincode.JPG

cela explique la répetition : lety = y+1 3 fois.
 

BESQUEUT

Senior Member
Quelques courtes pauses ne feraient pas de mal.
Avec les Picaxes, ça peut aider dans certains cas, mais dans celui-ci je ne pense pas...
A mon humble avis, cet algo est conçu pour un PIC qui tourne 1000 fois plus vite qu'un Picaxe.
==> Il faut que la totalité des tests soient réalisés entre le moment où vous enfoncez une touche et celui où vous la relâchez.
Pour la première colonne, c'est assez rapide. Pour la quatrième, il faut tout parcourir 4 fois.
Pour confirmer, ce serait intéressant de savoir :
- quels sont les chiffres qui "marchent" et ceux qui ne "marchent pas" ?
- que se passe-t-il si vous prenez votre temps ? (appuis très longs sur les touches)
- Ajouter un bip reconnaissable entre le "continue" et le "return" à la fin du programme. (mettre un return juste avant pour que le bip ne soit entendu que si la touche est validée) (debug uniquement)
 
Last edited:

fuse

Senior Member
Bonjour,

D'après le programme :

test4:
if key_value = 2 then open
goto reset
test3:
if key_value = 4 then continue
goto reset
test2:
if key_value = 5 then continue
goto reset
test1:
if key_value = 6 then continue
goto reset
Le code 6, 5, 4, 2 permet la commande du solénoid...

Le programme semble fonctionnel en simulation, mais sur une maquette réelle, je suis du même avis que Besqueut et MGU, la pose de quelques 'wait' devrait résoudre les problèmes.
Essayer un wait juste avant la commande sound 6,(60,50) ‘(continued overleaf)
 

PieM

Senior Member
Bonjour,

Je partage tout à fait les opinions émises précédemment.
En fait dans l'utilisation de claviers ou de BP, l'idéal (?) est de tester que l'appui a eu lieu, et de ne prendre en compte l'action qu'au moment du relâchement.

du type :

do while pin0 = 1: loop
--> action liée à pin0

Sinon, je pense qu'il y aurait un algorithme plus simple, et encore plus avec un Picaxe M2, car le 18 est un peu figé!
 

MGU

Senior Member
Bonjour,

Tout à fait d'accord avec PieM.

Je complète le #2, l'"expérience" des contacts et des claviers me conduit à ce résumé:

1- Prendre en compte la détection de l'appui d'une touche
2- Pause 100 pour l'anti rebonds parce qu'il a des mauvais contacts dans la vraie vie.
3- Blocage par une boucle tant que la touche est appuyée parce que l'on ne peut laisser la programme faire ce qu'il veut pendant ce temps. Le résultat doit être indépendant du temps d'appui (> au temps de pause quand même)
4- Un petit beep au relâchement parce que ça rassure.
5- Suite du programme ( ou goto, gosub ...)

En suivant cette procédure, il n'y a pas de surprise.

MM
 

fuse

Senior Member
Bonjour,
J'ai réécrit le programme, à essayer par Zilix. Le code correct est 3,4,5,6.
Le programme mérite d'être améioré pour un fonctionnement réel en particulier il faut prévoir un temps d'attente maxi entre l'appui des touches mais aussi la possibilité de modifier le code en utilsant l'EEPROM. J'ai juste repris l'idée du dossier et il s'agit d'un système didactique....
Le programme est écrit en flowchart, le basic est issu de la conversion , c'est pourquoi les labels sont complexes.

Cordialement
 

Attachments

zylix

New Member
merci pour votre aide

je vais essayer de repondre a vous questions dans l'ordre

1- les codes qui marchent sont liés a la premières colone. par exemple le code 7412 marche tres bien. le code 0263 pas du tout. plus j'utilise des chiffre correspondant aux colonnes 2 ou 3 et plus ça plante.

2- il est vrai qu'il ne faut pas appuyer ni trop vite ni trop lentement même pour le code qui marche bien . une vitesse precise est necessaire et ça me dérange quelquepart.

3- je viens de récupérer le programme réécrit par fuse mais au moment de la simulation ou de la programmation d'ailleurs j'ai un message du style "erreur de compilation [7958]"


en simulation avec un 28x1 le programme tourne parfaitement. j'avais moi même modifier mon programme avant de poster sur le forum en utilisant la ram comme stockage des touches enfoncées. mais j'avais surement aussi trop de goto ou gosub et du coup j'avais eu aussi le même genre de message. je pense que le pauvre picaxe 18 est très limité.
ça m'ennui de refaire un circuit electronique pour y mettre un 28x1 mais j'ai l'impression que je ne vais pas avoir le choix.
 

fuse

Senior Member
Oups, Comme cela fonctionne chez moi, je suppose un problème avec le Picaxe utilisé... J'ai réalisé le programme pour un 18X, après vérification, le Picaxe de la carte est un 18 (16F627A indiqué sur le circuit).
Il doit être possible de reprendre le diagramme flowchart et de le recompiler en changeant le Picaxe (options > choisir Picaxe) avant transfert sur le Picaxe 18.
Dans le pire des cas reprendre le flowchart à partir de clavier.jpg
 

zylix

New Member
j'avais bien fait attention a cela.

dans le doute j'ai repris le flowchart, bien verifié que c'est un 18 (16f627a)
et j'ai converti en basic pour le programmer.
mais c'est impossible, j'ai le message d'erreur que j'avais signalé 2 posts plus haut.
 

BESQUEUT

Senior Member
1- les codes qui marchent sont liés a la premières colone. par exemple le code 7412 marche tres bien. le code 0263 pas du tout. plus j'utilise des chiffre correspondant aux colonnes 2 ou 3 et plus ça plante.
Je pense qu'un bip après prise en compte de chaque pression serait à la fois une aide pour déboguer et pour l'utilisateur qui sait ainsi si il a appuyé suffisement longtemps.
Pour le débug, faire un son différent suivant que le chiffre est valide ou pas.

Si un appui trop long conduit également à une erreur, c'est parce que l'algorithme me semble incomplet...
Dans le cas où vous appuyer longtemps sur un chiffre valide, le programme détecte une deuxième pression de touche ; mais comme il a incrémenté le numéro d'ordre, le code n'est plus bon !
Ca peut constituer une "sécurité" supplémentaire (il faut taper le code dans le rythme...)
Mais au moins dans un premier temps, il me semble judicieux d'attendre que la touche soit relachée avant de continuer.
(pas de wait mais une boucle qu teste l'état de la touche... oui je sais : ça complique pas mal...)
Et ça se complique encore plus si on tient compte des rebonds potentiels : il faut dans ce cas détecter que la touche reste dans un état stable pendant un temps donné puis est relâchée pendant un temps donné.
 
Last edited:

fuse

Senior Member
Rebonjour,

Le programme tourne en simulation sur Programming Editor V550? Le problème de compilation se situe au moment du transfert sur la platine Picaxe?
 

zylix

New Member
j'ai la 5.43
ça vient peut être de la.
je vais faire la mise a jour


je suis passé à la derniere version de prog editor 5.51
et ça marche impeccable.

votre algorithme marche bien mieux que l'original.

j'ai fais quelques ajustement de vitesse pour avoir une reaction clavier plus rapide et des sons plus court.

tel que ci dessous ça me va à merveille.

merci fuse pour votre programme et a tous pour votre soutiens et votre aide.

le code de fuse légèrement modifié pour une réaction plus rapide :

Code:
'BASIC converted from flowchart: 
'C:\Users\zylix\Desktop\clavier.cad
'Converted on 05/03/2012 at 21:26:06

symbol val_touche = b0
symbol nbr_appui = b1

main:
label_179:	let nbr_appui= 0
label_149:	gosub scan
		if nbr_appui= 1 then label_1B3
		if nbr_appui= 2 then label_1BE
		if nbr_appui= 3 then label_1D4
		if nbr_appui= 4 then label_187
		goto label_179

label_187:	if val_touche= 6 then label_1E6
		goto label_179

label_1B3:	if val_touche= 3 then label_149
		goto label_179


label_1BE:	if val_touche= 4 then label_149
		goto label_179


label_1D4:	if val_touche= 5 then label_149
		goto label_179


label_1E6:	high 7
		sound  6,(50,50)
		pause 3000
		low 7
		goto label_179

scan:	
		let pins = 1	' %00000001
		if pin0=1 then label_48
		if pin1=1 then label_E8
		if pin2=1 then label_EF
		let pins = 2	' %00000010

label_48:	let val_touche= 1
label_15F:	high 5
		let nbr_appui=nbr_appui+ 1
		sound  6,(20,30)
		pause 250
		low 5
		return

label_E8:	let val_touche= 2
		goto label_15F

label_EF:	let val_touche= 3
		goto label_15F
 
Last edited:
Top