[Python-es] Datos recibidos con pyserial y eventos

xiscu xiscu en email.de
Mar Mar 2 17:57:24 CET 2010


RODOLFO SENA ALCANTARA wrote:
> Hola a todos, soy nuevo aqui y programando y me estoy iniciando con python.
>  
> Tengo un pequeño proyecto mocap que combina blender, python y un 
> microcontrolador con sus respectivos sensores.
>  
> El microcontrolador moniorea el estado de los sensores, carga un string 
> con estos datos, lo manda via serial, ahora bien, tengo el codigo que 
> modifica mi esqueleto frame por frame controlado, pero tengo un problema 
> con la recepcion de los datos, con pyserial puedo leer todo lo que 
> llegue al puerto, pero en si yo necesito un manejo de eventos, me explico:
>  
> Un evento que me avise que llegó la señal al puerto y a partir de ahi yo 
> llamo una función, que es precisamente la que actualiza la pose de mi 
> armature.

Hola Rodolfo,

a mi parecer se podria separar y/o emular lo del evento o callback si se 
separasen el leer del puerto y el actualizar la pantalla en distintos 
procesos. Googleando encontre:

http://stackoverflow.com/questions/911089/python-monitoring-over-serial-port
http://eli.thegreenplace.net/2009/08/07/a-live-data-monitor-with-python-pyqt-and-pyserial/

En el help de pyserial no encotré nada sobre registrar alguna función ...

Un saludo

>  
> Yo puedo hacer un bucle que haga esto, es decir, que lea los datos 
> recibidos y luego actualice mi armature, pero existe un inconveniente, 
> no puedo poner mi funcion de actualizacion dentro de un bucle, porque 
> blender cuando entra en un bucle hace el trabajo, pero como que se frisa 
> y no muestra los movimientos en la ventana 3d hasta que salgo del 
> script, y la idea es que yo pueda ver el movimiento de mi personaje en 
> tiempo real, por eso necesito que se haga esto con eventos que esperen 
> la señal y cuando llegue que llamen mi funcion.
>  
> Tengo aqui un ejemplo que combina eventos con comunicacion serial hecho 
> en Visual Basic, este lo utilicé en un proyecto similar y me funcionó, 
> pero ahora lo necesito en python y no se como traducirlo:
>  
> 
> *Imports System.IO
> Imports System.IO.Ports*
> 
> ** 
> 
> *Public Class Form2
>     Dim Recibidos As String
>     Public Sub New()
>          InitializeComponent()
>          SerialPort1.PortName = "COM6"
>          ' Abrir puerto mientra se ejecute la aplicación
>          If Not SerialPort1.IsOpen Then
>               Try
>                     SerialPort1.Open()
>               Catch ex As System.Exception
>                     MessageBox.Show(ex.ToString())
>               End Try
>          End If
>          ' Ejecutar la funcion Recepcion por disparo del Evento 'DataReived'
>          AddHandler SerialPort1.DataReceived, AddressOf Recepcion
>      End Sub
> 
>      Private Sub Recepcion(ByVal sender As Object, ByVal e As  
> System.IO.Ports.SerialDataReceivedEventArgs)
>      ' Acumular los carácteres recibidos a nuestro 'buffer' (string)
>          Recibidos += serialPort1.ReadExisting()
>      End Sub
> End Class*
> 
> No les dejo mi codigo porque no está terminado, pues me falta esata parte.
> 
> Muchas gracias por anticipado.
> 
> 
> ------------------------------------------------------------------------
> Tu Hotmail guarda el borrador que estás escribiendo para que no pierdas 
> tu mensaje. Conoce cómo 
> <http://www.descubrewindowslive.com/hotmail/actualizacion-guardado.asp>
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/




Más información sobre la lista de distribución Python-es