Deux possibilités : le polling et le callback
La grande force de Pymata4 consiste à gérer intelligemment les lectures.
Le polling (sondage) est la méthode classique : dans la boucle infinie, on va lire à intervalles réguliers les valeurs sur une patte donnée.
Le callback est souvent plus efficace. Une patte initialisée en lecture va surveiller les valeurs. En cas de variation suffisante des mesures, une fonction (callback) sera exécutée. La fonction aura comme paramètres la valeur lue et la date de modification.
On retrouvera ces deux possibilités (que l’on peut coupler), que soit une lecture logique ou analogique.
Lecture logique (0 ou 1)
On utilise les méthodes set_digital_input(pin,callback) et set_digital_read(pin).
Un exemple avec un callback uniquement
from pymata4 import pymata4 import sys import time carte = pymata4.Pymata4() print("--------------- Début --------------") # Constantes Switch = 2 # port du switch #------------------ fonction callback appelée lors d'un changement du switch def rapporter(data): pin = data[1] val= data[2] temp = data[3] #date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(temp)) date = time.strftime("%H:%M:%S", time.localtime(temp)) if (val==1): print(f"Mise à ON à {date}") else : print(f"Mise à OFF à {date}") #---------------- programme principal try : carte.set_pin_mode_digital_input(Switch,callback=rapporter) time.sleep(1) while True: time.sleep(0.1) except KeyboardInterrupt : # si on tape Ctl+C print("--------------- Fin --------------") carte.shutdown() sys.exit(0)
Un exemple par sondage
from pymata4 import pymata4 import sys import time carte = pymata4.Pymata4() print("--------------- Début --------------") # Constantes Delai=5 # délai entre deux lectures Switch = 2 # port du switch #---------------- programme principal try : carte.set_pin_mode_digital_input(Switch) time.sleep(1) while True: (val,temp) = carte.digital_read(Switch) #date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(temp)) date = time.strftime("%H:%M:%S", time.localtime(temp)) if (val==1): print(f"ON depuis {date}") else : print(f"OFF depuis {date}") time.sleep(Delai) except KeyboardInterrupt : # si on tape Ctl+C print("--------------- Fin --------------") carte.shutdown() sys.exit(0)
Lecture analogique : entre 0 et 1023
La lecture se fera sur une patte analogique A_i (Analog input) avec Pymata4.
On utilise ici les méthode set_pin_mode_analog_input(pin) et analog_read(pin).
Pour le déclenchement du callback, on utilisera le paramètre differential qui écart l’écart minimum requis entre les mesures.
Exemple avec callback
from pymata4 import pymata4 import sys import time carte = pymata4.Pymata4() print("--------------- Début --------------") # Constantes Delai=5 # délai entre deux lectures Light = 1 # port du capteur analogique Sensibilite = 50 #écart entre deux valeurs mesurées pour déclencher le callback #------------------ fonction callback appelée lors d'un changement de valeur def rapporter(data): pin = data[1] val= data[2] temp = data[3] date = time.strftime("%H:%M:%S", time.localtime(temp)) print(f"Nouvelle val = {val} à {date}") #---------------- programme principal try : carte.set_pin_mode_analog_input(Light,callback=rapporter,differential=Sensibilite) time.sleep(1) while True: time.sleep(0.1) except KeyboardInterrupt : # si on tape Ctl+C print("--------------- Fin --------------") carte.shutdown() sys.exit(0)
Exemple avec sondage
from pymata4 import pymata4 import sys import time carte = pymata4.Pymata4() print("--------------- Début --------------") # Constantes Delai=5 # délai entre deux lectures Light = 1 # port du capteur analogique #---------------- programme principal try : carte.set_pin_mode_analog_input(Light) time.sleep(1) while True: (val,temp) = carte.analog_read(Light) date = time.strftime("%H:%M:%S", time.localtime()) print(f"val = {val} à {date}") time.sleep(Delai) except KeyboardInterrupt : # si on tape Ctl+C print("--------------- Fin --------------") carte.shutdown() sys.exit(0)