Besoin de surveiller constamment série de données en Python
Droit maintenant, je suis en utilisant un Arduino pour envoyer des données à partir d'un capteur analogique à COM4. Je suis en train de faire un script python qui surveille en permanence les données et regarde pour un paramètre donné.
J'ai essayé quelque chose comme ça, mais il n'est pas d'alerte me correctement
import serial
from Tkinter import *
import tkMessageBox
port = "COM4"
ser = serial.Serial(port,9600)
value = 0
while 1:
value = ser.read()
if value > 400:
tkMessageBox.showwarning(
"Open file",)
time.sleep(1)
Peut-on avoir un exemple de ce qu'il fait contre ce que vous attendez?
Eh bien, je suis en cours d'exécution dans l'Aile Python Shell et il reste simplement à "Evauluating blablah.py" il n'a jamais fait de sorties de toutes les valeurs. Puis, quand je débranchez la clé USB de l'arduino les valeurs. Comme si elles n'avaient pas de registre jusqu'à ce que je l'ai fait.
En supposant que ser.read() renvoie en fait Tkinter ne va pas montrer quoi que ce soit, à moins que Tkinter.Cadre(...Tk()...).mainloop() est appelée.
Eh bien, je suis en cours d'exécution dans l'Aile Python Shell et il reste simplement à "Evauluating blablah.py" il n'a jamais fait de sorties de toutes les valeurs. Puis, quand je débranchez la clé USB de l'arduino les valeurs. Comme si elles n'avaient pas de registre jusqu'à ce que je l'ai fait.
En supposant que ser.read() renvoie en fait Tkinter ne va pas montrer quoi que ce soit, à moins que Tkinter.Cadre(...Tk()...).mainloop() est appelée.
OriginalL'auteur jakke34 | 2010-05-02
Vous devez vous connecter pour publier un commentaire.
Si le
serial
paquet que vous utilisez est pySerial, prendre note de la définition de lanuméro de Série.read()
méthode:Bien que vous essayez de processus
byte
objets, vous pouvez (dépend de la version de Python) le traitement desstr
oubytes
(array) des objets. Ces objets ne correspondent pas nécessairement à des valeurs entières.Même lors de la réception
byte
objets deread()
, le plus grand entier non signé sera 255.En comparant
value
avec 400 n'a pas de sens. Essayez de trouver le type de retour des objets avec une simple sortie de débogage.Si vous avez besoin de gérer un
str
objet, vérifier l'utilisation deord()
pour la conversion.(Le
flush
suggestion se réfère à la question de départ, qui a utiliséprint
, pastkinter
).Voir comment-à-encastré-sortie-de-python-imprimer, et d'essayer de la ligne de commande shell, de ne pas l'IDE qui peuvent affecter le tampon de sortie.
OriginalL'auteur gimel
Au lieu d'avoir le code Arduino relais de toutes les valeurs analogiques à COM4, relais un drapeau uniquement lorsque vous rencontrez le conditionnel.
Donc code arduino pourrait être:
Puis votre code Python peut seulement chercher le drapeau comme ceci:
OriginalL'auteur sdsd
En supposant que vous utilisez pySerial,
serial.read()
ne lit un octet, ce qui signifie une valeur maximale de 255. Si votre Arduino est l'envoi d'une chaîne de valeurs de retour, il est probablement préférable de les séparer par des caractères de saut de ligne et l'utilisationserial.readline()
.Sauf si vous avez des exigences spécifiques de performance de l'envoi de chaînes retour de l'Arduino va faire la correction significanly plus facile de toute façon.
Aussi, si vous recevez les chaînes de retour de l'Arduino, votre test doit être
if int(value) > 400:
OriginalL'auteur Dan Head