Modifications

Sauter à la navigation Sauter à la recherche
2 787 octets ajoutés ,  20 août 2016 à 13:14
Ligne 57 : Ligne 57 :  
= Inspectons le code =
 
= Inspectons le code =
   −
{{traduction}}
+
Voici le code avec quelques commentaires pour vous aider à comprendre son fonctionnement
 +
 
 +
La toute première partie importe les élément nécessaire et surtout la classe {{fname|Robot2Wheel}} qui permet de contrôler la plateforme 2 roues (via le MotorSkin).
 +
 
 +
<syntaxhighlight lang="python">
 +
from pyb import delay, LED
 +
from r2wheel import Robot2Wheel                                           
 +
 
 +
r2 = Robot2Wheel()
 +
l = LED(4)  # LED Bleue
 +
</syntaxhighlight>
 +
 
 +
Ensuite, nous déclarons une variable {{fname|MIN_DISTANCE}} indiquant la distance minimale en dessous de laquelle il faut tourner pour éviter l'objet.
 +
<syntaxhighlight lang="python">
 +
MIN_DISTANCE = 20
 +
</syntaxhighlight>
 +
 
 +
Ensuite vient la déclaration de la fonction {{fname|drive_robot()}} qui pilote le robot.
 +
 
 +
Son seul travail est de faire avancer le robot s'il est à l'arrêt et qu'il n'y a rien devant.
 +
 
 +
Un petit test récurrent {{fname|if r2.distance() < MIN_DISTANCE:}} permet détecter un obstacle. Auquel cas, il fait pivoter le robot puis le met à l'arrêt.
 +
 
 +
Cette tâche est répétée indéfiniment... pour autant que le bouton utilisateur SW1 n'est pas pressé. 
    
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
TODO!!!!!!!!!!
+
def drive_robot():
 +
    r2.forward()
 +
    # Tant que pas bouton User SW1 --> Continuer
 +
    while not( r2.button_pressed(1) ):
 +
        # Si inferieur a la distance de securite --> tourner
 +
        if r2.distance() < MIN_DISTANCE:
 +
            r2.halt()
 +
            delay(100)
 +
            # reculer pendant 1/3 seconde à vitesse réduite
 +
            r2.backward( 50 )
 +
            delay( 300 )
 +
 
 +
            # tourner à droite pendant 1/3 de seconde
 +
            r2.right()
 +
            delay( 300 )
 +
 
 +
            # Passer à l'arrêt
 +
            r2.halt()
 +
            delay(100)
 +
 
 +
        # rien devant --> Marche avant
 +
        if (r2.state == Robot2Wheel.HALTED) and (r2.distance() > MIN_DISTANCE):
 +
            r2.forward()
 +
    r2.halt()
 +
</syntaxhighlight>
 +
 
 +
La dernière partie est le corps principal. Il est exécuté automatiquement au chargement du module.
 +
 
 +
Cette partie du code:
 +
* Eteint la LED utilisateur
 +
* Attend que l'utilisateur presse sur le bouton SW1
 +
** Allume la LED utilisateur
 +
** Passe le relais à la fonction {{fname|drive_robot()}}<br />'''Cette dernière fonction n'arrête que lorsque l'utilisateur re-presse sur le bouton SW1''' (voir explication ci-dessus)
 +
** Eteint la LED utilisateur
 +
** Fait une pause de 0.3 seconde
 +
 
 +
<syntaxhighlight lang="python">
 +
# Routine principale
 +
l.off()
 +
while True:
 +
    #DEBUG: print( 'Wait' )
 +
    if r2.button_pressed(1):
 +
        # Deparasitage logiciel
 +
        delay( 10 )
 +
        if r2.button_pressed(1) == True:
 +
          # Signaler le démarrage
 +
          l.on()
 +
          delay( 2000 )
 +
          # Piloter le robot
 +
          drive_robot()
 +
          l.off()
 +
          delay( 2000 )
 +
 
 +
    delay( 300 ) # ne rien faire
 
</syntaxhighlight>
 
</syntaxhighlight>
    
{{Hack-MotorSkin-TRAILER}}
 
{{Hack-MotorSkin-TRAILER}}
29 917

modifications

Menu de navigation