Se il pacchetto serial
si sta utilizzando è pySerial, prendere atto della definizione del Serial.read()
method:
read(size=1)
Parametro: dimensione - Numero di byte da leggere.
Restituisce: i byte letti dalla porta.
Leggere i byte di dimensione dalla porta seriale. Se è impostato un timeout, può restituire meno caratteri come richiesto. Senza timeout si bloccherà fino a leggere il numero richiesto di byte.
Modificato nella versione 2.5: restituisce un'istanza di byte quando disponibile (Python 2.6 e successivi) e str altrimenti.
Anche se si sta cercando di elaborare byte
oggetti, è possibile (a seconda della versione di Python) gestirà str
o bytes
(Array) oggetti. Questi oggetti non corrispondono necessariamente a valori interi.
Anche quando riceve byte
oggetti da read()
, il più grande intero senza segno sarà 255. Confrontando value
con 400 non ha senso. Prova a trovare il tipo di oggetti restituiti con un semplice output di debug.
print type(value)
Se è necessario gestire un oggetto str
, controllare l'uso di ord()
per conversione.
(Il suggerimento flush
fa riferimento alla domanda originale, che utilizzava print
, non tkinter
).
Vedere how-to-flush-output-of-python-print e provare la shell della riga di comando, non l'IDE che può influire sul buffer di output.
Possiamo avere un esempio di quello che sta facendo rispetto a quello che ci si aspetta? – James
Beh, lo sto eseguendo nella Shell Python Wing e rimane solo su "Evauluating blablah.py" - non emette mai alcun valore. Quindi quando disconnetto l'USB dall'arduino i valori vengono visualizzati. Come se non si fossero registrati fino a quando non l'avessi fatto. – jakke34
Supponendo che ser.read() restituisca effettivamente Tkinter non mostrerà nulla a meno che Tkinter.Frame (... Tk() ...). Venga chiamato mainloop(). – msw