REPL

Vous êtes maintenant confronté à un environnement de programmation interactif simple, capable de saisir des expressions individuelles, de les évaluer et d'afficher le résultat. Il s'agit d'une boucle Lire-Évaluer-Imprimer ou REPL (Read–Evaluate–Print loop). Il est important de connaître ce sigle, car avec Python, vous le rencontrerez souvent. 

Étape suivante : faire clignoter une LED

Comme l'invite le suggère, tapez « help() » et appuyez sur la touche entrée. Une liste de commandes possibles s'affiche : vous pouvez démarrer. En regardant cette liste de plus près, vous devinerez rapidement de quoi la carte est capable. Construite autour du µC STM32F405RG ARM Cortex-M4F, la carte dispose apparemment d'une horloge temps réel (RTC), d'un convertisseur analogique/numérique (ADC), d'un convertisseur numérique/analogique (DAC), de quatre LED, d'interrupteurs, d'un accéléromètre d'un générateur de nombres aléatoires (RNG), des interfaces I²C, SPI, UART, de lignes I/O et elle peut piloter des servomoteurs. Comme certaines fonctions de commande de ces périphériques sont également listées, l'aide s'avère relativement complète. Il suffit de regarder la carte pour repérer le connecteur de carte SD.

À l'invite, tapez la commande ci-dessous et appuyez sur <Entrée>. 
>>> pyb.LED(1).on()
Remarquez qu'une LED rouge à côté du poussoir USR s'allume. Répétez la commande en tapant « 2 » au lieu de « 1 » (utilisez les flèches pour retourner à la commande précédente et l'éditer), une LED verte s'allume juste à côté de la LED rouge. La 3e LED est jaune, la 4e bleue. À l'exception de la jaune, les LED sont extrêmement lumineuses et mieux vaut ne pas les regarder en face. Continuons en allumant la LED(3) ; à titre d'exercice, je vous laisse le soin d'éteindre les LED.

Pour faire clignoter une LED indéfiniment, il nous faut une boucle : ce sera une boucle « while ». Pour que la boucle ne s'arrête pas, utilisez une condition qui sera toujours vraie, par ex. la constante booléenne VRAI (TRUE). Saisissez la commande (n'oubliez pas le « : » en fin de ligne)
>>> while True:
Ensuite, tapez une commande LED. Le terminal indente automatiquement le texte conformément aux règles Python (trois points). Entrez une commande de délai pour fixer la fréquence de clignotement, 250 ms, par exemple. Votre programme doit ressembler à ceci :
>>> while True:
...     pyb.LED(3).toggle()
...     pyb.delay(250)
...     
Pour que cette boucle fonctionne, il faut d'abord arrêter le mode indentation en appuyant sur les touches Retour arrière, puis Entrée. La LED3 doit alors clignoter à la fréquence que vous avez définie.

Comme vous l'avez peut-être remarqué, le terminal n'accepte pas les commandes pendant l'exécution de la boucle. Pour arrêter la boucle et retourner à l'invite, appuyez sur Ctrl-C (commande d'interruption du programme en cours d'exécution). Dès lors, toutes les commandes saisies pendant l'exécution de la boucle vont à leur tour s'exécuter. Mieux vaut être prudent et ne pas entrer n'importe quoi !

Accéléromètre embarqué sur la pyboard

Voici une expérimentation rapide pour voir si l'accéléromètre embarqué fonctionne correctement. 
>>> while True:
...     print(pyb.Accel().x(),pyb.Accel().y(),pyb.Accel().z())
La sortie devrait être une liste sans fin de trois valeurs selon les axes x, y et z :
-1 -2 21
-1 -2 20
-2 -1 20
…
Comme précédemment, faites Ctrl-C pour retourner à l'invite. Ce test est intéressant car il montre la vitesse d'exécution d'une boucle apparemment simple. Il ne fait que lire un capteur et imprimer trois entiers. J'ai obtenu trois lignes par seconde, ce qui n'est pas très rapide.

Le programme n'est pas traduit en langage machine (compilé). Il est interprété au fur et à mesure et cela explique cette lenteur car même s'il n'y a qu'une instruction, (en omettant le while), elle est en réalité très complexe. Il serait possible d'améliorer les choses en créant des « modules figés (frozen modules) » , mais cela sous-entendrait la compilation complète du microprogramme de la pyboard, ce qui sort du cadre de cet article.