[Arduino/Python] Communication port série

Bonjour,

j'ai réaliser un montage Arduino qui allume des LED selon la valeur de la variable count :

const int LED[4]={2,3,4,5};
char count;

void setup() {

Serial.begin(9600);
while (!Serial) {
// wait for serial port to connect.
}
Serial.print("TEST ECHO: ");
for (int i=0; i<=3;i++) pinMode(LED*,OUTPUT);*
}

void loop() {

  • if (Serial.available()>0) {*

  • count = Serial.read();*

  • }*

  • if (count=='0') {*

  • digitalWrite(LED[0],HIGH);*

  • digitalWrite(LED[1],LOW);*

  • digitalWrite(LED[2],LOW);*

  • digitalWrite(LED[3],LOW);*

  • }*

  • if (count=='1') {*

  • digitalWrite(LED[0],LOW);*

  • digitalWrite(LED[1],HIGH);*

  • digitalWrite(LED[2],LOW);*

  • digitalWrite(LED[3],LOW);*

  • }*

  • if (count=='2') {*

  • digitalWrite(LED[0],LOW);*

  • digitalWrite(LED[1],LOW);*

  • digitalWrite(LED[2],HIGH);*

  • digitalWrite(LED[3],LOW);*

  • }*

  • if (count=='3') {*

  • digitalWrite(LED[0],LOW);*

  • digitalWrite(LED[1],LOW);*

  • digitalWrite(LED[2],LOW);*

  • digitalWrite(LED[3],HIGH);*

  • }*

  • }[/quote]*
    je voudrai pouvoir commander la valeur de la variable count depuis Python en utilisant la bibliothéque pyserial :
    > import serial
    >
    > ser = serial.Serial('COM3', baudrate = 9600, timeout = 1)
    > if ser.isOpen():
    > print(ser.name + " is open")
    *> *
    > ser.write(b'0')
    > ser.close()
    la LED 0 ne s'allume pas bien que la communication est établie, le baudrate est le même des deux cotés, merci de me donner vos suggestions

j'ai l'impression que ça vient du ser.write(b'0') <== çà serrait pas plutot ser.write('0') ..??

question con... mais tu es sur que c'est le com3..? tu devrais mettre ser = serial.Serial('COM3', 9600, timeout=0)

tiens, si tu veux, ce site, pourra sans doute t'aider..

tu dervrais utilisé switch/ case

switch ( count){
case '0':
// action a faire
break;
case '1':
//action a faire
break;

ect

Merci hazerty pour ta réponse.
le 'b' de ser.write(b'0') précise que la chaine '0' est de type byte, c'est ce que j'ai trouver dans la documentation. mon Arduino est belle et bien brancher dans le port COM3.
Je tiens a préciser que ce montage est fonctionnel quand je communique avec lui via le Moniteur Série de l'"IDE" d'Arduino

Bonjour,

Il faut rajouter un "retour chariot" du genre ser.write(b'0\n') ou ser.write(b'0\r') ou ser.write(b'0\r\n')

Non aucune raison d'ajouter un retour chariot puisque le code côté arduino lit à la volée
Il se peut qu'il vous manque juste un flush(apres l'ecriture pour vous assurer que l'octet soit bien envoyé immédiatement et pas bufferisé)

Attention avec un UNO à l'autre bout du port série, quand votre code Python ouvre le port série votre arduino reboote. Il serait bon d'attendre un peu avant de balancer l'octet histoire que votre code soit opérationnel de l'autre côté en attente des commandes et de ne pas ouvrir et fermer le port série en permanence sinon votre arduino va rebooter constamment