Modifications

Sauter à la navigation Sauter à la recherche
2 118 octets ajoutés ,  3 octobre 2016 à 12:48
Ligne 145 : Ligne 145 :     
Le corps du script se trouve dans la fonction {{fname|console()}} dont nous trouvons les différents éléments ci-dessous que nous allons élaguer pour en faciliter la lecture:
 
Le corps du script se trouve dans la fonction {{fname|console()}} dont nous trouvons les différents éléments ci-dessous que nous allons élaguer pour en faciliter la lecture:
 +
 +
Le corps de la fonction {{fname|console()}} débute par:
 +
* l'affichage du message d'acceuil
 +
* l'initialisation du motor skin
 +
* Allumage de la LED Bleue (qui indique que le programme est en cours de fonctionnement).
    
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Ligne 168 : Ligne 173 :  
print( 'READY')
 
print( 'READY')
 
l.on()
 
l.on()
+
</syntaxhighlight>
 +
 
 +
Cette partie du code:
 +
* définit {{fname|stdin}}, la dite "entrée standard" par laquelle arrive tous les caractères émis sur le port série correspondant à la ligne de commande (donc celui utilisé par REPL).
 +
* définit la variable {{fname|cmd}} qui contient le dernier caractère lu sur {{fname|stdin}} (donc la commande saisie par l'utilisateur).
 +
* définit les variables {{fname|speed}} et {{fname|speed_delta}}, servant à mémorisé la vitesse actuelle du mobile (ainsi que la différence de vitesse entre les moteurs... lorsque le robot prend un virage)
 +
 
 +
<syntaxhighlight lang="python">
 
# User standard input to read instruction via the REPL connection.
 
# User standard input to read instruction via the REPL connection.
 
# Utiliser l'entrée standard pout lire les insctruction via la connexion REPL
 
# Utiliser l'entrée standard pout lire les insctruction via la connexion REPL
Ligne 177 : Ligne 189 :  
# Difference de vitesse entre les roues - pour prendre un virage  
 
# Difference de vitesse entre les roues - pour prendre un virage  
 
speed_delta = 0   
 
speed_delta = 0   
 +
</syntaxhighlight>
 +
 +
Boucle de traitement, qui {{undeline|s'exécute aussi longtemps que la commande "q" n'est pas arrivée}} :
 +
 +
<syntaxhighlight lang="python">
 
while cmd!='q':
 
while cmd!='q':
 
# Blocking read 1 char from stdin
 
# Blocking read 1 char from stdin
 
# Lecture bloquante de 1 caractere sur stdin  
 
# Lecture bloquante de 1 caractere sur stdin  
 
cmd = stdin.read(1)
 
cmd = stdin.read(1)
 +
</syntaxhighlight>
    +
Traitement des différentes commandes.
 +
 +
<syntaxhighlight lang="python">
 
if cmd == 'q':
 
if cmd == 'q':
 
pass
 
pass
Ligne 190 : Ligne 211 :  
print('halted')
 
print('halted')
   −
elif cmd == '8': # Increase Speed
+
elif cmd == '8': # Accroître la vitesse
if abs(speed_delta)>0: # abort bending
+
if abs(speed_delta)>0: # abandonner le virage
 
speed_delta = 0
 
speed_delta = 0
 
speed = speed_control( r2, speed, +0 )
 
speed = speed_control( r2, speed, +0 )
 
if r2.state in [Robot2Wheel.RIGHT_ROTATE, Robot2Wheel.LEFT_ROTATE]:
 
if r2.state in [Robot2Wheel.RIGHT_ROTATE, Robot2Wheel.LEFT_ROTATE]:
# stop the rotation... keep current speed
+
# arrêter la rotation... garder la vitesse actuelle
 
speed = speed_control( r2, speed, +0 )
 
speed = speed_control( r2, speed, +0 )
 
else:
 
else:
 +
                                # Simplement accroître la vitesse
 
speed = speed_control( r2, speed, +10 )
 
speed = speed_control( r2, speed, +10 )
 
print( 'speed:%i' % speed )
 
print( 'speed:%i' % speed )
   −
elif cmd == '2': # Decrease speed
+
elif cmd == '2': # Diminuer la vitesse
if abs(speed_delta) >0: # abord bending
+
if abs(speed_delta) >0: # Abandonner le virage
 
speed_delta = 0
 
speed_delta = 0
 
speed = speed_control( r2, speed, 0 )
 
speed = speed_control( r2, speed, 0 )
 
else:
 
else:
 +
                                # Simplement diminuer la vitesse
 
speed = speed_control( r2, speed, -10 )
 
speed = speed_control( r2, speed, -10 )
 
print( 'speed:%i' % speed )
 
print( 'speed:%i' % speed )
   −
elif cmd == '9': # Bending (turning) on right
+
elif cmd == '9': # Entamer un virage sur la droite
 
if speed<50:
 
if speed<50:
 +
                                # Il faut une vitesse minimale pour entamer une
 +
                                # opération de virage
 
print( 'bending:speed-too-low!')
 
print( 'bending:speed-too-low!')
 
else:
 
else:
 +
                                # Appliquer une différence de vitesse sur les deux moteurs => virage
 
speed_delta = speed_delta_control( r2, speed, speed_delta, +10 )
 
speed_delta = speed_delta_control( r2, speed, speed_delta, +10 )
 
print( 'bending:%i @ %i' %(speed, speed_delta) )
 
print( 'bending:%i @ %i' %(speed, speed_delta) )
   −
elif cmd == '7': # Bending (turning) on left
+
elif cmd == '7': # Entamer un virage sur la gauche
 
if speed<50:
 
if speed<50:
 +
                                # Il faut une vitesse minimale pour entamer une
 +
                                # opération de virage
 
print( 'bending:speed-too-low!')
 
print( 'bending:speed-too-low!')
 
else:
 
else:
 +
                                # Appliquer une différence de vitesse sur les deux moteurs => virage
 
speed_delta = speed_delta_control( r2, speed, speed_delta, -10 )
 
speed_delta = speed_delta_control( r2, speed, speed_delta, -10 )
 
print( 'bending:%i @ %i' %(speed, speed_delta) )
 
print( 'bending:%i @ %i' %(speed, speed_delta) )
   −
elif cmd == '6': # Turning right
+
elif cmd == '6': # Tourner sur place à droite
 
r2.right( speed )
 
r2.right( speed )
 
print( 'right:%i' % speed )
 
print( 'right:%i' % speed )
   −
elif cmd == '4': # turning left
+
elif cmd == '4': # tourner sur place à gauche
 
    r2.left( speed )
 
    r2.left( speed )
 
    print( 'left:%i' % speed )
 
    print( 'left:%i' % speed )
       +
</syntaxhighlight>
   −
# End of software
+
Fin du script... lorsque la commande "q" est saisie et que la boucle {{fname|while}} est terminée.
 +
* Arrêt du mobile
 +
* Extinction de la LED (le programme n'est plus actif)
 +
* Retour à l'invite de commande REPL
 +
 
 +
<syntaxhighlight lang="python">
 +
# Fin de programme
 
r2.halt()
 
r2.halt()
 
l.off()
 
l.off()
 +
        # destruction de l'instance de l'objet Robot2Wheel créé en début de script
 
del(r2)
 
del(r2)
 
print( 'BYE' )
 
print( 'BYE' )
29 896

modifications

Menu de navigation