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@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/