Ascenseur sans apport d'argent
mabe54 09 Mar 2014 11:36
Petit ascenseur Thymio qui fonctionne comme les vrais. Vous appuyez sur le numéro d'étage et le Thymio part pour l'étage demandé. Je ne vous explique pas le fonctionnement d'un ascenseur, vous le connaissez tous.
Faite une ligne noire de 600mm de long par 120mm de large. Sur cette surface, faite 7 bandes blanches de 18 mm de large dans le sens de la largeur.
Voir les images.
/thymio1.jpg]]
Voici le code:
#____________ Définition des variables
var Vg #Variable vitesse du moteur gauche
var Vd # Variable vitesse du moteur droit
var Etage #Variable nombre d'étage
var NoEtage #Variable numéro d'étage
var Desti #Variable de destination (No.d'étage)
var Temp #Variable de temporisation No.1
var Temp2 #Variable de temporisation No.2
#___________ Gestion des diodes (éteindre toutes les diodes)
call leds.top(0,0,0)
call leds.bottom.left(0,0,0)
call leds.bottom.right(0,0,0)
call leds.circle(0,0,0,0,0,0,0,0)
call leds.prox.h(0,0,0,0,0,0,0,0)
call leds.prox.v(0,0)
call leds.rc(0)
call leds.sound(0)
call leds.temperature(0,0)
call leds.top(0,0,0)
#__________________ Mesure du temps
timer.period[0]=700
#________________ Mise à zéro des variables
Vg=0
Vd=0
Etage=0
NoEtage=0
Desti=0
Temp=0
Temp2=0
#__________ Définition des routines
sub NoEtage #Routine pour compter les étages
Temp=0 #Mise à zéro de la temporisation pour le passage de la ligne d'étage
Etage=abs(Etage-Desti) #Nombre d'étage à passer
sub Rez #Routine pour descendre tous les étages
Etage=7 #Définition variable étage à 7
Vg = -100 #Définition de la variable vitesse moteur gauche
Vd = -80 #Définition de la variable vitesse moteur (valeur différente pour équilibre de vitesse)
motor.left.target = Vg #Initialisation moteur gauche
motor.right.target= Vd #Initialisation moteur
sub Monter #Routine pour monter
Temp=0 #Mise à zéro de la temporisation pour le passage de la ligne d'étage
Vg = 100
Vd = 93
motor.left.target = Vg
motor.right.target= Vd
sub Descendre #Routine pour descendre
Temp=0
Vg = -100
Vd = -80
motor.left.target = Vg
motor.right.target= Vd
sub Choix #Routine pour le choix de monter ou descendre
if NoEtage>Desti then
callsub Monter #Appel de la routine monter
else
callsub Descendre #Apelle de la routine pour descemdre
end
#__________ #Définition des fonction de la télécommande
onevent rc5
if rc5.command==1 then #Définition du bouton No.1
NoEtage=1 #Définition de la variable NoEtage
Etage=1 #Définition de la variable Etage pour le décompte
callsub NoEtage #Appel de la routine NoEtage
callsub Choix #Appel de la routine Choix
elseif rc5.command==2 then
NoEtage=2
Etage=2
callsub NoEtage
callsub Choix
elseif rc5.command==3 then
NoEtage=3
Etage=3
callsub NoEtage
callsub Choix
elseif rc5.command==4 then
NoEtage=4
Etage=4
callsub NoEtage
callsub Choix
elseif rc5.command==5 then
NoEtage=5
Etage=5
callsub NoEtage
callsub Choix
elseif rc5.command==6 then
NoEtage=6
Etage=6
callsub NoEtage
callsub Choix
elseif rc5.command==7 then
NoEtage=7
Etage=7
callsub NoEtage
callsub Choix
elseif rc5.command==0 then
callsub Rez
NoEtage=0 #Définition de la variable NoEtage à zéro pour éteindre les diodes
call leds.circle(0,0,0,0,0,0,0,0) #Eteinde les diodes
elseif rc5.command==87 then #Bouton "OK" de la télécommande pour tout remettre à zéro (reset)
Etage=0
NoEtage=0
Desti=0
Temp=0
Temp2=0
motor.left.target = 0
motor.right.target= 0
call leds.circle(0,0,0,0,0,0,0,0)
end
#___________ Définition des événements
onevent timer0 #Définition de la base temps
Temp=Temp+1 #Incrémentation de la variable Temp
Temp2=Temp2+1 #Incrémentation de la variable Temp2
#___________ Définition des capteurs de proximités
onevent prox
if Temp>1 then #Test de la variable de temporisation
when prox.ground.reflected[0] > 350 and Vg==100 do #Boucle de comptage
Etage=Etage - 1 #Incrémentation de la variable Etage
Desti=Desti+1 #Incrémentation de la variable Desti (destination)
end
end
if Temp>1 then
when prox.ground.reflected[0] > 350 and Vg==-100 do #Boucle de comptage
Etage=Etage - 1
Desti=Desti-1
end
end
#___________ Test de variables
if Etage == 0 then
Vg = 0
Vd = 0
motor.left.target = Vg
motor.right.target = Vd
end
#___________ contrôle d'allumage des diodes
if NoEtage ==1 then
call leds.circle(32,0,0,0,0,0,0,0)
elseif NoEtage ==2 then
call leds.circle(32,32,0,0,0,0,0,0)
elseif NoEtage ==3 then
call leds.circle(32,32,32,0,0,0,0,0)
elseif NoEtage ==4 then
call leds.circle(32,32,32,32,0,0,0,0)
elseif NoEtage ==5 then
call leds.circle(32,32,32,32,32,0,0,0)
elseif NoEtage ==6 then
call leds.circle(32,32,32,32,32,32,0,0)
elseif NoEtage ==7 then
call leds.circle(32,32,32,32,32,32,32,0)
end
#____________ Contrôle des buttées avant et arrière
if prox.horizontal[2]>1500 then
motor.left.target = 0
motor.right.target = 0
end
if prox.horizontal[5]>1500 or prox.horizontal[6] >1500 then
Temp2=0
motor.left.target = 10
motor.right.target = 12
end
#___________ Positionnement pour le départ
when Temp2>=2 do
motor.left.target = 0
motor.right.target = 0
end