J'ai ENFIN compri
le programme se "build" et je peux le débugger sans problèmes
cependant dans le passage :
if portA.2=0 then 's'assure que la porte est fermÚ
alarme
end if
lorsque je lance la simulation la "ligne de la simulation" passe bien sur "alarme" (et c'est normale car le portA.2 n'est conecté a rien dans le cadre de la simulation) néanmoins le ligne de simulation passe comme si de rien était sur la ligne alarme et passe desuite à la ligne end if sans executer les actions du sub alarme pourquoi?
merci
On ne sait pas a quel code tu fais réfèrence ? On pourrait les regarder tous ... ! A mon avis tu vas trouver ?J'ai ENFIN compri
le programme se "build" et je peux le débugger sans problèmes
cependant dans le passage :
if portA.2=0 then 's'assure que la porte est fermÚ
alarme
end if
lorsque je lance la simulation la "ligne de la simulation" passe bien sur "alarme" (et c'est normale car le portA.2 n'est conecté a rien dans le cadre de la simulation) néanmoins le ligne de simulation passe comme si de rien était sur la ligne alarme et passe desuite à la ligne end if sans executer les actions du sub alarme pourquoi?
merci
Bientôt il fera de grands cocoricos le pti poussin.
je parle de celui-ci :
program TESTE_SC
' Declarations section
dim keypadPort as byte at portb
'pour entrer le code on tape sur la touche "*" du keypad
'on entre les 4 chiffres du code Ó chaque bon chiffre une led vert clignote
'on valide son code, et remet en route par la touche "#"
const codeporte as string[4]=(0,1,2,3) 'code a dÚfinir
const sit as string[10]=(11,1,2,3,4,5,6,7,8,9) 'converti le code
dim pchif as byte '1¦ chiffre du code (traduit)
dim dchif as byte '2¦ chiffre du code (traduit)
dim tchif as byte '3¦ chiffre du code (traduit)
dim qchif as byte '4¦ chiffre du code (traduit)
dim bt as byte 'valeur dites BoucheTrou
dim n as byte 'pour trad du code
sub procedure alarme 's'actionne si qlq'un ouvre la porte
portA.3=1
delay_ms(2000)
portA.3=0
delay_ms(1000)
portA.3=1
' goto main
end sub
sub procedure vali 'permet prevenir que c'est "bien/bon"
portA.1=1
delay_ms(1500)
portA.1=0
' return
end sub
sub procedure oups 'indique une erreur et renvoie au main
dim i as byte 'valeur pour les for-next
for i=0 to 3
portA.0=1
delay_ms(500)
portA.0=0
delay_ms(500)
next i
' goto main
end sub
main:
keypad_init()
n=codeporte[0] 'traduit le code pour le programe
pchif=sit[n]
n=codeporte[1]
dchif=sit[n]
n=codeporte[2]
tchif=sit[n]
n=codeporte[3]
qchif=sit[n]
if portA.2=0 then 's'assure que la porte est fermÚ
alarme
end if
Keypad_init()
bt=Keypad_Key_Click() 'teste si l'on commence a entrer un code
if bt=10 then
vali ''Ó voir si je le laisse
if portA.2=0 then
alarme
goto main
end if
while true 'boucle de teste du 1¦chiffre
Keypad_init()
bt=Keypad_Key_Click()
if bt=pchif then
break
else
if portA.2=0 then 'detection de sÚcuritÚ de la porte
alarme
goto main
end if
if bt=0 then 'detection si on ne rentre rien
continue
else 'detection si le chiffre est faux
oups
goto main
end if
end if
wend
while true 'boucle de teste du 2¦chiffre
Keypad_init()
bt=Keypad_Key_Click()
if bt=dchif then
break
else
if portA.2=0 then 'detection de sÚcuritÚ de la porte
alarme
goto main
end if
if bt=0 then 'detection si on ne rentre rien
continue
else 'detection si le chiffre est faux
oups
goto main
end if
end if
wend
while true 'boucle de teste du 3¦ chiffre
Keypad_init()
bt=Keypad_Key_Click()
if bt=tchif then
break
else
if portA.2=0 then 'detection de sÚcuritÚ de la porte
alarme
goto main
end if
if bt=0 then 'detection si on ne rentre rien
continue
else 'detection si le chiffre est faux
oups
goto main
end if
end if
wend
while true 'boucle de teste du 4¦ chiffre
Keypad_init()
bt=Keypad_Key_Click()
if bt=qchif then
break
else
if portA.2=0 then 'detection de sÚcuritÚ de la porte
alarme
goto main
end if
if bt=0 then 'detection si on ne rentre rien
continue
else 'detection si le chiffre est faux
oups
goto main
end if
end if
wend
while true
Keypad_init()
bt=Keypad_Key_Click()
if bt=12 then 'on valide car 12 corespond Ó "#"
break
else
if portA.2=0 then 'detection de sÚcuritÚ de la porte
alarme
goto main
end if
if bt=0 then 'detection si on ne rentre rien
continue
else 'detection si le chiffre est faux
oups
goto main
end if
end if
wend
vali
portA.3=0 'desactivation de l'alarme
delay_ms(5000) 'delai de sÚcu
while true 'attente de la remise en route
Keypad_init()
bt=Keypad_Key_Click()
if bt=12 then 'signal de remise en route
vali
break 'remise en route
end if
wend
end if
goto main
end.
'corespondance touche et numero des touches :
' 0 = 11 ; 1=1;2=2;3=3;4=4;5=5;6=6;7=7;8= 8;9=9;*=10;#=12
voila voila
#Vous me faites tellement rire avec vos comparaison #
Ici - mikroBasic V5.80 - ton code ne compile pas, la variable 'n' est déjà déclarée kidit ???
J'ai déplace la ligne juste après main, voir doc portée des variables (variable scope en anglais)
Et ça compile. Cette erreur cause aussi une erreur sur sub alarm ???
main:
dim n as byte 'pour trad du code
Chez moi ça compile (V 5.40) mais c'est toujours aussi indépatouillable.
Autre chose qui me parait plus grave, on ne voit nul part une configuration du moindre registe.
Chez microchip ça veut dire que tout tes ports sont configurés en entrées (valeur par défaut), que les entrées analogiques sont configurées comme telles (valeur par défaut). C'est sans doute pour ça que tu rencontres des problèmes au debuggage, pour qu'une sortie change d'état il faut que ce soit une sortie.
Juste après le main on devrait trouver au minimun (après ça dépend du pic utilisé):
trisa=X
trisb=X
option_reg=X
cmcon=X
"17 314 Identifier "n" has been already declared in "P18F45K22.mbas" Cocorico_2.mbas"
C'est lié au processeur par défault ici ... que je n'ai _jamais_ utilisé
C'est malin d'avoir déclaré N globale dans cet include
Oui, il y a ça aussi !
mais c'est toujours aussi indépatouillable.
Autre chose qui me parait plus grave, on ne voit nul part une configuration du moindre registe.
Chez microchip ça veut dire que tout tes ports sont configurés en entrées (valeur par défaut), que les entrées analogiques sont configurées comme telles (valeur par défaut). C'est sans doute pour ça que tu rencontres des problèmes au debuggage, pour qu'une sortie change d'état il faut que ce soit une sortie.
Juste après le main on devrait trouver au minimun (après ça dépend du pic utilisé):
trisa=X
trisb=X
option_reg=X
cmcon=X
Il faudrait commencer par une code plus élémentaire ... pour ne pas dire basic !
Dernière modification par Biname ; 19/04/2013 à 09h52.
Et se pencher un poil sur la data sheet du pic...
Sans compter qu'utiliser un 18F45K22 (36 I/O quand même) pour gérer 5 entrées logiques et une sortie TOR c'est vraiment du gaspillage (et de la recherche d'emmerdes quand on apprend à programmer).
Un bête 16f62x voire même un ancestral 16f84 est capable de faire la même chose et même ces bestioles là seraient largement surdimensionnées, un 12f629/675 suffirait mais ça serait peut-être un peu acrobatique .
Oui pour le 18F45K22, je sais pas comment cette configuration est apparue ?Et se pencher un poil sur la data sheet du pic...
Sans compter qu'utiliser un 18F45K22 (36 I/O quand même) pour gérer 5 entrées logiques et une sortie TOR c'est vraiment du gaspillage (et de la recherche d'emmerdes quand on apprend à programmer).
Un bête 16f62x voire même un ancestral 16f84 est capable de faire la même chose et même ces bestioles là seraient largement surdimensionnées, un 12f629/675 suffirait mais ça serait peut-être un peu acrobatique .
Je venais suggérer un PIC12F683, 8 pattes, 6 IO, 4 AD 10 bit, 2 timer, 1 comparateur, OScint 8MHz 1%, on en trouve 10 pour 6€ sur Ebay port compris, ça fait moins mal quand on en grille un !
hello on est en 2013! l'assembleur c'est a mettre a la benne!
moi je partais vers un PIC16F84 ou 16F877