Pages: [1]   Go Down
Author Topic: Problemas con comuicación serial.  (Read 1246 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Estimados

Uso arduino uno y un notebook con ubuntu de donde ejecuto un código python con la libreria serial (import serial), mi problema es que si ejecuto el programa desde mi notebook y está el serial monitor de arduino funcionando entonces todo va bien, pero si cuando ejecuto mi código no está el serial monitor de arduino ejecutandose entonces no funciona correctamente.

Necesito que no sea necesario tener abierto el serial monitor por temas técnicos de mi proyecto, quisiera saber si alguien tiene alguna idea de cómo arreglar esto.

Saludos.
Logged

0
Offline Offline
God Member
*****
Karma: 39
Posts: 986
Get Bitlash: http://bitlash.net
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es necessario esperar mas o menos 1000 ms despues de serial.Serial(…) en Python.

-br
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gracias por tu respuesta, pero no me funcionó, ¿alguna otra idea?.

Saludos.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tenias razón, en mi caso eran 1.5 seg, pero ¿cómo hacer que no sea necesario esto? lo que pasa es que a cada rato envio una petición serial y tengo que esperar de nuevo los 1.5 seg de más.


Saludos.
Logged

0
Offline Offline
God Member
*****
Karma: 39
Posts: 986
Get Bitlash: http://bitlash.net
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bueno.  Es el "bootloader timeout".

Saludos.

-br
Logged

Madrid
Offline Offline
Sr. Member
****
Karma: 5
Posts: 481
Life isn't about finding yourself, life is about creating yourself!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A mi suena a reset cuando cuando abre el com port. Prueba poner un capacitor entre los pines de gnd y reset a ver que pasa.
Logged

Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Soy un novato smiley-wink, pero lo que yo hago es llamar a serial.Serial al principio del programa, así cuando quiero recoger los datos ya ha esperado el segundo de marras... o sea:

import serial

class LaClasePrincipal():
    serial = serial.Serial('localización de arduino', baudios)
    def __init__(self):
        parte inicial el programa
        ....
    def datos_arduino(self):
        self.serial.read()
        proceso de datos arduino

Tampoco se si es lo correcto, pero noto que el parapadeo del arduino se efectua al principio i no cuando quiero recoger los datos.
En caso de no necesitarlo siempre se puede hacer de poner el serial.Serial en otra instancia que se llame en algun momento del programa. Lo que no se es como cerrarlo smiley-grin, que tampoco estaria mal saber.
« Last Edit: November 14, 2012, 10:41:30 am by Anskar » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Encontré la forma de cerrar la comunicación con el puerto serie.

Tan fácil como:

serial = serial.Serial('/ruta/al/puerto/serie', baudios)
serial.close()
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pero eso soluciona lo de que funcione con el serial de arduino abierto?
Es que a mí me pasa lo mismo.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Por lo que puedo entender, el problema está en que, igual que en una llamada telefónica, hay que esperar que se "descuelgue" el aparato receptor para establecer la comunicación. En el caso de python-Arduino eso es la llamada

serial.Serial()

Se nota que Arduino parpadea hasta que se establece la comunicación y los envios de datos ya son instantaneos. O sea, siempre que se pida los datos de arduino con

serial.read()

el parpadeo no se efectua por que la comunicación ya está establecida. El problema, creo yo, (si alguien lo puede confirmar será de más ayuda que mis comentarios de newbe) está en hacer la llamada a comunicación

serial.Read()

cada vez que se quieren recuperar los datos de Arduino, entonces es cuando la comunicación tarda un rato en establecerse y se pierden los primeros datos. Por eso lo que propongo es establecer la comunicación serial antes de necesitar el envio de datos y tener siempre disponible la comunicación para no tener que esperar el bootloader, puesto que ya está establecido anteriormente.... no sé si me explico bien o igual me pierdo algo.
Logged

Madrid
Offline Offline
Sr. Member
****
Karma: 5
Posts: 481
Life isn't about finding yourself, life is about creating yourself!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yo creo que aquí hay un problema de timing.

Y eso de pedir ayuda y no poner código(no cachos) hace mas difícil poder ayudar.

en fin...

Cada vez que Python se conecta a arduino este envía una señal de reset al arduino para evitar eso hay que hacer una pequeña pausa después de realizar la conexión. La pausa depende de muchos factores pero parece ser que una pausa de 2ms funcionara en cualquier PC.

Code:
ser = serial.Serial(PORT)

/*----Dar tiempo al Arduino para hacer el reset-------------*/
time.sleep(2.0)

/*----Ahora si enviamos datos--------------------------------*/
written = ser.write(val)
ser.close()


Logged

Engineering is the art of
making what you want from
things you can get.

     

[SOLUCIONADO]

Pages: [1]   Go Up
Jump to: