我在圣诞节收到了 Neurosky Mindwave,但立即对它的标准软件不以为然。于是带着我对python的基本了解,很快就找到了自己的不足。所以我开始四处寻找,发现了两段我想合并的代码。
我的目的是创建一个实时图形实用程序,它从 Mindwave 获取输入并将其输出到图表。
我找到的第一个代码是 Think 设备的接口(interface)。它从 COM 端口接收数据包并使用日志记录方法显示它们:
我发现要集成的第二段代码是绘图方法。我广泛使用了 Tkinter 包,所以我选择它作为首选。我愿意接受不需要太多第三方软件(matlab?)的更简单的方法。我在这里找到的图形代码:
https://stackoverflow.com/a/7605072/1110140
我想做的是将第一个的输出输入第二个以生成实时图表。但是我没有使用日志记录模块的经验,也不知道如何将它从原始代码中分离出来用作第二个的输入。此外,第二个代码主要用于演示目的,我再次不确定如何操作它以使其与演示以外的其他东西一起看起来不错。
非常感谢任何帮助。
最佳答案
从thinkgear.py看来,ThinkGearProtocol只是一个工厂,它使用ThinkGearMetaClass来生成类型为返回数据类型的对象。以下代码 -
global packet_log
packet_log = []
logging.basicConfig(level=logging.DEBUG)
for pkt in ThinkGearProtocol('/dev/rfcomm9').get_packets():
packet_log.append(pkt)
看起来它的目的是将数据包流式传输到单个线程中的记录器。对于您的应用程序,您不一定要使用记录器(这可能会造成混淆)。你可能更容易使用类似的东西
def PacketHandler(packet):
# Send an event out to objects
for obj in listeners:
obj.packet_callback(packet)
for pkt in ThinkGearProtocol('/dev/rfcomm9').get_packets():
PacketHandler(pkt)
或者,我不使用 Tkinter,但如果它有一些处理事件的方法,您可以使用上面的代码来发布事件。现在,您可以通过编写将传入数据包转换为原始数据的内容,将您的 thinkgear.py 模块粘合到您的 StripChart 类,然后将此原始数据发布到图表中。我会先尝试使用 StripChart 看看它需要什么才能让它工作,然后用一个虚拟处理程序编写上面的监听器看看你是否可以打印数据流(使用实际值而不是数据包)。从那里它非常特定于应用程序。
这最终看起来像
[thinkgear.py] -> [数据包线程(procs 事件)] -> [数据包数据解析器(获取原始数据)] -> [内部模型] -> [StripChart]。
关于Python 思维波图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650909/