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' ) |