Gestion des entrées numériques

(par le protocole Firmata express”)

 


Pour lire l’état logique d’une broche numérique (par exemple, la broche N°12), il faut la déclarer au préalable en entrée avec la commande suivante :               

loop.run_until_complete(board.set_pin_mode_analog_input(12)) 

où :

board” est l’objet créé lors de l’appel de la méthode PymataExpress” du module pymata-express”,

12” est le numéro de la broche du microcontrôleur que l’on souhaite déclarer en entrée digitale,

loop” est la boucle des tâches asyncio” déclarée ainsi :

loop = asyncio.get_event_loop() 

On peut définir une fonction déclarant plus facilement une broche en entrée numérique :

def Set_DigitalInput_Pin(board, pin):

loop.run_until_complete(board.set_pin_mode_digital_input(pin))


La syntaxe pour déclarer la broche N°12 en entrée numérique est alors plus simple :

Set_DigitalInput_Pin(board,12)

Ensuite on pourra lire l’état logique de la broche au moyen de cette instruction :

value = loop.run_until_complete(board.digital_read(12))

qui retourne une liste dont le premier élément (value[0]) est égale à 1” lorsque l’entrée est à 5 V, et 0” lorsqu’elle est à 0 V.

De même, on peut définir une fonction pour lire l’état logique d’une entrée digitale :

def Digital_Read(board, pin):   

value = loop.run_until_complete(board.digital_read(pin))   

return value[0]


Ainsi, l’instruction pour lire l’état logique de la broche N°12 devient :

ValPin12 = Digital_Read(board, 12)

 

Exemple :

L’exemple d’application de la gestion des entrées numériques avec ”Firmata Express” est le même que celui avec ”Firmata Standard”.

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 Express”,

. La bibliothèque asyncio” nécessaire au fonctionnement de PymataExpress”

. Fonction Set_DigitalOutput_Pin” pour déclarer une broche en sortie numérique,

. Fonction Digital_Write” pour modifier l’état logique d’une broche numérique,

. Fonction Set_DigitalInput_Pin” pour déclarer une broche en entrée numérique,

. Fonction Digital_Read” pour lire l’état logique d’une broche numérique,

. Fonction Arduino_Exit” pour fermer le port COM et se déconnecter de l’Arduino.

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)

. PortComArduino (port COM sur lequel l’Arduino est connecté)

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:

–> définition d’une boucle asyncio :

loop = asyncio.get_event_loop()

–> Déclaration de la broche de la DEL rouge en sortie numérique :

Set_DigitalOutput_Pin(board, PinLedR)

–> Déclaration de la broche du bouton poussoir en entrée numérique :

Set_DigitalInput_Pin(board, Pinbutton)

Boucle principale du programme (boucle ”while True”) :

. Lecture de l’état logique de la broche du bouton poussoir :

ValButton = Digital_Read(board, PinButton)

. La DEL rouge est allumée ou éteinte suivant la valeur de ValButton :

if ValButton == 1:

         Digital_Write(board,PinLedR,1)

else:

         Digital_Write(board,PinLedR,0)

Fin du programme en appuyant sur Ctrl-C :

–> La DEL rouge est éteinte et le port série est fermé.