找回密码
 立即注册
查看: 7718|回复: 45

51开源 USB-HID 手柄制作(三) 添加线性摇杆

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-9-6 10:50:59 | 显示全部楼层 |阅读模式
51开源 USB-HID 手柄制作(三)   添加线性摇杆

2024/08/31 更新 gamepadG1S3
修复按键互锁的bug
新版本暂时不支持宏按键
演示:

*******************************

截图202310051809494094.jpg

截图202310051809252498.jpg


【基于 STC8H 的51增强型单片机的 USB-HID 手柄(三)】

注意本文使用了 微软 xbox 360 手柄 的 PID VID ,仅供交流学习使用。
本文使用设备描述符 等信息均来自互联网

源码已上传附件

这次的内容简单点

增加个adc.c

一个初始化 一个调用函数
  1. void ADC_Init(void)
  2. {
  3.     P1M0 |= 0x0a;
  4.     P1M1 |= 0x0a;
  5.     // P1PU |= 0x0a;
  6.     P_SW2 |= 0x80; // 扩展寄存器(XFR)访问使能
  7.     ADCTIM    = 0x3f; // 设置 ADC 内部时序,ADC采样时间建议设最大值
  8.     ADCCFG    = 0x2f; // 设置 ADC 时钟为系统时钟/2/16/16   右对齐
  9.     ADC_CONTR = 0x80; // 使能 ADC 模块
  10. }
复制代码
加一个函数处理ADC的值
  1. u16 joyConvert(BYTE chanel)
  2. {
  3.     u16 retValue          = 0;
  4.     u16 retValue1         = 0;
  5.     u16 retValue2         = 0;
  6.     u16 retValueAveragU16 = 0;
  7.     u16 retValueAverag    = 0;
  8.     _nop_();
  9.     retValue = Get_ADC12bitResult(chanel);
  10.     _nop_();
  11.     retValue1 = Get_ADC12bitResult(chanel);
  12.     _nop_();
  13.     retValue2 = Get_ADC12bitResult(chanel);
  14.     retValueAveragU16 = (retValue + retValue1 + retValue2) / 3;
  15.     if (retValueAveragU16 > 4000) {
  16.         retValueAverag = retValueAveragU16 - 2048;
  17.     } else if (retValueAveragU16 < 1600) {
  18.         retValueAverag = retValueAveragU16 - 2048;
  19.     } else {
  20.         retValueAverag = 0;
  21.     }
  22. #ifdef DEBUG
  23.     P6 = retValueAverag;
  24.     sprintf(p, "the joy is  %d", retValueAverag);
  25.     UartSendStr(p);
  26. #endif // DEBUG
  27.     return retValueAverag;
  28. }
复制代码
STC 的ADC 过于强大 有12位 ,这里取8位就好
  1.     LRXCode = joyConvert(1) >> 4;
  2.     LRYCode = joyConvert(3) >> 4;
复制代码



HID 手柄阶段3.7z

119.99 KB, 下载次数: 326

试验箱

gamepadG1S3.7z

172.83 KB, 下载次数: 122

2024/08/31 更新

1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-10-9 08:25:33 | 显示全部楼层
本帖最后由 gentleman 于 2023-10-9 10:40 编辑

这里也放一份基础版的源码

发现论坛可以传大文件附件了,上位机的完整工程也放在这。





gamepadG1S2.hex

21.59 KB, 下载次数: 189

G1S2固件

手柄配置工具pre-2.0.7z

3.08 MB, 下载次数: 218

上位机工具

UI.7z

10.77 KB, 下载次数: 203

上位机UI层

DATA.7z

8.02 KB, 下载次数: 198

上位机数据层

LOGIC.7z

2.24 KB, 下载次数: 210

上位机逻辑层

gamepadG1S2.7z

162.12 KB, 下载次数: 236

手柄基础版工程源码

手柄上位机pre-v2.0 源码.7z

8.97 MB, 下载次数: 236

上位机源码

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-10-1 14:46:31 | 显示全部楼层

不用谢,后来上传了完整项目,你可以去看看
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:482
  • 最近打卡:2025-05-01 07:56:03
已绑定手机

1

主题

54

回帖

2351

积分

金牌会员

积分
2351
发表于 2023-10-7 11:19:06 | 显示全部楼层
支持
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-11-22 17:17:43

0

主题

5

回帖

60

积分

注册会员

积分
60
发表于 2023-10-7 14:49:54 | 显示全部楼层
大佬,这个能不能读取游戏状态啊,比如普通手柄的震动,或者更高级的角色或者内部装备的后坐力 车辆的上下浮动数据,这个可以做体感游戏的开发
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-10-7 16:58:35 | 显示全部楼层
本帖最后由 gentleman 于 2023-10-7 17:03 编辑
罗程*** 发表于 2023-10-7 14:49
大佬,这个能不能读取游戏状态啊,比如普通手柄的震动,或者更高级的角色或者内部装备的后坐力 车辆的上下 ...

理论上是可以的,可以考虑加入后续的更新计划。
但除了震动之外,你说的其他功能要有相应的游戏支持(要不我再做个开源的游戏)。



其实最新版本固件就用到了了读取 pc端hid数据的功能--读取PC上位机数据。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2023-10-7 18:54:53 | 显示全部楼层
玩出 STC-USB 芯高度
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-10-7 19:09:22 | 显示全部楼层
神*** 发表于 2023-10-7 18:54
玩出 STC-USB 芯高度

是 stc 的芯片性能强
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2024-09-27 19:09:54

0

主题

8

回帖

166

积分

注册会员

积分
166
发表于 2023-10-11 17:31:21 | 显示全部楼层
请问,有测试过摇杆数据通过USB发送到电脑的延时吗?

点评

我好像设置的是20ms 准备一次数据。 在定时器设置里,可以自己改。  详情 回复 发表于 2023-10-11 18:53
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2023-10-11 18:53:17 | 显示全部楼层
Re*** 发表于 2023-10-11 17:31
请问,有测试过摇杆数据通过USB发送到电脑的延时吗?
我设置的是10ms  准备一次数据。
在定时器设置里,可以自己改。
截图202310111857079381.jpg
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:18 , Processed in 0.542700 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表