Main

Référence : Fonctions Pyduino

loop()


Description

Après avoir créé une fonction setup(), qui initialise et fixe les valeurs de démarrage du programme, la fonction loop () (boucle en anglais) fait exactement ce que son nom suggère et s'exécute en boucle sans fin, permettant à votre programme de s'exécuter et de répondre. Utiliser cette fonction pour contrôler activement les broches E/S de votre mini-PC.

Syntaxe

def loop():  
        return # si vide

Truc

Il est possible de stopper la fonction loop() si elle n'est pas utilisée, de façon à économiser de la CPU, en ajoutant la ligne suivante au niveau de l'entête déclarative :

noLoop=True

De la même façon, il est possible de stopper loop au sein d'une fonction en faisant :

global noLoop
noLoop=True

Exemples

Codes *.yno à copier/coller dans l'IDE Pyduino
Voir ici si vous préférez convertir le code Pyduino en Python pour l'utiliser avec l'éditeur Geany par exemple.

Le code minimum


# exemple pyDUino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3

# code minimal

# entete declarative

#--- setup ---
def setup():
        return  # si vide

# -- fin setup --

# -- loop --
def loop():
        return  # si vide

# -- fin loop --
 

Lecture d'un bouton poussoir :


# exemple pyDUino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3

# test digitalRead

# entete declarative
BP=2  # declare la broche a utiliser
APPUI=LOW # valeur broche lors appui

#--- setup ---
def setup():
        pinMode(BP,PULLUP) # met la broche en entree avec rappel au plus actif
        Serial.println("La broche 2 est en entree avec rappel au plus actif !")

# -- fin setup --

# -- loop --
def loop():

        if(digitalRead(BP)==APPUI): # si appui
                Serial.println("Appui BP!")
                delay(250)  # anti-rebond

        delay(100) # pause entre 2 lecture du BP

# -- fin loop --
 

Faire clignoter une LED

# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3

# LED clignote

# entete declarative
LED=2  # declare la broche a utiliser

#--- setup ---
def setup():
        pinMode(LED,OUTPUT) # met la broche en sortie
        Serial.println("La broche " +str(LED)+ " est en sortie !")

# -- fin setup --

# -- loop --
def loop():

        digitalWrite(LED,HIGH) # allume la LED
        Serial.println("La LED est allumée !")

        delay(1000) # pause en millisecondes

        digitalWrite(LED,LOW) # eteint la LED
        Serial.println("La LED est éteinte !")

        delay(1000) # pause en millisecondes


# -- fin loop --
 

Discussion technique

  • L'inconvénient majeur d'un appel de la fonction loop() automatique à la façon Arduino, c'est un usage élevé de la CPU... : 100% en fait, alors que la tâche exécutée par loop() n'est pas très conséquente.
  • Il est donc beaucoup plus judicieux d'auto-appeler loop() à l'aide de la fonction Pyduino timer() qui permet d'appeler une fonction après un intervalle voulu en millisecondes, sans mobiliser la CPU durant le temps d'attente. Du coup, l'usage CPU chute fortement, à quelques %. Cette solution sera donc à préférer et à privilégier en pratique.
  • Voici un exemple :
# exemple pyDuino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3

# code minimal avec Timer (décharge CPU)

# entete declarative
noLoop=True # bloque loop automatique

#--- setup ---
def setup():

        # instructions setup ici

        loop() # premier appel de la fonction loop

# -- fin setup --

# -- loop --
def loop(): # la fonction loop s'auto-appelle a intervalles reguliers

        # instructions loop ici

        timer(100, loop) # appelle fonction loop apres intervalle en ms

        # resultats sur pcduino avec htop :
        # en mode loop auto permanent : usage CPU = 100%
        # 100 ms ~10 appels par seconde = 5% usage CPU
        # 10 ms ~ 100 appels par seconde = 20% usage CPU
        # 5 ms ~ 200 appels par seconde = 30% usage CPU => bon compromis
        # 1 ms ~ 1000 appels par seconde = 60% usage CPU
        # 0.5ms ~ 2000 appels par seconde = 75% usage CPU
        # 0.1ms ~ 10 000 appels par seconde = 95% usage CPU

# -- fin loop --
 

Commentaires utilisateurs

Aucun


Page d'accueil de la référence Pyduino en français

Corrections, suggestions et nouvelle documentation peuvent être postées à l'adresse suivante : support_at_mon-club-elec_point_fr

Cette page a été réalisée par Xavier HINAULT (2013) (www.mon-club-elec.fr) et est sous licence Creative Commons Attribution-ShareAlike 3.0.