Ligne 123 : |
Ligne 123 : |
| >>> | | >>> |
| </nowiki> | | </nowiki> |
| + | |
| + | = Inspectons le code = |
| + | |
| + | Voici le code avec quelques commentaires pour vous aider à comprendre son fonctionnement |
| + | |
| + | La toute première partie importe les éléments nécessaires et surtout la classe {{fname|Robot2Wheel}} qui permet de contrôler la plateforme 2 roues (via le MotorSkin). |
| + | |
| + | <syntaxhighlight lang="python"> |
| + | import pyb |
| + | import sys |
| + | |
| + | from pyb import delay, LED |
| + | from r2wheel import Robot2Wheel |
| + | </syntaxhighlight> |
| + | |
| + | Vient ensuite la définition de deux fonctions: |
| + | * {{fname|speed_control}} - qui permet de contrôler les valeurs de la vitesse (speed) et s'assure que le robot avance pour les vitesses positives et recule pour les vitesses négatives. |
| + | * {{fname|speed_delta_control}} - qui permet de contrôler la différence de vitesse entre les moteurs droit et gauche, fonctionnalité utilisée pour entamer des virages avec les touches "7" et "9". |
| + | |
| + | Le contenu de ces fonctions n'est pas pertinent à ce stade. Vous pouvez consulter le code pour de plus amples informations. |
| + | |
| + | 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: |
| + | |
| + | <syntaxhighlight lang="python"> |
| + | def console( derivative_fix=0 ): |
| + | print( '-'*20 ) |
| + | print( 'MotorSkin Interactive Console') |
| + | print( 'q: quit to REPL - quitter vers REPL') |
| + | print( '') |
| + | print( '8: increase speed - accelerer' ) |
| + | print( '2: decrease speed - ralentir' ) |
| + | print( '7: going left - aller a gauche') |
| + | print( '9: going right - aller a droite') |
| + | print( '4: turn left - tourner à gauche') |
| + | print( '6: turn right - tourner à droite') |
| + | print( '5: HALT - ARRET') |
| + | print( '-'*20) |
| + | print( 'INIT MOTORSKIN') |
| + | l = LED(4) # LED Bleue / Blue LED |
| + | l.off() |
| + | r2 = Robot2Wheel( derivative_fix=derivative_fix ) |
| + | r2.halt() |
| + | |
| + | print( 'READY') |
| + | l.on() |
| + | |
| + | # User standard input to read instruction via the REPL connection. |
| + | # Utiliser l'entrée standard pout lire les insctruction via la connexion REPL |
| + | stdin = sys.stdin |
| + | cmd = '' |
| + | speed = 0 |
| + | # Difference of speed between wheel - to have a bend turning |
| + | # Difference de vitesse entre les roues - pour prendre un virage |
| + | speed_delta = 0 |
| + | while cmd!='q': |
| + | # Blocking read 1 char from stdin |
| + | # Lecture bloquante de 1 caractere sur stdin |
| + | cmd = stdin.read(1) |
| + | |
| + | if cmd == 'q': |
| + | pass |
| + | elif cmd == '5': # Halt |
| + | r2.halt() |
| + | speed = 0 |
| + | speed_delta = 0 |
| + | print('halted') |
| + | |
| + | elif cmd == '8': # Increase Speed |
| + | if abs(speed_delta)>0: # abort bending |
| + | speed_delta = 0 |
| + | speed = speed_control( r2, speed, +0 ) |
| + | if r2.state in [Robot2Wheel.RIGHT_ROTATE, Robot2Wheel.LEFT_ROTATE]: |
| + | # stop the rotation... keep current speed |
| + | speed = speed_control( r2, speed, +0 ) |
| + | else: |
| + | speed = speed_control( r2, speed, +10 ) |
| + | print( 'speed:%i' % speed ) |
| + | |
| + | elif cmd == '2': # Decrease speed |
| + | if abs(speed_delta) >0: # abord bending |
| + | speed_delta = 0 |
| + | speed = speed_control( r2, speed, 0 ) |
| + | else: |
| + | speed = speed_control( r2, speed, -10 ) |
| + | print( 'speed:%i' % speed ) |
| + | |
| + | elif cmd == '9': # Bending (turning) on right |
| + | if speed<50: |
| + | print( 'bending:speed-too-low!') |
| + | else: |
| + | speed_delta = speed_delta_control( r2, speed, speed_delta, +10 ) |
| + | print( 'bending:%i @ %i' %(speed, speed_delta) ) |
| + | |
| + | elif cmd == '7': # Bending (turning) on left |
| + | if speed<50: |
| + | print( 'bending:speed-too-low!') |
| + | else: |
| + | speed_delta = speed_delta_control( r2, speed, speed_delta, -10 ) |
| + | print( 'bending:%i @ %i' %(speed, speed_delta) ) |
| + | |
| + | elif cmd == '6': # Turning right |
| + | r2.right( speed ) |
| + | print( 'right:%i' % speed ) |
| + | |
| + | elif cmd == '4': # turning left |
| + | r2.left( speed ) |
| + | print( 'left:%i' % speed ) |
| + | |
| + | |
| + | |
| + | # End of software |
| + | r2.halt() |
| + | l.off() |
| + | del(r2) |
| + | print( 'BYE' ) |
| + | </syntaxhighlight> |
| | | |
| = Corrigé la dérive = | | = Corrigé la dérive = |