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 15 : |
Ligne 17 : |
| | | |
| = Copier = | | = Copier = |
− | Pour copier le script sur la carte, brancher votre pyboard et copier le fichier {{fname|xxxx}} depuis les sources disponibles dans notre dépôt GitHub. | + | Pour copier le script sur la carte, brancher votre pyboard et copier le fichier {{fname|explorer.py}} depuis les sources disponibles (ou l'archive) dans [[Hack-MotorSkin-Installer|notre dépôt GitHub (voir notes d'installation)]]. |
| | | |
| [[Fichier:Hack-MotorSkin-Demo1-00.jpg|800px]] | | [[Fichier:Hack-MotorSkin-Demo1-00.jpg|800px]] |
Ligne 24 : |
Ligne 26 : |
| Vous pouvez tester très facilement le script à l'aide d'une connexion REPL. | | Vous pouvez tester très facilement le script à l'aide d'une connexion REPL. |
| | | |
− | Saisissez simplement le code suivant en ligne de commande: | + | Saisissez simplement le code suivant en ligne de commande pour charger et exécuter le code disponible dans {{fname|explorer.py}} |
| + | |
| + | <syntaxhighlight lang="python"> |
| + | from explorer import * |
| + | </syntaxhighlight> |
| + | |
| + | {{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]] |
| | | |
− | {{traduction}} | + | Vous pouvez simplement interrompre l'exécution du programme en pressant {{fname|CTRL+C}} |
| | | |
| = Démarrer au boot = | | = Démarrer au boot = |
− | Pour démarrer automatiquement le script au démarrage de votre pyboard.
| + | Il est possible de démarrer automatiquement le programme au démarrage de votre pyboard. |
| + | |
| + | Vous avez deux options: |
| + | * Charger automatiquement {{fname|explorer.py}} au démarrage de la PyBoard. '''Méthode recommandée et décrite ci-dessous'''. |
| + | * Copiez le contenu de {{fname|explorer.py}} dans {{fname|main.py}} . |
| | | |
| Saisissez la ligne suivante dans votre fichier {{fname|main.py}} | | Saisissez la ligne suivante dans votre fichier {{fname|main.py}} |
| | | |
− | {{traduction}}
| + | <syntaxhighlight lang="python"> |
| + | from explorer import * |
| + | </syntaxhighlight> |
| + | |
| + | [[Fichier:Hack-MotorSkin-Demo1-05.jpg]] |
| + | |
| + | Puis '''éjectez votre PyBoard''' et pressez le '''bouton Reset''' (également disponible sur le Motor-Skin). |
| + | |
| + | Le programme '''explorer''' démarrera automatiquement durant la séquence d'initialisation (boot) de la PyBoard. |
| + | |
| + | Il ne vous restera plus qu'à presser le bouton SW1 pour l'activer. |
| | | |
| = 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: |
| + | 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}} |