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}} |