Modifications

Sauter à la navigation Sauter à la recherche
2 103 octets ajoutés ,  3 octobre 2016 à 12:53
aucun résumé de modification
Ligne 2 : Ligne 2 :     
= Introduction =
 
= Introduction =
{{traduction}}
  −
   
'''StdinCtrl''' est un programme assez simple qui permet de contrôler votre PyBoard depuis un terminal via la console REPL. Une fois démarré, vous pourrez facilement contrôler la direction et la vitesse de votre bolide à partir des touches du pavé numérique.
 
'''StdinCtrl''' est un programme assez simple qui permet de contrôler votre PyBoard depuis un terminal via la console REPL. Une fois démarré, vous pourrez facilement contrôler la direction et la vitesse de votre bolide à partir des touches du pavé numérique.
   Ligne 145 : Ligne 143 :     
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 171 :  
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 187 :  
# 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 {{underline|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 209 :  
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>
 +
 +
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
   −
# End of software
+
<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 837

modifications

Menu de navigation