Afin de simplifier la conception d’un programme Panoramic en vue de piloter facilement les 12 sorties d’un Arduino UNO ou NANO, je vous propose deux sous-programmes (SUB).
La première SUB va créer la voie de communication entre Panoramic et l’Arduino.
Code:
sub initalisationLiaisonSerie(PortCom%) dim_local texte$ if serial_port_exists(portCom%) = 0 texte$ = "Le port COM" + str$(portCom%) + " n'est pas disponible !" + chr$(13) + chr$(13) texte$ = texte$ + "Vérifiez le numéro de port COM ainsi que les connexions électriques." if message_error_ok(texte$) < 2 terminate end_if end_if serial 1 serial_port 1,portCom% serial_baudrate 1,9600 serial_databits 1,8 serial_parity 1,0 serial_stopbits 1,1 serial_open 1 end_sub
Appel de la sub : initalisationLiaisonSerie(N) N est un entier compris entre 1 et 255. Il représente le numéro du port COM attribué par Windows au port USB sur lequel est connecté l’Arduino. Le sous-programme crée et initialise la liaison série. Ici, l’objet Panoramic SERIAL porte le n° 1. Cette SUB est à appeler une seule et unique fois au lancement du programme.
La deuxième SUB permet de commander l’état (0 ou 1) de la sortie digitale souhaitée.
Code:
sub sortieDigitale(d_out%,etat%) if d_out% < 2 or d_out% > 13 exit_sub end_if if etat% < 0 or etat% > 1 exit_sub end_if serial_write 1,chr$(d_out%)+chr$(etat%)+chr$(255) end_sub
Appel de la SUB : sortieDigitale(N,V) N est un entier compris entre 2 et 13. Il représente le numéro de la sortie digitale de l’Arduino que l’on souhaite cibler. V est un entier de valeur 0 ou 1. Il représente l’état souhaité de la sortie digitale N. - La valeur 0 met la sortie digitale N au niveau bas (0 volt). - La valeur 1 met la sortie digitale N au niveau haut (+5volts).
Exemples : Pour mettre la sortie digital 8 à l’état haut, il suffit d’écrire : sortieDigitale(8,1) Pour mettre la sortie digital 11 à l’état bas : sortieDigitale(11,0)
Mise en pratique des deux SUBs dans un programme :
Code:
' Commande des sorties digitales 2 à 13, pour l'Arduino NANO ou UNO ' Marc - Juillet 2022 ' Ecrit en langage Panoramic 0.9.29i9
initalisationLiaisonSerie(9) :' Indiquez en paramètre le numéro de port COM utilisé par la carte Arduino
sortieDigitale(2,1) :' la sortie digitale 2 de l'Arduino est mise à 1 sortieDigitale(10,1) :' la sortie digitale 10 de l'Arduino est mise à 1
end ' ------------------------------------------------------------------------------ sub sortieDigitale(d_out%,etat%) if d_out% < 2 or d_out% > 13 exit_sub end_if if etat% < 0 or etat% > 1 exit_sub end_if serial_write 1,chr$(d_out%)+chr$(etat%)+chr$(255) end_sub ' ------------------------------------------------------------------------------ sub initalisationLiaisonSerie(PortCom%) dim_local texte$ if serial_port_exists(portCom%) = 0 texte$ = "Le port COM" + str$(portCom%) + " n'est pas disponible !" + chr$(13) + chr$(13) texte$ = texte$ + "Vérifiez le numéro de port COM ainsi que les connexions électriques." if message_error_ok(texte$) < 2 terminate end_if end_if serial 1 serial_port 1,portCom% serial_baudrate 1,9600 serial_databits 1,8 serial_parity 1,0 serial_stopbits 1,1 serial_open 1 end_sub
Remarques : Ne jamais utiliser les sorties digitales 0 et 1. Elles sont réservées en interne pour la liaison série entre Panoramic et l’Arduino. Si les 12 sorties digitales disponibles ne sont pas suffisantes, utilisez un Arduino MEGA 2560 qui dispose de 54 sorties digitales. Dans ce cas, quelques modifications logicielles seront à apporter.
Voici le code à téléverser dans l’Arduino NANO ou UNO pour qu’il obéisse aux commandes issues du code Panoramic :
Code:
void setup() { Serial.begin(9600); for (int n=2; n <= 13; n++) { pinMode(n,OUTPUT); } }
void loop() { char buf[3]; if (Serial.available()) { int trameRecue = Serial.readBytesUntil(255,buf,3); int numeroGpio = buf[0];
if (buf[1] == 1) digitalWrite(numeroGpio,HIGH); else digitalWrite(numeroGpio,LOW); } }
Bonne programmation et bonnes réalisations avec le couple Panoramic / Arduino !
Ouf_ca_passe aime ce message
Domotique et électronique : deux SUBs pour Arduino NANO/UNO