Vous avez raison : c'est la même chose.pourquoi utiliser case plutot que if then?
if c'est plus clair...
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 25/01/2015 revision 1 #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
symbol var_temp = w13 'variable temporaire
symbol Pos_actuelle = w12 'position courante
symbol Pos_cible = w11 'position cible
symbol Nb_de_pas = w10 'nombre de pas ? realiser
Symbol nombre = b3
Symbol touche = b2
Symbol compteur = b4
Symbol addition = w27
SYMBOL LeMenu=b5; defini un symbole pour la variable b5
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_ROTO=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal ############################
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
'Text sur display
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192,"APPUYEZ SUR VAL ")
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
;gestion clavier
clavier:
nombre = 0
Do
Do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
select touche
case = 12
pause 500
gosub ChoixValide
return 'fin de la saisie clavier
case = 11 'correction dernier chiffre
nombre = nombre/10
case < 240 'un chiffre valide est rentre
nombre = nombre*10 + touche 'ajout du chiffre
endselect
loop
' On fait ce qu'il faut en fonction du menu en cours et du Nombre qui vient d'etre valide.
' En particulier, on affiche un nouveau menu si c'est necessaire
ChoixValide:
select case LeMenu
case Menu_INIT
serout B.7,N2400_16,(254,128,"1:ROTO 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
LeMenu=Menu_EXPL
gosub clavier
; case Menu_ETAL:
case Menu_EXPL
select case touche
case 1
; Menu_ROTO
serout B.7,N2400_16,(254,128,"1:INIT 2:ETALON")
serout B.7,N2400_16,(254,192,"3:EXPL Choix:__")
do
readadc a.0 , touche
loop while touche > 250
pause 200
serout B.7,N2400_16,(254,207,#touche)
LeMenu=Menu_ROTO
case 2
;Menu Aiguillages
serout B.7,N2400_16,(254,128,"Aiguil __ Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
; serout B.7,N2400_16,(...)
; LeMenu=Menu_AIGU
case 3
; Menu Reglages
serout B.7,N2400_16,(254,128,"Etalon__ Voie 01")
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
EndSelect
EndSelect
gosub clavier
; case Menu_ROTO:
'...
; case Menu_AIGU:
'...
; case Menu_REGL:
'..
return
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 27/01/2015 revision 2 JYB #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
Symbol touche = b2
Symbol nombre = b3
Symbol compteur = b4
SYMBOL LeMenu = b5 ' Le Menu actuellement affiché
Symbol LaVoie = b6 ' La Voie actuellement sélectionnée
Symbol L_Aiguille = b7 ' L'aiguille actuellement choisie
symbol Nb_de_pas = w23 'nombre de pas à realiser
symbol Pos_cible = w24 'position cible
symbol Pos_actuelle = w25 'position courante
symbol var_temp = w26 'variable temporaire
Symbol addition = w27
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0 ;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1 ;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_ROTO=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal ############################
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
'Text sur display
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192,"APPUYEZ SUR VAL ")
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
LaVoie=1
L_Aiguille=1
;gestion clavier
Clavier:
nombre = 0
Do
Do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select [COLOR="#FF0000"][S]case[/S] [/COLOR]touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
[COLOR="#FF0000"]sertxd ("Touche=", #Touche,13,10)[/COLOR]
do ' On attends que la touche soit relâchée
readadc a.0 , touche
loop while touche < 240
select touche
case = 12
gosub ChoixValide
case = 11 'correction dernier chiffre
nombre = nombre/10
serout B.7,N2400_16,(254,135,#nombre," ")
else
nombre = nombre*10 + touche 'ajout du chiffre
serout B.7,N2400_16,(254,135,#nombre," ")
endselect
loop
' On fait ce qu'il faut en fonction du menu en cours et du Nombre qui vient d'etre valide.
' En particulier, on affiche un nouveau menu si c'est necessaire
ChoixValide:
select LeMenu
case Menu_INIT
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"1:ROTO 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
case Menu_ETAL:
LeMenu=Menu_ETAL
serout B.7,N2400_16,(254,128,"Etalon__ Voie ",#LaVoie)
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
case Menu_EXPL
select touche
case 1
LeMenu=Menu_ROTO
serout B.7,N2400_16,(254,128,"Voie choisie ",#LaVoie)
serout B.7,N2400_16,(254,192,"3:EXPL Choix:__")
case 2
LeMenu=Menu_AIGU
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
case 3
LeMenu=Menu_REGL
serout B.7,N2400_16,(254,128,"1:INIT 2:ETALON")
serout B.7,N2400_16,(254,192,"3:EXPL Choix:__")
EndSelect
case Menu_ROTO:
LaVoie=Nombre
serout B.7,N2400_16,(254,128,"Voie choisie",#LaVoie)
'...
case Menu_AIGU:
L_Aiguille=Nombre
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
'...
case Menu_REGL:
'..
EndSelect
return
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 25/01/2015 revision 1 #
VERSION SPECIALE POUR SIMULATEUR
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
Symbol touche = b2
Symbol nombre = b3
Symbol compteur = b4
SYMBOL LeMenu = b5 ' Le Menu actuellement affiché
Symbol LaVoie = b6 ' La Voie actuellement sélectionnée
Symbol L_Aiguille = b7 ' L'aiguille actuellement choisie
symbol Nb_de_pas = w23 'nombre de pas à realiser
symbol Pos_cible = w24 'position cible
symbol Pos_actuelle = w25 'position courante
symbol var_temp = w26 'variable temporaire
Symbol addition = w27
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_ROTO=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal ############################
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
'Text sur display
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192,"APPUYEZ SUR VAL ")
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
LaVoie=1
L_Aiguille=1
;gestion clavier
Clavier:
nombre = 0
Do
' Do
' readadc a.0 , touche ' On detecte un appui
' loop while touche > 250
serrxd touche
' pause 100
' for compteur = 0 to 19 ' on mesure 20 fois
' readadc a.0 , touche ' On lit la touche appuyee
' addition = addition + touche ' on fait la somme
' next
' touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
else : touche = 12 'validation
endselect
' do ' On attends que la touche soit relâchée
' readadc a.0 , touche
' loop while touche < 240
select touche
case = 12
gosub ChoixValide
case = 11 'correction dernier chiffre
nombre = nombre/10
serout B.7,N2400_16,(254,135,#nombre," ")
else
nombre = nombre*10 + touche 'ajout du chiffre
serout B.7,N2400_16,(254,135,#nombre," ")
endselect
loop
' On fait ce qu'il faut en fonction du menu en cours et du Nombre qui vient d'etre valide.
' En particulier, on affiche un nouveau menu si c'est necessaire
ChoixValide:
select LeMenu
case Menu_INIT
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"1:ROTO 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
case Menu_ETAL:
LeMenu=Menu_ETAL
serout B.7,N2400_16,(254,128,"Etalon__ Voie ",#LaVoie)
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
case Menu_EXPL
select touche
case 1
LeMenu=Menu_ROTO
serout B.7,N2400_16,(254,128,"Voie choisie ",#LaVoie)
serout B.7,N2400_16,(254,192,"3:EXPL Choix:__")
case 2
LeMenu=Menu_AIGU
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
case 3
LeMenu=Menu_REGL
serout B.7,N2400_16,(254,128,"1:INIT 2:ETALON")
serout B.7,N2400_16,(254,192,"3:EXPL Choix:__")
EndSelect
case Menu_ROTO:
LaVoie=Nombre
serout B.7,N2400_16,(254,128,"Voie choisie",#LaVoie)
'...
case Menu_AIGU:
L_Aiguille=Nombre
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
'...
case Menu_REGL:
'..
EndSelect
return
Merci d'indiquer ce que vous faites et ce que vous observez...le clavier fait n'importe quoi
Vous avez bien chargé le programme ad hoc ?j'ai testé le prog simulateur
mais pije rien
déja sur le menu de droite aucune variable ne change..
Ca écrit "Touche=240" ? c'est bien ça ?la lecture dans le terminal est
240 249 206 244 255 074 210 254
c'est quoi ça?
ce n'est pas les valeurs d'étalonnages du clavier puisque la touche val
devrait être inferieure à 20.
non pas touche=240Ca écrit "Touche=240" ? c'est bien ça ?
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 27/01/2015 revision 2 JYB #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
Symbol touche = b2
Symbol nombre = b3
Symbol compteur = b4
SYMBOL LeMenu = b5 ' Le Menu actuellement affiché
Symbol LaVoie = b6 ' La Voie actuellement sélectionnée
Symbol L_Aiguille = b7 ' L'aiguille actuellement choisie
symbol Nb_de_pas = w23 'nombre de pas à realiser
symbol Pos_cible = w24 'position cible
symbol Pos_actuelle = w25 'position courante
symbol var_temp = w26 'variable temporaire
Symbol addition = w27
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0 ;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1 ;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_ROTO=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal ############################
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
'Text sur display
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192,"APPUYEZ SUR VAL ")
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
LaVoie=1
L_Aiguille=1
;gestion clavier
Clavier:
nombre = 0
Do
Do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
sertxd ("Touche=", #Touche,13,10)
do ' On attends que la touche soit relâchée
readadc a.0 , touche
loop while touche < 240
select touche
case = 12
gosub ChoixValide
case = 11 'correction dernier chiffre
nombre = nombre/10
serout B.7,N2400_16,(254,135,#nombre," ")
else
nombre = nombre*10 + touche 'ajout du chiffre
serout B.7,N2400_16,(254,135,#nombre," ")
endselect
loop
' On fait ce qu'il faut en fonction du menu en cours et du Nombre qui vient d'etre valide.
' En particulier, on affiche un nouveau menu si c'est necessaire
ChoixValide:
select LeMenu
case Menu_INIT
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"1:ROTO 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
case Menu_ETAL:
LeMenu=Menu_ETAL
serout B.7,N2400_16,(254,128,"Etalon__ Voie ",#LaVoie)
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
case Menu_EXPL
select touche
case 1
LeMenu=Menu_ROTO
serout B.7,N2400_16,(254,128,"Voie choisie ",#LaVoie)
serout B.7,N2400_16,(254,192,"3:EXPL Choix:__")
case 2
LeMenu=Menu_AIGU
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
case 3
LeMenu=Menu_REGL
serout B.7,N2400_16,(254,128,"1:INIT 2:ETALON")
serout B.7,N2400_16,(254,192,"3:EXPL Choix:__")
EndSelect
case Menu_ROTO:
LaVoie=Nombre
serout B.7,N2400_16,(254,128,"Voie choisie",#LaVoie)
'...
case Menu_AIGU:
L_Aiguille=Nombre
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
'...
case Menu_REGL:
'..
EndSelect
return
Vous pouvez maintenant retirer le sertxd et continuer à mettre au point les différents menus.yoooopi ça marche
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 30/01/2015 revision 3 JYB #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
Symbol touche = b2
Symbol nombre = b3
Symbol compteur = b4
SYMBOL LeMenu = b5 ' Le Menu actuellement affich?
Symbol LaVoie = b6 ' La Voie actuellement s?lectionn?e
Symbol L_Aiguille = b7 ' L'aiguille actuellement choisie
symbol Nb_de_pas = w23 'nombre de pas ? realiser
symbol Pos_cible = w24 'position cible
symbol Pos_actuelle = w25 'position courante
symbol var_temp = w26 'variable temporaire
Symbol addition = w27
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0 ;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1 ;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_PONT=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
SYMBOL Menu_ROTO=6
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal #################
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
'Text sur display
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192,"APPUYEZ SUR # ")
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
LaVoie=1
L_Aiguille=1
;gestion clavier
Clavier:
nombre = 0
Do
Do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
do ' On attends que la touche soit rel?ch?e
readadc a.0 ,compteur
loop while compteur < 240
select case touche
case = 12
sertxd ("nombre=", #nombre,13,10)
gosub ChoixValide
case = 11 'correction dernier chiffre
nombre = nombre/10
serout B.7,N2400_16,(254,207,#touche)
else
nombre = nombre*10 + touche 'ajout du chiffre
serout B.7,N2400_16,(254,207,#touche)
endselect
loop
' On fait ce qu'il faut en fonction du menu en cours et du Nombre qui vient d'etre valide.
' En particulier, on affiche un nouveau menu si c'est necessaire
ChoixValide:
select LeMenu
case Menu_INIT
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
case Menu_EXPL
select case nombre
case 1
LeMenu=Menu_PONT
serout B.7,N2400_16,(254,128,"Voie en cours ",#LaVoie)
serout B.7,N2400_16,(254,192,"Voie choisie: __")
case 2
LeMenu=Menu_AIGU
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
case 3
LeMenu=Menu_REGL
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:ROTO Choix:__") nombre=0
endselect
case Menu_REGL
select case nombre
case 1
LeMenu=Menu_ETAL
serout B.7,N2400_16,(254,128,"RECHERCHE du 0 ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
case 2
LeMenu=Menu_ROTO
serout B.7,N2400_16,(254,128,"INIT AIGUILLAGE ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
case 3
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"Etalon__ Voie ",#LaVoie)
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
nombre=0
endselect
Endselect
return
return
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 30/01/2015 revision 3 JYB #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
Symbol touche = b2
Symbol nombre = b3
Symbol compteur = b4
SYMBOL LeMenu = b5 ' Le Menu actuellement affich?
Symbol LaVoie = b6 ' La Voie actuellement s?lectionn?e
Symbol L_Aiguille = b7 ' L'aiguille actuellement choisie
symbol Nb_de_pas = w23 'nombre de pas ? realiser
symbol Pos_cible = w24 'position cible
symbol Pos_actuelle = w25 'position courante
symbol var_temp = w26 'variable temporaire
Symbol addition = w27
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0 ;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1 ;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_PONT=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
SYMBOL Menu_ROTO=6
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal #################
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
'Text sur display
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192,"APPUYEZ SUR # ")
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
LaVoie=1
L_Aiguille=1
;gestion clavier
Clavier:
nombre = 0
Do
Do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
do ' On attends que la touche soit rel?ch?e
readadc a.0 ,compteur
loop while compteur < 240
select case touche
case = 12
sertxd ("nombre=", #nombre,13,10)
gosub ChoixValide
case = 11 'correction dernier chiffre
nombre = nombre/10
serout B.7,N2400_16,(254,207,#touche)
else
nombre = nombre*10 + touche 'ajout du chiffre
serout B.7,N2400_16,(254,207,#touche)
endselect
loop
' On fait ce qu'il faut en fonction du menu en cours et du Nombre qui vient d'etre valide.
' En particulier, on affiche un nouveau menu si c'est necessaire
ChoixValide:
select LeMenu
case Menu_INIT
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
case Menu_EXPL
select case nombre
case 1
LeMenu=Menu_PONT
serout B.7,N2400_16,(254,128,"Voie en cours ",#LaVoie)
serout B.7,N2400_16,(254,192,"Voie choisie: __")
case 2
LeMenu=Menu_AIGU
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
case 3
LeMenu=Menu_REGL
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:ROTO Choix:__") nombre=0
endselect
case Menu_REGL
select case nombre
case 1
LeMenu=Menu_ETAL
serout B.7,N2400_16,(254,128,"RECHERCHE du 0 ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
GOSUB Init_PaP:
case 2
LeMenu=Menu_ROTO
serout B.7,N2400_16,(254,128,"INIT AIGUILLAGE ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
case 3
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"Etalon__ Voie ",#LaVoie)
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
nombre=0
endselect
Endselect
return
'#####################################################
Init_PaP:'s/Programmes initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est ocult
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arriere
Do while FC_opto = 1 'en vitesse tres lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la detection faite, on initialise le compteur de pas ? 32000
return
'######################################################
return
Après lepourquoi je ne parviens pas à reboucler les menus ?
MAJ_Menu_EXPL:
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
RETURN
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 30/01/2015 revision 3 JYB #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
Symbol touche = b2
Symbol nombre = b3
Symbol compteur = b4
SYMBOL LeMenu = b5 ' Le Menu actuellement affich?
Symbol LaVoie = b6 ' La Voie actuellement s?lectionn?e
Symbol L_Aiguille = b7 ' L'aiguille actuellement choisie
symbol Nb_de_pas = w23 'nombre de pas ? realiser
symbol Pos_cible = w24 'position cible
symbol Pos_actuelle = w25 'position courante
symbol var_temp = w26 'variable temporaire
Symbol addition = w27
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0 ;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1 ;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_PONT=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
SYMBOL Menu_ROTO=6
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal #################
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
'Text sur display
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192,"APPUYEZ SUR # ")
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
LaVoie=1
L_Aiguille=1
;gestion clavier
Clavier:
nombre = 0
Do
Do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
do ' On attends que la touche soit rel?ch?e
readadc a.0 ,compteur
loop while compteur < 240
select case touche
case = 12
sertxd ("nombre=", #nombre,13,10)
gosub ChoixValide
case = 11 'correction dernier chiffre
nombre = nombre/10
serout B.7,N2400_16,(254,207,#touche)
else
nombre = nombre*10 + touche 'ajout du chiffre
serout B.7,N2400_16,(254,207,#touche)
endselect
loop
' On fait ce qu'il faut en fonction du menu en cours et du Nombre qui vient d'etre valide.
' En particulier, on affiche un nouveau menu si c'est necessaire
ChoixValide:
select LeMenu
case Menu_INIT
MAJ_Menu_EXPL:
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
return
case Menu_EXPL
select case nombre
case 1
LeMenu=Menu_PONT
serout B.7,N2400_16,(254,128,"Voie en cours ",#LaVoie)
serout B.7,N2400_16,(254,192,"Voie choisie: __")
case 2
LeMenu=Menu_AIGU
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
case 3
LeMenu=Menu_REGL
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:ROTO Choix:__") nombre=0
endselect
case Menu_REGL
select case nombre
case 1
LeMenu=Menu_ETAL
serout B.7,N2400_16,(254,128,"RECHERCHE du 0 ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
GOSUB Init_PaP:
GOSUB MAJ_Menu_EXPL
case 2
LeMenu=Menu_ROTO
serout B.7,N2400_16,(254,128,"INIT AIGUILLAGE ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
case 3
LeMenu=Menu_EXPL
serout B.7,N2400_16,(254,128,"Etalon__ Voie ",#LaVoie)
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
nombre=0
endselect
Endselect
return
'#####################################################
Init_PaP:'s/Programmes initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est ocult
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arriere
Do while FC_opto = 1 'en vitesse tres lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la detection faite, on initialise le compteur de pas ? 32000
return
'######################################################
return
#picaxe 40X2
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
Symbol touche = b2
Symbol nombre = b3
Symbol compteur = b4
SYMBOL LeMenu = b5 ' Le Menu actuellement affich?
Symbol LaVoie = b6 ' La Voie actuellement s?lectionn?e
Symbol L_Aiguille = b7 ' L'aiguille actuellement choisie
symbol Nb_de_pas = w23 'nombre de pas ? realiser
symbol Pos_cible = w24 'position cible
symbol Pos_actuelle = w25 'position courante
symbol var_temp = w26 'variable temporaire
Symbol addition = w27
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0 ;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1 ;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_PONT=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
SYMBOL Menu_ROTO=6
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192," 3 ")
pause 2000
serout B.7,N2400_16,(254,192," 2 ")
pause 2000
serout B.7,N2400_16,(254,192," 1 ")
pause 2000
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
LaVoie=1
L_Aiguille=1
'############## Programme principal #################
do
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
gosub clavier ' On attend un choix de menu
select case nombre
case = 0
case = 1
gosub pont
case = 2
gosub aiguil
case = 3
gosub reglage
else
gosub erreur
endselect
loop
Clavier:
nombre = 0
Do
Do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
do ' On attends que la touche soit rel?ch?e
readadc a.0 ,compteur
loop while compteur < 250
select case touche
case = 12 ' si un appui sur la touche est detect?
return ' Alors on enregsitre le nombre et on sort
case = 11 'correction dernier chiffre
if nombre = 0 then : return: end if ' Si on appui sur correction on fais un retour
nombre = nombre/10
serout B.7,N2400_16,(254,207,#touche)
else
if nombre > 9 then ' Verifie si c'est un troisieme chiffre qu'on rentre
nombre = touche ' Si c'est le cas on repart a zero
serout B.7,N2400_16,(254,206,"_",#nombre)
else
nombre = nombre*10 + touche 'ajout du chiffre
if nombre > 9 then
serout B.7,N2400_16,(254,206,#nombre)
else
serout B.7,N2400_16,(254,206,"_",#nombre)
end if
end if
endselect
loop
'#####################################################################################################
'############################## Programme secondaire #############################
'#####################################################################################################
pont:
do
serout B.7,N2400_16,(254,128,"Voie en cours: ",#LaVoie)
serout B.7,N2400_16,(254,192,"Voie choisie: __")
gosub clavier
select case nombre
case = 1
' on effectue la tache pour amener a la voie 1
' GOSUB changement de voie
exit
case = 2
'vers la voie 2 Etc ......
exit
else
' si la saisie est differente d'un chiffre attendu on affiche une erreur de saisie
gosub erreur
endselect
loop
return
Aiguil:
do
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
gosub clavier
select case nombre
case = 1
' on effectue la tache corrspondante
exit
case = 2
'on effectue la tache corrspondante Etc ......
exit
else
' si la saisie est differente d'un chiffre attendu on affiche une erreur de saisie
gosub erreur
endselect
loop
return
reglage:
do
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:ROTO Choix:__")
gosub clavier
select case nombre
case = 1
' on effectue le reglage du pont
serout B.7,N2400_16,(254,128,"RECHERCHE du 0 ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
gosub Init_PaP:
exit
case = 2
'on effectue le reglage des aiguilles
serout B.7,N2400_16,(254,128,"INIT AIGUILLAGE ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
pause 4000
exit
case = 3
' on effectue le ROTO ( je sais pas ce que c'est lol)
serout B.7,N2400_16,(254,128,"Etalon__ Voie ",#LaVoie)
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
gosub clavier
exit
else
' si la saisie est differente d'un chiffre attendu on affiche une erreur de saisie
gosub erreur
endselect
loop
return
'#####################################################
Init_PaP:'s/Programme initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est ocult
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arriere
Do while FC_opto = 1 'en vitesse tres lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la detection faite, on initialise le compteur de pas ? 32000
return
erreur:
serout B.7,N2400_16,(254,128," ERREUR ")
serout B.7,N2400_16,(254,192," DE SAISIE ")
pause 2000
return
#picaxe 40X2
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
Symbol touche = b2
Symbol nombre = b3
Symbol compteur = b4
SYMBOL LeMenu = b5 ' Le Menu actuellement affich?
Symbol LaVoie = b6 ' La Voie actuellement s?lectionn?e
Symbol L_Aiguille = b7 ' L'aiguille actuellement choisie
symbol Nb_de_pas = w23 'nombre de pas ? realiser
symbol Pos_cible = w24 'position cible
symbol Pos_actuelle = w25 'position courante
symbol var_temp = w26 'variable temporaire
Symbol addition = w27
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0 ;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1 ;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_PONT=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
SYMBOL Menu_ROTO=6
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192," 3 ")
pause 2000
serout B.7,N2400_16,(254,192," 2 ")
pause 2000
serout B.7,N2400_16,(254,192," 1 ")
pause 2000
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
LaVoie=1
L_Aiguille=1
'############## Programme principal #################
do
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
gosub clavier ' On attend un choix de menu
select case nombre
case = 0
'on fais rien
case = 1
gosub pont
case = 2
gosub aiguil
case = 3
gosub reglage
else
gosub erreur
endselect
loop
Clavier:
nombre = 0
Do
Do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
do ' On attends que la touche soit rel?ch?e
readadc a.0 ,compteur
loop while compteur < 250
select case touche
case = 12 ' si un appui sur la touche est detect?
return ' Alors on enregsitre le nombre et on sort
case = 11 'correction dernier chiffre
select case nombre
case = 0
return' Si on appui sur correction on fais un retour
case < 10
nombre = 0
serout B.7,N2400_16,(254,206,"__")
else
nombre = nombre/10
serout B.7,N2400_16,(254,206,"_",#nombre)
end select
else
if nombre > 9 then ' Verifie si c'est un troisieme chiffre qu'on rentre
nombre = touche ' Si c'est le cas on repart a zero
serout B.7,N2400_16,(254,206,"_",#nombre)
else
nombre = nombre*10 + touche 'ajout du chiffre
if nombre > 9 then
serout B.7,N2400_16,(254,206,#nombre)
else
serout B.7,N2400_16,(254,206,"_",#nombre)
end if
end if
endselect
loop
'#####################################################################################################
'############################## Programme secondaire #############################
'#####################################################################################################
pont:
do
serout B.7,N2400_16,(254,128,"Voie en cours: ",#LaVoie)
serout B.7,N2400_16,(254,192,"Voie choisie: __")
gosub clavier
select case nombre
case = 0
return
case = 1
' on effectue la tache pour amener a la voie 1
' GOSUB changement de voie
exit
case = 2
'vers la voie 2 Etc ......
exit
else
' si la saisie est differente d'un chiffre attendu on affiche une erreur de saisie
gosub erreur
endselect
loop
return
Aiguil:
do
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
gosub clavier
select case nombre
case = 0
return
case = 1
' on effectue la tache corrspondante
exit
case = 2
'on effectue la tache corrspondante Etc ......
exit
else
' si la saisie est differente d'un chiffre attendu on affiche une erreur de saisie
gosub erreur
endselect
loop
return
reglage:
do
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:ROTO Choix:__")
gosub clavier
select case nombre
case = 0
return
case = 1
' on effectue le reglage du pont
serout B.7,N2400_16,(254,128,"RECHERCHE du 0 ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
gosub Init_PaP:
exit
case = 2
'on effectue le reglage des aiguilles
serout B.7,N2400_16,(254,128,"INIT AIGUILLAGE ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
pause 4000
exit
case = 3
' on effectue le ROTO ( je sais pas ce que c'est lol)
serout B.7,N2400_16,(254,128,"Etalon__ Voie ",#LaVoie)
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
gosub clavier
exit
else
' si la saisie est differente d'un chiffre attendu on affiche une erreur de saisie
gosub erreur
endselect
loop
return
'#####################################################
Init_PaP:'s/Programme initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est ocult
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arriere
Do while FC_opto = 1 'en vitesse tres lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la detection faite, on initialise le compteur de pas ? 32000
return
erreur:
serout B.7,N2400_16,(254,128," ERREUR ")
serout B.7,N2400_16,(254,192," DE SAISIE ")
pause 2000
return
Disons que ma structure est plus proche d'une logique de débutant , je pense que c'est pour ca , étant moi même débutant ( enfin y'a un moment faudrait que j'arrête de dire ca !) .je prefere même ta structure de programmation que la version précedente
Ou bien garder la première structure et scruter non seulement le clavier, mais aussi les boutons poussoir dans la boucle principale.Si on veut faire plusieurs chose a la fois , il faudrait dédié un picaxe rien qu'a cette tache et un autre pour le reste par exemple , et une communication entre les deux ;
ah mais moi je n'ai pas besoin d'être agacé pour vous demander ce qu'il y a mieux de faireQuand vous serez suffisamment agacés par ces blocages intempestifs, vous serez plus motivés pour une autre approche.
Je me suis mal exprimé ; je ne doute pas que vous soyez motivé.ah mais moi je n'ai pas besoin d'être agacé pour vous demander ce qu'il y a mieux de faire
je vous suit à 100%
je suis motivé pour n'importe quoi, sauf que, soit je ne comprend pas, soit je ne sais pas le faire etc...
Code:
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 20141221 revision 2 #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
symbol Stop_rota = pinB.3 'arret moteur pas à pas
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction commande carte easydriver
symbol pas = B.6 'sortie pas
'*********** variables **************************
symbol var_temp = w13 'variable temporaire
symbol Pos_actuelle = w12 'position courante
symbol Pos_cible = w11 'position cible
symbol Nb_de_pas = w10 'nombre de pas ? realiser
'reserve bits = b0
symbol Sens = bit0
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
'*********** memorisation en EEPROM **************
'*****Table des positions des voies m?morisees ***
eeprom 0,(0,125,256,125,0,126,128,162)
'*********** Macros ******************************
'definition macro avec param?tres; Nb de pas, sens, p?riode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal ############################
Prog_princ:
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'eran
gosub Init_PaP
'do
' pos_cible = 32800
' gosub Mise_en_position
' pos_cible = 30000
' pause 6000
' gosub Mise_en_position
' pos_cible = 35000
' gosub Mise_en_position
' pause 10000
'loop
'#####################################################################
Init_PaP: 's/Programmes initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est oculte
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arri?re
Do while FC_opto = 1 'en vitesse tr?s lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la d?tection faite, on initialise le compteur de pas ? 32000
return
'#####################################################################
Mise_en_position: 's/Programme calcul du nombre de pas a faire et commande du moteur.
If pos_cible > pos_actuelle then 'si la future position est dans le sens positif
Nb_de_pas = pos_cible - pos_actuelle 'calcul du nombre de pas
sens = cw 'et du sens
else
Nb_de_pas = pos_actuelle - pos_cible 'sinon , on fait l'inverse
sens = ccw
endif
' 'optimisation du sens
' if Nb_de_pas > 4800 then 'Si on depasse 1/2 tour
' Nb_de_pas = 9600 - Nb_de_pas 'on prends le complement
' sens = sens + 1 'et on inverse le sens
' endif
PaP(Nb_de_pas,sens,vit_lente) 'Action du moteur
' serout B.7,N2400_16,(254,128,"Nb:",#Nb_de_pas," sens:",#sens," ")
return
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 20141221 revision 2 #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
symbol Stop_rota = pinB.3 'arret moteur pas à pas
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction commande carte easydriver
symbol pas = B.6 'sortie pas
'*********** variables **************************
symbol var_temp = w13 'variable temporaire
symbol Pos_actuelle = w12 'position courante
symbol Pos_cible = w11 'position cible
symbol Nb_de_pas = w10 'nombre de pas ? realiser
'reserve bits = b0
symbol Sens = bit0
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
'*********** memorisation en EEPROM **************
'*****Table des positions des voies m?morisees ***
eeprom 0,(0,125,256,125,0,126,128,162)
'*********** Macros ******************************
'definition macro avec param?tres; Nb de pas, sens, p?riode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal ############################
Prog_princ:
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'eran
gosub Init_PaP
do
[COLOR="#FF0000"] pos_cible = 32800[/COLOR] gosub Mise_en_position
' pos_cible = 30000
' pause 6000
' gosub Mise_en_position
' pos_cible = 35000
' gosub Mise_en_position
' pause 10000
loop
'#####################################################################
Init_PaP: 's/Programmes initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est oculte
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arri?re
Do while FC_opto = 1 'en vitesse tr?s lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la d?tection faite, on initialise le compteur de pas ? 32000
return
'#####################################################################
Mise_en_position: 's/Programme calcul du nombre de pas a faire et commande du moteur.
If pos_cible > pos_actuelle then 'si la future position est dans le sens positif
Nb_de_pas = pos_cible - pos_actuelle 'calcul du nombre de pas
sens = cw 'et du sens
else
Nb_de_pas = pos_actuelle - pos_cible 'sinon , on fait l'inverse
sens = ccw
endif
' 'optimisation du sens
' if Nb_de_pas > 4800 then 'Si on depasse 1/2 tour
' Nb_de_pas = 9600 - Nb_de_pas 'on prends le complement
' sens = sens + 1 'et on inverse le sens
' endif
PaP(Nb_de_pas,sens,vit_lente) 'Action du moteur
' serout B.7,N2400_16,(254,128,"Nb:",#Nb_de_pas," sens:",#sens," ")
return
#picaxe 40X2
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
symbol Stop_rota = pinB.3 'arret moteur pas ? pas
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
arrière touche = b2
Symbol nombre = b3
Symbol compteur = b4
SYMBOL LeMenu = b5 ' Le Menu actuellement affich?
Symbol LaVoie = b6 ' La Voie actuellement s?lectionn?e
Symbol L_Aiguille = b7 ' L'aiguille actuellement choisie
symbol Nb_de_pas = w23 'nombre de pas ? realiser
symbol Pos_cible = w24 'position cible
symbol Pos_actuelle = w25 'position courante
symbol var_J'espère = w26 'variable temporaire
Symbol addition = w27
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
SYMBOL Menu_INIT=0 ;defini un symbole menu_init pour la const 0
SYMBOL Menu_ETAL=1 ;idem pour 1 etc
SYMBOL Menu_EXPL=2
SYMBOL Menu_PONT=3
SYMBOL Menu_AIGU=4
SYMBOL Menu_REGL=5
SYMBOL Menu_ROTO=6
'reserve bits = b0
symbol Sens = bit0
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
serout B.7,N2400_16,(254,128,"INITIALISATION..")
serout B.7,N2400_16,(254,192," 3 ")
pause 2000
serout B.7,N2400_16,(254,192," 2 ")
pause 2000
serout B.7,N2400_16,(254,192," 1 ")
pause 2000
LeMenu=Menu_INIT; Charge la variable b5(le menu)valeur 0
LaVoie=1
L_Aiguille=1
'############## Programme principal #################
do
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:REGL Choix:__")
gosub clavier ' On attend un choix de menu
select case nombre
case = 0
'on fais rien
case = 1
gosub pont
case = 2
gosub aiguil
case = 3
gosub reglage
else
gosub erreur
endselect
loop
Clavier:
nombre = 0
Do
Do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
do ' On attends que la touche soit rel?ch?e
readadc a.0 ,compteur
loop while compteur < 250
select case touche
case = 12 ' si un appui sur la touche est detect?
return ' Alors on enregsitre le nombre et on sort
case = 11 'correction dernier chiffre
select case nombre
case = 0
return' Si on appui sur correction on fais un retour
case < 10
nombre = 0
serout B.7,N2400_16,(254,206,"__")
else
nombre = nombre/10
serout B.7,N2400_16,(254,206,"_",#nombre)
end select
else
if nombre > 9 then ' Verifie si c'est un troisieme chiffre qu'on rentre
nombre = touche ' Si c'est le cas on repart a zero
serout B.7,N2400_16,(254,206,"_",#nombre)
else
nombre = nombre*10 + touche 'ajout du chiffre
if nombre > 9 then
serout B.7,N2400_16,(254,206,#nombre)
else
serout B.7,N2400_16,(254,206,"_",#nombre)
end if
end if
endselect
loop
'#####################################################################################################
'############################## Programme secondaire #############################
'#####################################################################################################
pont:
do
serout B.7,N2400_16,(254,128,"Voie en cours: ",#LaVoie)
serout B.7,N2400_16,(254,192,"Voie choisie: __")
gosub clavier
select case nombre
case = 0
return
case = 1
' on effectue la tache pour amener a la voie 1
' GOSUB changement de voie
exit
case = 2
'vers la voie 2 Etc ......
exit
else
' si la saisie est differente d'un chiffre attendu on affiche une erreur de saisie
gosub erreur
endselect
loop
return
Aiguil:
do
serout B.7,N2400_16,(254,128,"Aiguil ",#L_Aiguille," Etat=_")
serout B.7,N2400_16,(254,192,"Cor ou choix:__")
gosub clavier
select case nombre
case = 0
return
case = 1
' on effectue la tache corrspondante
exit
case = 2
'on effectue la tache corrspondante Etc ......
exit
else
' si la saisie est differente d'un chiffre attendu on affiche une erreur de saisie
gosub erreur
endselect
loop
return
reglage:
do
serout B.7,N2400_16,(254,128,"1:PONT 2:AIGUIL")
serout B.7,N2400_16,(254,192,"3:ROTO Choix:__")
gosub clavier
select case nombre
case = 0
return
case = 1
' on effectue le reglage du pont
serout B.7,N2400_16,(254,128,"RECHERCHE du 0 ")
serout B.7,N2400_16,(254,192,"Attendre svp... ")
gosub Init_PaP
serout B.7,N2400_16,(254,128,"Pont en position")
serout B.7,N2400_16,(254,192," ")
pause 4000
serout B.7,N2400_16,(254,128,"valeur pas:",#Pos_actuelle)
serout B.7,N2400_16,(254,192,"Ajout de pas: ")
dir = cw ' on tourne dans un sens
do loop while Stop_rota = 0 ' On attend qu'on bascule l'inter
do while Stop_rota = 1 'tout pendant que l'inter est actif
pulsout pas,1 'on tourne en grande vitesse sens cw
inc Pos_actuelle
serout B.7,N2400_16,(254,139,#Pos_actuelle)
pause Vit_rapide
loop
serout B.7,N2400_16,(254,206,"_?")
do
gosub clavier ' on va lire le clavier
select case nombre
case = 0
dir = ccw ' on tourne dans l'autre sens
for var_temp = 1 to 99
pulsout pas,1
dec Pos_actuelle
serout B.7,N2400_16,(254,139,#Pos_actuelle)
next
case = 99
return
else
dir = cw ' on tourne dans l'autre sens
for var_temp = 1 to nombre
pulsout pas,1
inc Pos_actuelle
serout B.7,N2400_16,(254,139,#Pos_actuelle)
next
end select
loop
exit
case = 2
'on effectue le reglage des aiguilles
serout B.7,N2400_16,(254,128,"INIT AIGUILLAGE ")
serout B.7,N2400_16,(254,192,"Attendre svp ")
pause 4000
exit
case = 3
' on effectue le ROTO ( je sais pas ce que c'est lol)
serout B.7,N2400_16,(254,128,"Etalon__ Voie ",#LaVoie)
serout B.7,N2400_16,(254,192,"Cor:EXP Choix:__")
gosub clavier
exit
else
' si la saisie est differente d'un chiffre attendu on affiche une erreur de saisie
gosub erreur
endselect
loop
return
'#####################################################
Init_PaP:'s/Programme initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est ocult
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arriere
Do while FC_opto = 1 'en vitesse tres lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la detection faite, on initialise le compteur de pas ? 32000
return
erreur:
serout B.7,N2400_16,(254,128," ERREUR ")
serout B.7,N2400_16,(254,192," DE SAISIE ")
pause 2000
return