Go Down

Topic: PB Liaison serie avec python  (Read 465 times) previous topic - next topic

vicssss

Bonjour ,

J'ai un probleme entre la liaisons serie de Python vers mon Arduino , quand j'envoie des charactere a mon arduino il ne se passe rien alors que quand j'utilise le moniteur serie sa marche parfaitement :

CODE Arduino :

Code: [Select]
#include <IRremote.h>

IRsend irsend;

const int LED=2; // Constante pour la broche 2

int octetReception=0; // variable de stockage des valeurs reçues sur le port Série (ASCII)
char caractereRecu=0; // variable pour stockage caractère recu
int compt=0; // variable comptage caractères reçus

String chaineReception=""; // déclare un objet String vide pour reception chaine

void setup()   {
Serial.begin(9600); // initialise connexion série à 115200 bauds

} // fin de la fonction setup()

void loop(){ // debut de la fonction loop()

while (Serial.available()>0) { // tant qu'un octet en réception

        octetReception=Serial.read(); // Lit le 1er octet reçu et le met dans la variable
        compt=compt+1;

        //Serial.println("Ascii Caractere "+ String(compt) +" = "+ String(octetReception)); // affiche code ASCII Octet reçu

        if (octetReception==10) { // si Octet reçu est le saut de ligne

          Serial.println("Saut de ligne recu");
          Serial.println ("Chaine recue="+chaineReception); // affiche la chaine recue

          //-- analyse de la chaine recue

          if (chaineReception.startsWith("1")){
            irsend.sendNEC(0x2FD58A7, 32); // toshiba TV power code
            Serial.println("Recu vol+");
          } // fin if
         
          else if (chaineReception.startsWith("vol-")){
            irsend.sendNEC(0x2FD7887, 32); // toshiba TV vol- code
            Serial.println("Recu VOL-");
          } // fin if
         
          else if (chaineReception.startsWith("power")){
            irsend.sendNEC(0x2FD48B7, 32); // toshiba TV power code
            Serial.println("Recu POWER");
          } // fin if

          else if (chaineReception.startsWith("input")){
            irsend.sendNEC(0x2FD28D7, 32); // toshiba TV input code
            Serial.println("Recu input");
          } // fin if

          else if (chaineReception.startsWith("ok")){
            irsend.sendNEC(0x2FD847B, 32); // toshiba TV ok code
            Serial.println("Recu ok");
          } // fin if

          else if (chaineReception.startsWith("exit")){
            irsend.sendNEC(0x2FDC23D, 32);
            Serial.println("Recu exit");
          } // fin if

          else if (chaineReception.startsWith("haut")){
            irsend.sendNEC(0x2FD9867, 32);
            Serial.println("Recu haut");
          } // fin if

          else if (chaineReception.startsWith("bas")){
            irsend.sendNEC(0x2FDB847, 32);
            Serial.println("Recu bas");
          } // fin if
         
          else {
            Serial.println("Chaine non reconnue");
          }// fin else

          //-- une fois l'analyse terminée
          chaineReception=""; //RAZ le String de réception
          compt=0; // RAZ compteur
          delay(100); // pause
          break; // sort de la boucle while

        }
        else { // si le caractère reçu n'est pas un saut de ligne

           caractereRecu=char(octetReception); // convertit l'octet reçu en caractère
           chaineReception=chaineReception+caractereRecu; // ajoute le caratère au String
        }
}
} // fin tant que  octet réception



CODE Python :

Code: [Select]
import serial
import sys

ser = serial.Serial("COM3", 9600)
mots = ""
def message(i):
    mots = i
    ser.write(mots)
    print(mots)

if __name__ == '__main__':
    print 'sys.argv: ', sys.argv
    if len(sys.argv) > 1:
        message(sys.argv[1])
    else:
        message('No argument')



Si quelqun voit l'erreur ? Car j'ai essayer plusieur chose mais etant donner mon faible niveau en Arduino et python .... Merci d'avance de votre aide !

3Sigma

Bonjour,

Tu as bien croisé le TX et le RX dans tes branchements ? (TX côté ordi branché sur RX Arduino et RX côté ordi branché sur TX Arduino).

vicssss

Salut , je passe directement par l'usb mais je ne comprend pas pourquoi avec le moniteur serie de l'IDE sa fonctionne tres bien est pas avec python...

3Sigma

A vue de nez, je dirais qu'il te manque dans le programme Python l'équivalent du "Enter" que tu fais au clavier quand tu utilises le moniteur série.

Essaie avec cette modification:

Code: [Select]

ser.write(mots + "\n")

vicssss

J'ai tester toujours rien , je tiens a preciser que RX  clignote lorsque je lance le programme mais pas de TX alors que sur l'arduino IDE avec le moniteur serie il y a TX ....

Code: [Select]


ser = serial.Serial("COM3", 9600)
def message(i):
    ser.write(i + "\n")
    print(i)

if __name__ == '__main__':
    print 'sys.argv: ', sys.argv
    if len(sys.argv) > 1:
        message(sys.argv[1])
    else:
        message('No argument')




Go Up