[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