Modifications

Sauter à la navigation Sauter à la recherche
3 758 octets ajoutés ,  18 septembre 2016 à 22:28
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 =
29 915

modifications

Menu de navigation