2009-10-24 19 views
9

Está bien, entonces estoy seguro de que mi circuito de Arduino es correcto y el código para él. Lo sé porque cuando uso el monitor serie integrado en el Arduino IDE y envío 'H', se enciende un LED, cuando envío 'L' ese LED se apaga.Problema de Pyserial con Arduino: funciona con el shell Python pero no en un programa

Ahora hice un programa en Python

import serial 
ser = serial.Serial("COM4",9600) 
ser.write("H") 

Cuando ejecuto el código el LED parpadea durante un segundo y luego regresa fuera. Sin embargo, cuando hago cada una de estas líneas por separado en el shell, funciona como se supone que debe hacerlo.

¿Alguna idea?

+0

¿Podría estar relacionado con el objeto serial que se recolecta? – Autoplectic

Respuesta

5

Tuve el mismo problema y funciona si agrego un retraso de aproximadamente 2 segundos desde la apertura de la conexión en serie hasta la escritura en él, 1 segundo no fue suficiente.

+0

Un retraso de 2 segundos antes de la escritura también resolvió este problema para mí. – Phil

8

Cuando abre el puerto serie, esto hace que el Arduino se reinicie. Como el Arduino tarda un tiempo en reiniciarse, todas las entradas van al bitbucket (o probablemente al gestor de arranque, que Dios sabe qué hacer con él). Si inserta una suspensión, espere a que aparezca el Arduino para su código de serie. Es por eso que funciona de manera interactiva; estabas esperando los 1.5 segundos necesarios para que el software apareciera.

Confirmé que al abrir el puerto serie reinicio mi Arduino Uno; Parpadeé un programa que parpadeará el LED de la rutina setup() - llamar al open("/dev/ttyACM0") fue suficiente para activar el restablecimiento. Esto es en mi humilde opinión una arruga confusa e indocumentada en el soporte de serie.

+0

Consulte [Arduino Playground] (http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection) para obtener una explicación. –

1

Solo para que sea un poco más claro voy a modificar el código para que todos puedan ver lo que se debe agregar!

import serial 
import time 
ser = serial.Serial("COM4",9600) 
time.sleep(3) 
ser.write("H") 

Añadir en una declaración de sueño ayuda a que la serie se abra sin ningún problema!

Cuestiones relacionadas