Modifications

Sauter à la navigation Sauter à la recherche
3 031 octets ajoutés ,  3 octobre 2016 à 12:27
aucun résumé de modification
Ligne 4 : Ligne 4 :  
'''Explorer''' est un programme assez simple. Il se déplace en ligne droite jusqu'à ce qu'il rencontre un obstacle, moment où il tourne sur lui-même puis redémarre en marche avant.
 
'''Explorer''' est un programme assez simple. Il se déplace en ligne droite jusqu'à ce qu'il rencontre un obstacle, moment où il tourne sur lui-même puis redémarre en marche avant.
   −
{{traduction}}
+
[[Fichier:Hack-MotorSkin-01.jpg|480px]]
 +
 
 +
{{ambox-stop|text=Ce programme nécessite un motor-skin + senseur ultrason (et régulateur de tension).}}
    
''' MOVIE '''
 
''' MOVIE '''
Ligne 31 : Ligne 33 :     
{{ambox|text=N'oubliez pas de presser le bouton utilisateur 1 (SW1) pour démarrer le corps du programme.}}
 
{{ambox|text=N'oubliez pas de presser le bouton utilisateur 1 (SW1) pour démarrer le corps du programme.}}
 +
 +
{{ambox-stop|text=L'invite REPL n'est pas disponible pendant que le programme fonctionne.}}
 +
 +
[[Fichier:explorer-press-to-start.jpg|640px]]
    
Vous pouvez simplement interrompre l'exécution du programme en pressant {{fname|CTRL+C}}
 
Vous pouvez simplement interrompre l'exécution du programme en pressant {{fname|CTRL+C}}
Ligne 57 : Ligne 63 :  
= 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">
 +
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">
 
<syntaxhighlight lang="python">
TODO!!!!!!!!!!
+
# Routine principale
 +
l.off()
 +
while True:
 +
    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