(par le protocole ”Firmata Express”)
Pour lire la valeur de la tension d’une entrée analogique (par exemple, la broche A0), il faut la déclarer au préalable en entrée analogique avec la commande suivante :
loop.run_until_complete(board.set_pin_mode_analog_input(0))
où :
– ”board” est l’objet créé lors de l’appel de la méthode ”PymataExpress” du module ”pymata-express”,
– ”0” est le numéro de la broche A0 du microcontrôleur que l’on souhaite déclarer en entrée analogique,
– ”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 analogique :
def Set_AnalogInput_Pin(board, pin): loop.run_until_complete(board.set_pin_mode_analog_input(pin)) |
La syntaxe pour déclarer la broche A0 en entrée numérique est alors plus simple :
Set_AnalogInput_Pin(board,0)
Ensuite, on pourra lire la valeur de la tension de la broche au moyen de cette instruction :
value = loop.run_until_complete(board.analog_read(0))
qui retourne une liste dont le premier élément (value[0]) est un nombre entier décimal entre 0 et 1023 représentatif d’une tension entre 0 et 5V.
De même, on peut définir une fonction pour lire la valeur de la tension d’une entrée analogique :
def Analog_Read(board, pin): value = loop.run_until_complete(board.analog_read(pin)) return value[0] |
Ainsi, l’instruction pour lire la valeur de la tension de la broche A0 devient :
ValA0 = Analog_Read(board, 0)
Exemple :
L’exemple d’application de la gestion des entrées analogiques avec ”Firmata Express” est le même que celui avec ”Firmata Standard”.
Le programme (”LedRVBAnalogInput.py”) suivant, lit la valeur de la broche A0 sur laquelle est connecté un potentiomètre et règle la luminosité de la DEL rouge proportionnellement à cette valeur :
![](https://www.ardpylab.fr/wp-content/uploads/2020/04/com-ardpy-ms5.png)
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_AnalogOutput_Pin” pour déclarer une broche en sortie analogique,
. Fonction ”Set_AnalogInput_Pin” pour déclarer une broche en entrée analogique,
. Fonction ”Analog_Write” pour modifier la tension d’une sortie analogique,
. Fonction ”Analog_Read” pour lire la valeur de la tension d’une entrée analogique,
. 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)
. PinPot = 0 (constante correspondant au n° de la broche A0 sur laquelle le potentiomètre est connecté)
. ValPot = 0 (variable pour stocker la valeur de l’entrée analogique A0)
. PortComArduino (port COM sur lequel l’Arduino est connecté)
– Connexion à l’Arduino :
. Détection du port COM :
PortComArduino = SelectPortCOM()
. Tentative d’ouverture du port COM sélectionné et connexion à l’Arduino:
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 analogique :
Set_AnalogOutput_Pin(board, PinLedR)
–> Déclaration de la broche du potentiomètre en entrée analogique :
Set_AnalogInput_Pin(board, PinPot)
– Boucle principale du programme (boucle ”while True”) :
. Lecture de la valeur (nombre décimal entre 0 et 1023) de la broche du potentiomètre :
ValPot = Analog_Read(board,0)
. La DEL rouge est connecté à une broche déclarée en sortie analogique qui accepte des valeurs entières entre 0 et 255. La valeur de la broche A0 lue par l’instruction précédente étant comprise entre 0 et 1023, celle-ci sera divisée par 4 et appliquée sur la broche de la DEL :
AnalogWrite(board,PinLedR, int(ValPot/4))
– Fin du programme en appuyant sur Ctrl-C :
–> La DEL rouge est éteinte et le port série est fermé.