Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lecture d'un port série et enregistrement texte

Arduino & Python

    17 juin 2015 à 14:39:29

    Salut à tous,

    J'utilise une carte Arduino pour envoyer des informations via le port série USB de mon ordinateur et un programme python (et pyserial) pour lire ces données et les enregistrer sous forme de texte.

    Cependant mon fichier texte reste vide après exécution du programme... J'ai beau essayer je ne vois pas pourquoi.

    import serial
    ser = serial.Serial('COM6', 9600, timeout = 1)
    f = open('test.txt','w+')
    f.write("Acquisition des donnees")
    
    print("Demarrage")
    try:
        while 1:
            line = ser.readline()
            if line: 
                print(line)
                f.write(line)
    except KeyboardInterrupt:
        f.close()
        ser.close()


    Ce qui est étonnant c'est que ' f.write("Acquisition des donnees")' écrit bien dans le texte, mais si la suite du programme est lancée le fichier texte final sera vide. De même si je lance le programme sans la commande 'f.write(line)', elle n'est donc pas responsable.

    Le print(line) lui m'envoie bien des flottants: 2.25   1.53 ...

    Ce problème viens t-il de mon ordinateur ? Comment puis je le régler :/ ?

    Merci pour votre attention,

    Adrien

    -
    Edité par SmartiesJaune 17 juin 2015 à 14:40:22

    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2015 à 8:46:03

      Salut petit Smarties :),

      Est-ce que tu as essayé sans le try exept avec un while sur un booléen et si tu saisi une certaine chaine ça s'interrompt ?

      Est-ce que ce code fonctionne ?

      import serial
      ser = serial.Serial('COM6', 9600, timeout=1)
      b = True
      
      print("Demarrage")
      with open('test.txt','w') as f:
        f.write("Acquisition des données")
        while b:
          line = set.readline()
          if line:
            if line != "FIN" and line != "FIN\n":
              print(line)
              f.write(line)
            else:
              b = False
            

      Tu fais deux trois erreurs sur les fichiers qui s'ouvrent comme présenté et le mode w+ ne te sers pas puisque tu ne viens qu'écrire des données

      -
      Edité par IQbrod 18 juin 2015 à 8:47:28

      • Partager sur Facebook
      • Partager sur Twitter
      OpenClassrooms retire tellement d'aiguilles de nos pieds qu'on pourrait ne plus trouver le foin de notre botte :)
        18 juin 2015 à 17:57:03

        Salut IQbrod !

         J'ai fait quelques retouches et c'est bien le except qui fait planter, sans lui tout va bien, je pourrais tester ton code demain pour te dire, mais je pense qu'il fonctionne.

        Est ce qu'il y a moyen que le except corresponde à l'arrêt d'Eclipse (je clique sur le carré rouge... Ctrl C ne marche pas) ? 

        • Partager sur Facebook
        • Partager sur Twitter
          19 juin 2015 à 12:32:02

          Essaye
          try:
            line = ser.readline()
          except KeyboardInterrupt: #Ctrl + C
            b = false

          Petite croix :

          SystemExit est l'exception lancée par sys.exit() . Si elle n'est pas interceptée par un except: , le programme s'arrête. Elle n'hérite pas d'Exception pour que, lorsque le développeur cherche à intercepter toutes les erreurs possibles, il n'empêche pas le programme de quitter.
          Source

          -
          Edité par IQbrod 19 juin 2015 à 12:32:53

          • Partager sur Facebook
          • Partager sur Twitter
          OpenClassrooms retire tellement d'aiguilles de nos pieds qu'on pourrait ne plus trouver le foin de notre botte :)
            13 septembre 2020 à 0:12:16

            Sous linux vous avez ttylog comme petit utilitaire pratique.

            Sous ubuntu: sudo apt-get install ttylog

            http://manpages.ubuntu.com/manpages/trusty/man8/ttylog.8.html

            • Partager sur Facebook
            • Partager sur Twitter
              14 septembre 2020 à 16:24:40

              une autre solution serait peut-être de passer par:

              with serial.Serial('COM6,9600,Timeout=1)as ser:
                  with open('test.txt','w') as f:
                      f.write("Acquisition des données")
                      try:
                         while 1:
                             line=ser.readline()
                             if line:
                                 print(line)
                                 f.write(line)
                      except:
                          pass



              Edit: oups déjà proposé

              -
              Edité par umfred 14 septembre 2020 à 16:26:07

              • Partager sur Facebook
              • Partager sur Twitter

              Lecture d'un port série et enregistrement texte

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown