Différences entre versions de « MicroPython-Hack-Debug »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 51 : Ligne 51 :
  
 
=== Les print() ===
 
=== Les print() ===
 +
 +
Si vous vous êtes penché sur le tutoriel concernant l'[[MicroPython-Hack-REPL|invite REPL]], vous y aurez appris qu'il est possible de dialoguer avec la PyBoard par l'intermédiaire d'un simple terminal.
 +
 +
Figurez-vous que si un programme Python utilise une instruction '''print()''' alors cette dernière est envoyée sur la console.
 +
 +
J'ai donc modifié mon programme Python pour qu'il affiche ('''print''')des informations ici et là histoire de trouver où se localise mon problème.
 +
 +
<nowiki>import pyb
 +
 +
def wait_pin_change(pin):
 +
    # attendre que la broche change de valeur
 +
    cur_value = pin.value()
 +
    # Elle doit être stable pendant un temps continu de 20ms
 +
    active = 0
 +
    while active < 20:
 +
        if pin.value() != cur_value:
 +
            active += 1
 +
        else:
 +
            active = 0
 +
        pyb.delay(1)
 +
 +
pin_x4 = pyb.Pin('X4', pyb.Pin.IN, pyb.Pin.PULL_DOWN)
 +
while True:
 +
    print( 'attendre pression bouton' )
 +
    wait_pin_change(pin_x4)
 +
    print( 'bouton enfonce' )
 +
    pyb.LED(4).toggle()
 +
    print( 'LED modifiee' )
 +
    pyb.LED(2).on()
 +
    print( 'LED 2 allumee')
 +
    pyb.delay(2000)
 +
    pyb.LED(2).off()
 +
    print( 'LED 2 eteinte')</nowiki>
  
 
{{MicroPython-Hack-Debug-TRAILER}}
 
{{MicroPython-Hack-Debug-TRAILER}}

Version du 11 mai 2015 à 16:00


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Introduction

Vous écrivez-vos premiers bouts de code... ou modifiez un code existant et PATATRA, PLUS RIEN NE MARCHE!

En plus, en le relisant votre code, l'erreur ne saute pas aux yeux.

C'est frustrant et la première question qui vient, c'est comment déboguer facilement du code MicroPython.

A l'ancienne

C'est les vieilles méthodes qui marchent le mieux!

Au tout début de la programmation, il suffisait d'afficher des messages à l'écran (un peu partout), cela permettait de déterminer la partie du code qui fonctionne et donc d'approcher par étape successive la partie du code qui était problèmatique.

C'est bien beau tout cela mais sur la PyBoard, il n'y a pas d'écran! Mais nous avons néanmoins 4 LEDs utilisateurs.

Utiliser les LEDs

Allumer les LEDs (voire en combinaison) dans votre programme permet de déterminer (1) s'il fonctionne et (2) de déterminer où il s'est arrêté.

J'ai repris le programme du point "déparasiter une entrée" et je l'ai modifié pour faire une lecture en broche X4 puis attendre deux seconde.

Malheureusement, ma modification faite sur le coin d'une table ne fonctionnait pas (une erreur de distraction) et j'ai donc essayé d'allumer la LED(2) pendant la pause.

import pyb

def wait_pin_change(pin):
    # attendre que la broche change de valeur
    cur_value = pin.value()
    # Elle doit être stable pendant un temps continu de 20ms
    active = 0
    while active < 20:
        if pin.value() != cur_value:
            active += 1
        else:
            active = 0
        pyb.delay(1)

pin_x4 = pyb.Pin('X4', pyb.Pin.IN, pyb.Pin.PULL_DOWN)
while True:
    wait_pin_change(pin_x4)
    pyb.LED(4).toggle()
    pyb.LED(2).on()
    delay(2000)
    pyb.LED(2).off()


Notez les instructions pyb.LED(2).on() et pyb.LED(2).off() qui me permettent de savoir quand le programme cycle.

Il y a une énorme erreur dans ce code (hé oui, parfois pas les yeux en face des trous)... la LED(2) s'allume puis la PyBoard fait des trucs bizarres et reste dans un état non fonctionnel.

Les print()

Si vous vous êtes penché sur le tutoriel concernant l'invite REPL, vous y aurez appris qu'il est possible de dialoguer avec la PyBoard par l'intermédiaire d'un simple terminal.

Figurez-vous que si un programme Python utilise une instruction print() alors cette dernière est envoyée sur la console.

J'ai donc modifié mon programme Python pour qu'il affiche (print)des informations ici et là histoire de trouver où se localise mon problème.

import pyb

def wait_pin_change(pin):
    # attendre que la broche change de valeur
    cur_value = pin.value()
    # Elle doit être stable pendant un temps continu de 20ms
    active = 0
    while active < 20:
        if pin.value() != cur_value:
            active += 1
        else:
            active = 0
        pyb.delay(1)

pin_x4 = pyb.Pin('X4', pyb.Pin.IN, pyb.Pin.PULL_DOWN)
while True:
    print( 'attendre pression bouton' )
    wait_pin_change(pin_x4)
    print( 'bouton enfonce' )
    pyb.LED(4).toggle()
    print( 'LED modifiee' )
    pyb.LED(2).on()
    print( 'LED 2 allumee')
    pyb.delay(2000)
    pyb.LED(2).off()
    print( 'LED 2 eteinte')



Créer par Meurisse D. pour MCHobby.be - Translated by Meurisse D. for MCHobby.be

Traduit avec l'autorisation de micropython.org - Translated with the authorisation of micropython.org

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.