(par le protocole ”Firmata standard”)
Pour lire l’état logique d’une broche numérique (par exemple, la broche N°5), il faut la déclarer au préalable en entrée avec la commande suivante :
pin5 = board.get_pin(‘d:5:i’)
La syntaxe est ”d” pour digital, ”5” est le numéro de la broche, ”i” pour input et ”board” est l’objet créé lors de l’appel de la méthode ”Arduino” du module ”pyfirmata”.
On peut définir une fonction déclarant plus facilement une broche en entrée numérique :
def DigitalInput(board,pin): DigitalInputPin=board.get_pin(‘d:’+ str(pin) +’:i’) return DigitalInputPin |
La syntaxe pour déclarer la broche N°5 en entrée numérique est alors plus simple :
pin5 = DigitalInput(board,5)
Ensuite on pourra lire l’état logique de la broche au moyen de cette instruction :
valeur = pin5.read()
qui retourne ”1” lorsque l’entrée est à 5 V, et ”0” lorsqu’elle est à 0 V.
Attention :
. Les données lues transitent bien-sûr par la liaison série, et pour éviter qu’un trop grand nombre de mesures n’encombrent la communication série entre l’Arduino et l’ordinateur, Il faut aussi utiliser un itérateur prévu dans pyFirmata :
it = pyfirmata.util.Iterator(board) it.start() |
. L’itérateur doit est lancé après la connexion à l’Arduino.
Exemple :
Nous allons ajouter un bouton poussoir à notre circuit support des exemples :
La sortie du bouton poussoir est reliée à la borne 12 de l’Arduino. La broche 12 sera donc à l’état logique haut (5 V) lorsque le bouton sera appuyé, et à l’état logique bas (0 V) lorsque le bouton sera relâché.
Le programme suivant (nommé ”LedRVBDigitalInput.py”) permet d’allumer la DEL rouge quand le bouton poussoir est appuyé et de l’éteindre quand celui-ci est relâché :
Déroulement du programme :
– Importation des librairies et définition de fonctions :
. Le module ”ConnectToArduino.py”, contenant les fonctions de connexion à l’arduino via le protocole ”Firmata standard”,
. La bibliothèque ”time” pour la gestion des temps de pause,
. Fonction ”DigitalInput” pour déclarer une entrée numérique,
. Fonction ”DigitalWrite” pour modifier l’état logique d’une broche numérique,
. Fonction ”Iterateur” pour lancer l’itérateur de pyFirmata.
– Déclaration des constantes et variables :
. PinLedR = 11 (constante correspondant au n° de la broche sur laquelle la DEL rouge est connectée),
.PinButton = 12 (constante correspondant au n° de la broche sur laquelle le bouton poussoir est connecté),
. ValButton = 0 (variable pour stocker la valeur de l’état logique de la broche du bouton poussoir).
– Connexion à l’Arduino (Idem programme précédent)
–> Tentative d’ouverture du port COM sélectionné et connexion à l’Arduino:
PortComArduino = SelectPortCOM()
board = OpenPortCom(PortComArduino)
–> Si la connexion à l’Arduino est réussie:
– Lancement de l’itérateur :
ArduinoIterateur = Iterateur(board),
– Déclaration de la broche du bouton poussoir en entrée digitale :
InputPin = DigitalInput(board, PinButton),
– Attente de 500 ms pour le lancement de l’itérateur.
– Boucle principale du programme (boucle ”while True”) :
. lecture de l’état logique de la broche du bouton poussoir :
ValButton = InputPin.read()
. La DEL rouge est allumée ou éteinte suivant la valeur de ValButton :
if ValButton == 1:
DigitalWrite(board,PinLedR,1)
else:
DigitalWrite(board,PinLedR,0)
– Fin du programme en appuyant sur Ctrl-C
–> La DEL rouge est éteinte et le port COM est fermé.