View  Edit  Attributes  History  Attach  Print  Search

ACCUEIL | ARDUINO > S'INSTALLER > DEBUTER > APPROFONDIR | PROCESSING | MECATRONIQUE | MATERIEL | OUTILS | TESTS | Plus...|
Python > Shell > ATELIERS Python + Qt > PyQt apps > PyQt+Arduino | Mes Robots | RepRap | Mes lib'Arduino | Mes shields Arduino | Mes distros | Les Mini-PC |
ATELIERS ARDUINO| VIDEOS | COMPRENDRE | REFERENCES | CODER | TECHNIQUE | GNU/LINUX | LIENS | Rien à voir |

Programmer le pcDuino : Python simple : Sortie numérique : Faire clignoter une LED sans delay() en utilisant un Timer.

Par X. HINAULT - Juin 2013

Ce que l'on va faire ici

  • Dans ce code,je vous montre comment faire clignoter une LED sans delay() en utilisant la fonction Pyduino timer(), ce qui permet de faire autre chose entre 2 clignotements d'une part mais surtout, ceci permet de faire chuter l'utilisation de la CPU à quasiment 0% puisqu'elle n'est sollicitée que lorsqu'il faut allumer/éteindre la LED.
  • Le principe de la fonction timer est le suivant : on précise le délai d'attente voulu en millisecondes et la fonction à appeler. Une fois le délai écoulé, la fonction voulue est appelée. On appelle à nouveau la fonction timer en fin de fonction pour un nouvel appel dans le délai voulu.
  • Retenez cette technique assez simple à utiliser, qui pourra permettre également de réaliser du "multi-tâches" au sein d'un même code, la fonction timer() pouvant être utilisées pour appeler plusieurs fonctions différentes gérant des tâches différentes avec des délais différents. Chose beaucoup plus simple à réaliser avec Pyduino qu'avec le langage Arduino natif !

Pré-requis

Matériel nécessaire

  • une plaque d'essai pour montage sans soudures,
  • des straps,
  • une LED rouge 5mm,
  • une résistance 1/4w de 270 Ohms environ,

Instructions de montage

  • Connecter sur la broche 2 (configurée en sortie) une LED et sa résistance (270 Ohms) en série connectée au 0V

Le montage à réaliser

Le fichier *.yno

Copier/coller ce code dans l'IDE Pyduino


# entete declarative
LED=2  # declare la broche a utiliser
etatLED=LOW # memorise etat LED
delai=250 # pause   a utiliser en millisecondes

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

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

        timer(delai, LEDEvent) # lance timer

# -- fin setup --

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

# -- fin loop --

# LEDEvent : appelé lors survenue evenement timer
def LEDEvent():

        global etatLED # traiter etatLED comme variable globale

        if etatLED==LOW:
                digitalWrite(LED,HIGH) # allume la LED
                Serial.println("La LED est allumee !")
                etatLED=HIGH # memorise etat LED

        else:  
                digitalWrite(LED,LOW) # eteint la LED
                Serial.println("La LED est eteinte !")
                etatLED=LOW # memorise etat LED

        timer(delai, LEDEvent) # relance le timer

 

Ce code est également disponible ici :

Le fichier *.py

Copier/coller ce code dans l'éditeur Geany :


#!/usr/bin/python
# -*- coding: utf-8 -*-

# exemple pyDUino - par X. HINAULT - www.mon-club-elec.fr
# Juin 2013 - Tous droits réservés - GPLv3
# voir : https://github.com/sensor56/pyDuino

# LED clignote - sans delay - avec timer

from pyduino import * # importe les fonctions Arduino pour Python

# entete declarative
LED=2  # declare la broche a utiliser
etatLED=LOW # memorise etat LED
delai=250 # pause   a utiliser en millisecondes

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

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

        timer(delai, LEDEvent) # lance timer

# -- fin setup --

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

# -- fin loop --

# LEDEvent : appelé lors survenue evenement timer
def LEDEvent():

        global etatLED # traiter etatLED comme variable globale

        if etatLED==LOW:
                digitalWrite(LED,HIGH) # allume la LED
                Serial.println("La LED est allumee !")
                etatLED=HIGH # memorise etat LED

        else:  
                digitalWrite(LED,LOW) # eteint la LED
                Serial.println("La LED est eteinte !")
                etatLED=LOW # memorise etat LED

        timer(delai, LEDEvent) # relance le timer


#--- obligatoire pour lancement du code --
if __name__=="__main__": # pour rendre le code executable
        setup() # appelle la fonction setup
        #while(1): loop() # appelle fonction loop sans fin
 

Ce code est également disponible ici : https://raw.github.com/sensor56/pyduino-exemples/master/1.Basics/BlinkWithoutDelayTimer.py

Utilisation

  • Réaliser le montage indiqué,
  • Appuyer sur le bouton <Exécuter> dans Geany
  • Une fenêtre de Terminal vide doit apparaître avec des messages et la LED doit clignoter