194 lines
6.1 KiB
Python
194 lines
6.1 KiB
Python
|
#!/usr/bin/env python3
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
"""
|
|||
|
SMiTSense足部压力传感器简单演示程序
|
|||
|
展示如何使用SMiTSenseUsb-F3.0.dll进行基本的压力数据采集
|
|||
|
"""
|
|||
|
|
|||
|
import sys
|
|||
|
import os
|
|||
|
import time
|
|||
|
from test_smitsense_dll import SMiTSensePressureSensor
|
|||
|
|
|||
|
def simple_pressure_monitor():
|
|||
|
"""
|
|||
|
简单的压力监控演示
|
|||
|
"""
|
|||
|
print("SMiTSense足部压力传感器演示")
|
|||
|
print("=" * 40)
|
|||
|
|
|||
|
# 创建传感器实例
|
|||
|
sensor = SMiTSensePressureSensor()
|
|||
|
|
|||
|
try:
|
|||
|
# 初始化
|
|||
|
print("正在初始化传感器...")
|
|||
|
if not sensor.initialize():
|
|||
|
print("❌ 初始化失败")
|
|||
|
return
|
|||
|
|
|||
|
# 查找设备
|
|||
|
print("正在查找设备...")
|
|||
|
devices = sensor.get_device_list()
|
|||
|
if not devices:
|
|||
|
print("❌ 未找到SMiTSense设备")
|
|||
|
print("请检查:")
|
|||
|
print("1. 设备是否正确连接")
|
|||
|
print("2. 驱动程序是否已安装")
|
|||
|
print("3. 设备是否被其他程序占用")
|
|||
|
return
|
|||
|
|
|||
|
print(f"✅ 找到 {len(devices)} 个设备")
|
|||
|
|
|||
|
# 连接第一个设备
|
|||
|
print("正在连接设备...")
|
|||
|
if not sensor.connect(devices[0]):
|
|||
|
print("❌ 连接失败")
|
|||
|
return
|
|||
|
|
|||
|
print("✅ 设备连接成功")
|
|||
|
|
|||
|
# 获取灵敏度
|
|||
|
sensitivity = sensor.get_sensitivity()
|
|||
|
if sensitivity is not None:
|
|||
|
print(f"当前灵敏度: {sensitivity}")
|
|||
|
|
|||
|
# 开始监控压力数据
|
|||
|
print("\n开始压力监控(按Ctrl+C停止)...")
|
|||
|
print("-" * 60)
|
|||
|
print("时间\t\t左前\t左后\t右前\t右后\t总压力")
|
|||
|
print("-" * 60)
|
|||
|
|
|||
|
count = 0
|
|||
|
while True:
|
|||
|
# 读取压力数据
|
|||
|
pressure_data = sensor.read_pressure_data()
|
|||
|
|
|||
|
if pressure_data:
|
|||
|
# 转换为足部区域数据
|
|||
|
foot_zones = sensor.get_foot_pressure_zones(pressure_data)
|
|||
|
|
|||
|
if foot_zones:
|
|||
|
timestamp = time.strftime("%H:%M:%S")
|
|||
|
print(f"{timestamp}\t{foot_zones['left_front']:.1f}\t"
|
|||
|
f"{foot_zones['left_rear']:.1f}\t"
|
|||
|
f"{foot_zones['right_front']:.1f}\t"
|
|||
|
f"{foot_zones['right_rear']:.1f}\t"
|
|||
|
f"{foot_zones['total_pressure']:.1f}")
|
|||
|
|
|||
|
# 简单的平衡分析
|
|||
|
if foot_zones['total_pressure'] > 10: # 有压力时才分析
|
|||
|
left_ratio = foot_zones['left_total'] / foot_zones['total_pressure']
|
|||
|
if left_ratio < 0.4:
|
|||
|
balance_status = "右倾"
|
|||
|
elif left_ratio > 0.6:
|
|||
|
balance_status = "左倾"
|
|||
|
else:
|
|||
|
balance_status = "平衡"
|
|||
|
|
|||
|
if count % 10 == 0: # 每10次显示一次平衡状态
|
|||
|
print(f"\t\t\t\t\t\t\t平衡状态: {balance_status}")
|
|||
|
else:
|
|||
|
print(f"{time.strftime('%H:%M:%S')}\t数据处理失败")
|
|||
|
else:
|
|||
|
print(f"{time.strftime('%H:%M:%S')}\t无数据")
|
|||
|
|
|||
|
count += 1
|
|||
|
time.sleep(0.2) # 5Hz采样率
|
|||
|
|
|||
|
except KeyboardInterrupt:
|
|||
|
print("\n\n用户停止监控")
|
|||
|
except Exception as e:
|
|||
|
print(f"\n❌ 监控过程中发生错误: {e}")
|
|||
|
finally:
|
|||
|
# 断开连接
|
|||
|
print("正在断开设备连接...")
|
|||
|
sensor.disconnect()
|
|||
|
print("✅ 设备已断开")
|
|||
|
|
|||
|
def test_dll_availability():
|
|||
|
"""
|
|||
|
测试DLL文件是否可用
|
|||
|
"""
|
|||
|
print("检查DLL文件可用性...")
|
|||
|
|
|||
|
dll_path = os.path.join(os.path.dirname(__file__), 'SMiTSenseUsb-F3.0.dll')
|
|||
|
|
|||
|
if not os.path.exists(dll_path):
|
|||
|
print(f"❌ DLL文件不存在: {dll_path}")
|
|||
|
return False
|
|||
|
|
|||
|
try:
|
|||
|
sensor = SMiTSensePressureSensor(dll_path)
|
|||
|
print("✅ DLL文件加载成功")
|
|||
|
|
|||
|
# 测试基本函数调用
|
|||
|
result = sensor.initialize()
|
|||
|
print(f"✅ 初始化函数调用成功,返回值: {result}")
|
|||
|
|
|||
|
return True
|
|||
|
except Exception as e:
|
|||
|
print(f"❌ DLL测试失败: {e}")
|
|||
|
return False
|
|||
|
|
|||
|
def show_usage():
|
|||
|
"""
|
|||
|
显示使用说明
|
|||
|
"""
|
|||
|
print("""
|
|||
|
SMiTSense足部压力传感器使用说明
|
|||
|
=================================
|
|||
|
|
|||
|
1. 硬件准备:
|
|||
|
- 确保SMiTSense足部压力传感器已正确连接到USB端口
|
|||
|
- 安装相应的设备驱动程序
|
|||
|
- 确保设备未被其他程序占用
|
|||
|
|
|||
|
2. 软件准备:
|
|||
|
- 确保SMiTSenseUsb-F3.0.dll文件在当前目录中
|
|||
|
- 安装Python 3.6+
|
|||
|
- 确保ctypes库可用(Python标准库)
|
|||
|
|
|||
|
3. 运行程序:
|
|||
|
python smitsense_demo.py
|
|||
|
|
|||
|
4. 功能说明:
|
|||
|
- 自动检测并连接SMiTSense设备
|
|||
|
- 实时显示足部各区域压力数据
|
|||
|
- 简单的平衡状态分析
|
|||
|
- 支持Ctrl+C安全退出
|
|||
|
|
|||
|
5. 数据说明:
|
|||
|
- 左前/左后/右前/右后:对应足部四个区域的压力值
|
|||
|
- 总压力:所有传感器压力值的总和
|
|||
|
- 平衡状态:基于左右脚压力分布的简单分析
|
|||
|
|
|||
|
6. 故障排除:
|
|||
|
- 如果提示"未找到设备",请检查硬件连接和驱动
|
|||
|
- 如果提示"DLL加载失败",请检查DLL文件路径
|
|||
|
- 如果数据异常,请检查传感器校准状态
|
|||
|
|
|||
|
7. 集成到现有系统:
|
|||
|
- 可以将SMiTSensePressureSensor类集成到device_manager.py中
|
|||
|
- 替换现有的MockPressureDevice模拟设备
|
|||
|
- 实现真实的压力传感器数据采集
|
|||
|
""")
|
|||
|
|
|||
|
if __name__ == "__main__":
|
|||
|
if len(sys.argv) > 1 and sys.argv[1] == "--help":
|
|||
|
show_usage()
|
|||
|
sys.exit(0)
|
|||
|
|
|||
|
print("SMiTSense足部压力传感器演示程序")
|
|||
|
print("使用 --help 参数查看详细使用说明")
|
|||
|
print()
|
|||
|
|
|||
|
# 首先测试DLL可用性
|
|||
|
if not test_dll_availability():
|
|||
|
print("\n请检查DLL文件和依赖项后重试")
|
|||
|
sys.exit(1)
|
|||
|
|
|||
|
print()
|
|||
|
|
|||
|
# 运行压力监控演示
|
|||
|
simple_pressure_monitor()
|