搜索
bottom↓
回复: 106

这几天用STM32的USB和加速度传感器折腾了个USB键盘用来玩...

  [复制链接]

出0入0汤圆

发表于 2013-4-25 21:16:48 | 显示全部楼层 |阅读模式
RT,这几天用STM32的USB和加速度传感器折腾了个USB键盘用来玩了下游戏,拍了段小视频技术不太好
http://v.youku.com/v_show/id_XNTQ4MDIzOTU2.html
今天晚上刚弄出来,开始啥也不懂现在也不太懂,然后从官网下载了USB库从里面自带的USB鼠标例程开始看起,然后在论坛和谷歌找资料
圈圈的贴子对我帮助很大,圈圈原帖
数据处理做的比较简单以后继续完善把。
感谢圈圈,感谢论坛
下面上点资料和源码
官网下载的USB库包括例程

我的工程源码

硬件比较简单相信看了程序都能懂

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-4-25 21:19:14 | 显示全部楼层
本帖最后由 tianheiGE 于 2013-4-26 10:13 编辑

自己沙发顶顶更健康
既然占了沙发位,就简单的解释下把
首先硬件方面视频里洞洞板上实现了四个按键分别是Ctrl、Shift、R、方向向前松开键(即按下这个方向向前键松开这个玩过飞车的应该知道这有什么用的把 )。
插在洞洞板上的那个就是我买来的九轴模块了,以前打算弄姿态的没成功,这里用了上面的加速度传感器ADXL345用来实现方向的控制,抬起来就相当于按住了方向向前键,然后左右倾斜就相当于按下了左右键。
主控是买来的stm32f103c8t6最小系统板,关于上面的USB接口说明一下,买来的最小系统板上的USB接口部分电力如图:

这里直接用短路冒接上上拉电阻,就表示USB设备的接入,而大部分开发板的USB接口电路如图:

这样做的好处就是可以通过软件的方式来控制USB设备的接入和拔出,这样就可以在系统初始化完成后通过软件是USB连接,还可以实现模拟USB设备的拔下然后再接上枚举成另一种USB设备。
所以在USB官方给出的库函数里有这样一个函数用来实现这样的USB拔插功能
  1. void USB_Cable_Config (FunctionalState NewState)
  2. {
  3.   if (NewState != DISABLE)
  4.   {
  5.     GPIO_ResetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);
  6.   }
  7.   else
  8.   {
  9.     GPIO_SetBits(USB_DISCONNECT, USB_DISCONNECT_PIN);
  10.   }
  11. }
复制代码
我这里的最小系统板没有这样一部分功能所以把它注释掉了,其实也可以通过一个IO接在上拉电阻那通过设置IO为推挽输出1和浮空输入来实现同样的功能这样就可以省下一个三极管了
硬件方面就到这里,关于软件首先要说的就是设备描述符了在USB库中关于设备描述符的两个文件分别是usb_desc.c和usb_desc.h这里我想实现USB键盘所以就需要USB键盘的设备描述符了,在官方给出的例程中就是没有USB接盘的例程所以这个设备描述符是从论坛下载的别人做的USB键盘工程中扣出来的,其实也就是和圈圈那贴子给出的设备描述是一样的。有了这两个东西你可以把官方给的USB鼠标的例程中的那两个关于设备描述的文件替换掉编译下载你会发现它就识别成了一个USB键盘 关于USB库函数的说明这里上传一份官网下载的说明里面有关于USB库每个文件的介绍

然后接下来的工作就是端点的初始化,和端点回调函数的修改了,这里我用的官方给出的USB鼠标例程里面实现了端点1(端点0是用来发送设备描述符的)的发送初始化并发送长度为4个字节这里改成8个字节
这部分修改在usb_prop.c中
  1. void Joystick_Reset(void)
  2. {
  3.   /* Set Joystick_DEVICE as not configured */
  4.   pInformation->Current_Configuration = 0;
  5.   pInformation->Current_Interface = 0;/*the default Interface*/

  6.   /* Current Feature initialization */
  7.   pInformation->Current_Feature = Joystick_ConfigDescriptor[7];
  8.   SetBTABLE(BTABLE_ADDRESS);
  9.   /* Initialize Endpoint 0 */
  10.   SetEPType(ENDP0, EP_CONTROL);
  11.   SetEPTxStatus(ENDP0, EP_TX_STALL);
  12.   SetEPRxAddr(ENDP0, ENDP0_RXADDR);
  13.   SetEPTxAddr(ENDP0, ENDP0_TXADDR);
  14.   Clear_Status_Out(ENDP0);
  15.   SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
  16.   SetEPRxValid(ENDP0);

  17.   /* Initialize Endpoint 1 */
  18. //  SetEPType(ENDP1, EP_INTERRUPT);
  19. //  SetEPTxAddr(ENDP1, ENDP1_TXADDR);
  20. //  SetEPTxCount(ENDP1, 4);
  21. //  SetEPRxStatus(ENDP1, EP_RX_DIS);
  22. //  SetEPTxStatus(ENDP1, EP_TX_NAK);
  23.        
  24. /* Initialize Endpoint In 1 */
  25.   SetEPType(ENDP1, EP_INTERRUPT); //初始化为中断端点类型
  26.   SetEPTxAddr(ENDP1, ENDP1_TXADDR); //设置发送数据的地址
  27.   SetEPTxCount(ENDP1, 8); //设置发送的长度
  28. //  SetEPRxStatus(ENDP1, EP_RX_DIS);
  29.   SetEPTxStatus(ENDP1, EP_TX_NAK); //设置端点处于忙状态
  30.        
  31.   /* Initialize Endpoint Out 1 */
  32.   SetEPRxAddr(ENDP1, ENDP1_RXADDR); //设置接收数据的地址
  33.   SetEPRxCount(ENDP1, 1);  //设置接收长度
  34.   SetEPRxStatus(ENDP1, EP_RX_VALID); //设置端点有效,可以接收数据

  35.   /* Set this device to response on default address */
  36.   SetDeviceAddress(0);
  37.   bDeviceState = ATTACHED;
  38. }
复制代码
后面的接受初始化是可以用来接受主机返回的数据的即键盘按下了NumLock或CapsLock键时返回对应灯的亮和灭,所以这里的端点1是双向通道,如果要使用这部分功能则要实现端点1的输入回调函数,我们可以发现端点1的输出
回调函数在usb_endp.c中实现了(这里的输入输出我是以USB从机来说的)
  1. void EP1_IN_Callback(void)
  2. {
  3.   /* Set the transfer complete token to inform upper layer that the current
  4.   transfer has been complete */
  5.   PrevXferComplete = 1;
  6. }
复制代码
上面是在官方USB鼠标例程中的端点1的输出回调函数,然后我们可以在这添加它的输入回调函数
  1. void EP1_OUT_Callback(void)
  2. {
  3.   //添加对应代码如实现LED灯的亮灭
  4. }
复制代码
同时我们还要在usb_conf.h中做如下注释
  1. /* associated to defined endpoints */
  2. /* #define  EP1_IN_Callback   NOP_Process*/
  3. #define  EP2_IN_Callback   NOP_Process
  4. #define  EP3_IN_Callback   NOP_Process
  5. #define  EP4_IN_Callback   NOP_Process
  6. #define  EP5_IN_Callback   NOP_Process
  7. #define  EP6_IN_Callback   NOP_Process
  8. #define  EP7_IN_Callback   NOP_Process

  9. /*#define  EP1_OUT_Callback   NOP_Process*/
  10. #define  EP2_OUT_Callback   NOP_Process
  11. #define  EP3_OUT_Callback   NOP_Process
  12. #define  EP4_OUT_Callback   NOP_Process
  13. #define  EP5_OUT_Callback   NOP_Process
  14. #define  EP6_OUT_Callback   NOP_Process
  15. #define  EP7_OUT_Callback   NOP_Process
复制代码
因为默认这些函数是被定义为空的,这里我不需要主机返回数据给我所以这部分工作可以不做
然后通过以上努力我们就可以开始往主机传送数据了,根据设备描述符和报告描述符可知我们可以发送8字节的按键数据关于这8字节的按键数据含义这里引用圈圈的原文如下:
通过上面的分析,我们知道这个报告中只有一个报告,所以没有报告ID,
因此返回的都是实际使用的数据。总共有8字节输入,1字节输出。其中输入的
第一字节用来表示特殊按键,第二字节保留,后面的六字节为普通按键。如果
只有左ctrl键按下,则返回01 00 00 00 00 00 00 00(十六进制),如果
只有数字键1 按下,则返回00 00 59 00 00 00 00 00,如果数字
键1 和2 同时按下,则返回00 00 59 5A 00 00 00 00,如果
再按下左shift 键,则返回02 00 59 5A 00 00 00 00,
然后再释放1   键,则返回02 00 5A 00 00 00 00 00,
然后全部按键释放,则返回00 00 00 00 00 00 00 00。
所以我们就可以建立一个8字节的发送数据缓存区由上面的介绍修改缓存区的数据发送给主机,关于按键值对应的hex这里有一份资料说明

然后数据怎么发送回去在官方例程中我们可以找到如下:
  1. /* Copy mouse position info in ENDP1 Tx Packet Memory Area*/
  2. USB_SIL_Write(EP1_IN, Send_Buffer, 8);
  3. /* Enable endpoint for transmission */
  4. SetEPTxValid(ENDP1);
复制代码
就这样就发送出去了,相信到这里你就可以自由发挥了把
然后下面是我的发挥,我做的比较简单首先使能了一个定时器隔15ms就读一次加速度传感器的数据和按键的数据并通过定时器来消除抖动,这里按键支持同时按下和连续按下
  1. void TIM3_IRQHandler(void)
  2. {
  3.         /*保存当前按键端口状态*/
  4. //  static        __IO INT8U key1 = 0xf0;
  5.         /*保存上一状态按键端口状态*/
  6. //        static        __IO INT8U key2 = 0xf0;
  7.        
  8.         INT16U key = 0;
  9.        
  10.         /*连续读取陀螺仪的数值*/
  11.         ADXL345_MultRead(&ADXL345_data);
  12.        
  13.         /*读按键端口值*/
  14.         key = GPIO_ReadInputData(GPIOB);
  15.        
  16.         key1 = (INT8U) (key >> 8);
  17.        
  18.         key1 &= 0xf0;
  19.        
  20.        
  21.         /*表示按键发现了改变*/
  22.         if(key1 != key2)
  23.         {
  24.                 key_count++; //相当于延时
  25.                 if(key_count >= 0x02)
  26.                 {
  27.                         key2 = key1;
  28.                         key_flag = key2;
  29.                 }
  30.         }
  31.         else
  32.         {
  33.                 key_count = 0;
  34.         }
  35.        
  36.         /*设置标志*/
  37.         flag = 1;
  38.        
  39.         /*手动清数据更新中断标志*/
  40.         TIM_ClearFlag(TIM3, TIM_FLAG_Update);
  41. }
复制代码
然后就是根据读回来的数据做相应出来就行了如下:
  1. /*
  2. *简述 按键值处理
  3. *参数 无
  4. *返回 无
  5. */
  6. void Key_Handler(void)
  7. {
  8.         float tempX,tempY,tempZ;
  9.         //float roll,pitch,yaw;
  10.         INT8S roll,pitch;
  11.        
  12.    
  13.         //temp=(float)dis_data*3.9;  //计算数据和显示,查考ADXL345快速入门第4页
  14.   tempX = (float)ADXL345_data.ax * 0.0039;
  15.   tempY = (float)ADXL345_data.ay * 0.0039;
  16.   tempZ = (float)ADXL345_data.az * 0.0039;
  17.        
  18.         //roll =  (float)(((atan2(tempZ,tempX)*180)/3.1416)-90); //x轴角度
  19.         //pitch = (float)(((atan2(tempZ,tempY)*180)/3.1416)-90); //y轴角度
  20.         //yaw =   (float)((atan2(tempX,tempY)*180)/3.1416);      //Z轴角度
  21.   roll =  (INT8S)(((atan2(tempZ,tempX)*180)/3.1416)-90); //x轴角度
  22.         pitch = (INT8S)(((atan2(tempZ,tempY)*180)/3.1416)-90); //y轴角度
  23.        
  24.         if(roll < -30)
  25.                 Send_Buffer[2] = 0x52; //Keyboard UpArrow
  26.         else
  27.                 Send_Buffer[2] = 0x00;
  28.        
  29.         if(pitch > 30)
  30.                 Send_Buffer[3] = 0x50; //Keyboard LeftArrow
  31.         else if(pitch < -30)
  32.                 Send_Buffer[3] = 0x4f; //Keyboard RightArrow
  33.         else
  34.                 Send_Buffer[3] = 0x00;
  35.        
  36.         if(key_flag & 0x80) //检测R键是否按下
  37.                 Send_Buffer[4] = 0x00;
  38.         else
  39.                 Send_Buffer[4] = 0x15;
  40.        
  41.         if(key_flag & 0x40) //检测Shift是否按下
  42.                 Send_Buffer[0] &= 0xfd;
  43.         else
  44.                 Send_Buffer[0] |= 0x02;
  45.        
  46.         if((key_flag & 0x20) == 0x00) //检测是否要松开Keyboard UpArrow
  47.                 Send_Buffer[2] = 0x00;
  48.        
  49.         if(key_flag & 0x10) //检测是否按下Ctrl键
  50.                 Send_Buffer[0] &= 0xfe;
  51.         else
  52.                 Send_Buffer[0] |= 0x01;
  53. }
复制代码
到这里大功告成,飞车(话说好久没玩了)去了哦

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-4-25 21:45:04 | 显示全部楼层
很不错啊

出0入0汤圆

发表于 2013-4-25 22:12:53 | 显示全部楼层
不错啊,呵呵

出0入0汤圆

发表于 2013-4-25 22:20:14 | 显示全部楼层
厉害。。。。。。。。!

出0入0汤圆

发表于 2013-4-25 22:39:05 | 显示全部楼层
前几天用角度传感器做了一个玩飞车小东东,不好玩,不好控制

出0入0汤圆

发表于 2013-4-25 23:16:50 来自手机 | 显示全部楼层
Mark…
来自:amoBBS 阿莫电子论坛 Windows Phone 7 客户端

出0入0汤圆

发表于 2013-4-25 23:21:01 | 显示全部楼层
向楼主学习

出0入0汤圆

发表于 2013-4-25 23:53:43 | 显示全部楼层
做得好。你没说用加速度传感器干什么。我猜是手柄倾角转换为方向控制,这就是游戏手柄了。

出0入0汤圆

 楼主| 发表于 2013-4-26 10:14:21 | 显示全部楼层
xiaoxu191 发表于 2013-4-25 23:53
做得好。你没说用加速度传感器干什么。我猜是手柄倾角转换为方向控制,这就是游戏手柄了。 ...

嗯,是的,沙发位已更新说明

出0入0汤圆

 楼主| 发表于 2013-4-26 10:15:34 | 显示全部楼层
感谢楼上各位帮顶,沙发位更新了说明

出0入0汤圆

发表于 2013-4-26 12:59:20 | 显示全部楼层
、、、、、、、厉害

出0入0汤圆

发表于 2013-4-26 13:01:49 | 显示全部楼层
楼主 大约做了多长时间啊 。。。

出0入0汤圆

 楼主| 发表于 2013-4-26 14:30:31 | 显示全部楼层
727460067 发表于 2013-4-26 13:01
楼主 大约做了多长时间啊 。。。

从刚玩STM32的usb开始断断续续的十几天了

出0入0汤圆

发表于 2013-4-26 14:40:44 | 显示全部楼层
很不错啊!!谢谢楼主分享!!

出0入0汤圆

发表于 2013-4-26 16:19:20 | 显示全部楼层
这个也是我打算diy的

出0入0汤圆

发表于 2013-4-26 16:31:53 | 显示全部楼层
高级游戏手柄 顶一个。

出0入0汤圆

发表于 2013-4-26 19:47:41 | 显示全部楼层
MARK,以后看!!!

出0入0汤圆

发表于 2013-4-26 20:03:02 | 显示全部楼层
mark,nb

出0入0汤圆

发表于 2013-4-26 20:07:10 | 显示全部楼层
这个我要帮你顶,呵呵。

出0入0汤圆

 楼主| 发表于 2013-4-26 20:20:56 | 显示全部楼层
jxcylxh 发表于 2013-4-26 20:07
这个我要帮你顶,呵呵。

感谢帮顶

出0入0汤圆

发表于 2013-4-26 20:25:19 | 显示全部楼层
顶个............

出0入0汤圆

发表于 2013-4-27 10:57:51 | 显示全部楼层
这个不错,顶个

出0入0汤圆

发表于 2013-4-27 11:05:52 | 显示全部楼层
有创意。

出0入0汤圆

发表于 2013-4-27 11:09:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-4-29 16:03:57 | 显示全部楼层
顶,厉害

出0入0汤圆

发表于 2013-4-29 16:13:50 | 显示全部楼层
哇,,,很不错啊,厉害!LZ的飞车技术和我有得一拼

出0入0汤圆

发表于 2013-5-24 09:00:00 | 显示全部楼层
相当好,大师的水平相当高啊

出0入0汤圆

发表于 2013-5-24 10:08:37 | 显示全部楼层
很想试试,不错

出0入0汤圆

发表于 2013-5-24 10:25:46 | 显示全部楼层
教程写的很好,赞一个

出0入0汤圆

发表于 2013-5-24 10:32:38 | 显示全部楼层
不错!学习!

出0入0汤圆

发表于 2013-5-24 10:36:04 | 显示全部楼层
楼主顶你,做的很棒

出0入0汤圆

发表于 2013-5-30 09:02:52 | 显示全部楼层
好玩~~~咧~~~睇下有时间搞返只~

出0入0汤圆

发表于 2013-5-30 21:29:11 | 显示全部楼层
楼主,能上完整的原理图,让我们看得明白一些。。。。。。。。。。

出0入0汤圆

发表于 2013-5-30 21:35:09 | 显示全部楼层

不错!学习!

出0入0汤圆

发表于 2013-5-30 21:42:25 | 显示全部楼层
亲,我刚入门STM32.买的是野火开发板,想做你做的重力感应键盘玩QQ飞车,可惜能力不足,很多都看不懂,能有再具体的资料吗,邮箱873528519@qq.com   不胜感激



出0入0汤圆

发表于 2013-5-30 22:20:30 | 显示全部楼层
哈哈,蛮有肆意的

出0入0汤圆

发表于 2013-6-2 21:58:40 | 显示全部楼层
楼主,我真的很需要做这个项目,看到这条回复希望尽快邮箱联系我呀
我邮箱873528519@qq.com

出0入0汤圆

 楼主| 发表于 2013-6-2 22:09:49 | 显示全部楼层
fenglindao 发表于 2013-6-2 21:58
楼主,我真的很需要做这个项目,看到这条回复希望尽快邮箱联系我呀
我邮箱 ...

你好,沙发位的说明与资料已经很详细了,仔细看下应该能明白了,资料也都给出来了

出0入0汤圆

发表于 2013-6-2 22:15:30 | 显示全部楼层
tianheiGE 发表于 2013-6-2 22:09
你好,沙发位的说明与资料已经很详细了,仔细看下应该能明白了,资料也都给出来了 ...

我几乎是个小白呀
刚刚才看圈大神[玩转USB]50页
所以你能不能把原理图和程序打包发给我呢 真的想做这个东西  

出0入0汤圆

发表于 2013-6-2 22:18:22 | 显示全部楼层
tianheiGE 发表于 2013-6-2 22:09
你好,沙发位的说明与资料已经很详细了,仔细看下应该能明白了,资料也都给出来了 ...

因为硬件要先做出来把  所以需要原理图呀   还有急需ADXL345的相关资料
我是很想做这个东西的  传感器已经按键什么的已经买好了 真的想做

出0入0汤圆

 楼主| 发表于 2013-6-2 22:25:42 | 显示全部楼层
fenglindao 发表于 2013-6-2 22:18
因为硬件要先做出来把  所以需要原理图呀   还有急需ADXL345的相关资料
我是很想做这个东西的  传感器已 ...

嗯,这个我也没画原理图,就几个按键没啥好画的,345我用的是我买来的九轴模块上的所以没啥好画的,你看下程序就能懂的

出0入0汤圆

 楼主| 发表于 2013-6-2 22:29:11 | 显示全部楼层
fenglindao 发表于 2013-6-2 22:18
因为硬件要先做出来把  所以需要原理图呀   还有急需ADXL345的相关资料
我是很想做这个东西的  传感器已 ...

ADX345的资料谷歌一下一大把,谷歌ADX345
进去官网下资料,看应用笔记官网资料

出0入0汤圆

发表于 2013-6-2 22:29:55 | 显示全部楼层
tianheiGE 发表于 2013-6-2 22:25
嗯,这个我也没画原理图,就几个按键没啥好画的,345我用的是我买来的九轴模块上的所以没啥好画的,你看 ...

大神那
偶真的是小白啊    STM32刚入门    能不能帮我画下 发给我  还有345的资料

出0入0汤圆

 楼主| 发表于 2013-6-2 22:30:35 | 显示全部楼层
fenglindao 发表于 2013-6-2 22:18
因为硬件要先做出来把  所以需要原理图呀   还有急需ADXL345的相关资料
我是很想做这个东西的  传感器已 ...

要是你实在不想动手动脑的话叫我给你做好寄给你,给点费用就好了

出0入0汤圆

 楼主| 发表于 2013-6-2 22:33:07 | 显示全部楼层
fenglindao 发表于 2013-6-2 22:29
大神那
偶真的是小白啊    STM32刚入门    能不能帮我画下 发给我  还有345的资料 ...

我不是什么大神,劝你还是自己动动手动动脑慢慢就能折腾出来的,相信你

出0入0汤圆

发表于 2013-6-2 22:35:25 | 显示全部楼层
本帖最后由 fenglindao 于 2013-6-2 22:39 编辑
tianheiGE 发表于 2013-6-2 22:33
我不是什么大神,劝你还是自己动动手动动脑慢慢就能折腾出来的,相信你 ...


大神,程序我肯定自己会去琢磨啦   345的资料我自己会去查
关键是洞洞板上的东东
我真的很需要原理图

我Q:873528519  因为已经选好了这个项目了  材料也已经买了  就等原理图  然后开始动手做了   希望大神帮个忙
因为单看程序看不出原理图呀[能力有限]

出0入0汤圆

发表于 2013-6-3 12:56:48 | 显示全部楼层
tianheiGE 发表于 2013-6-2 22:33
我不是什么大神,劝你还是自己动动手动动脑慢慢就能折腾出来的,相信你 ...

真的,急需原理图,希望大神帮下忙

出0入0汤圆

发表于 2013-6-3 13:07:58 | 显示全部楼层
楼上的,这样就有点过了啊。。。345本身就不是什么很复杂的东西,你查下它的资料,里面会有应用举例,根据那个来做就行了,至于跟系统的连接,看楼主给的程序里对接口的定义就能找出来了。

这么伸手要东西就不太像话了。

出0入0汤圆

发表于 2013-6-3 13:40:45 | 显示全部楼层
很不错!自己玩游戏。

出0入0汤圆

发表于 2013-6-3 13:44:54 | 显示全部楼层
jiaohaitao 发表于 2013-4-25 22:39
前几天用角度传感器做了一个玩飞车小东东,不好玩,不好控制

不错,很好!

出0入0汤圆

发表于 2013-6-3 13:46:48 | 显示全部楼层
tianheiGE 发表于 2013-4-25 21:19
自己沙发顶顶更健康
既然占了沙发位,就简单的解释下把
首先硬件方面视频里洞洞板上实现了四个按键 ...

ADXL345零售价格如何?

出0入0汤圆

发表于 2013-6-3 13:50:09 | 显示全部楼层
LZ这么N,我也想做一个。学习中……

出0入0汤圆

 楼主| 发表于 2013-6-3 15:06:57 | 显示全部楼层
fenglindao 发表于 2013-6-3 12:56
真的,急需原理图,希望大神帮下忙

嗯,好吧,下午没啥事给你画了下,之前没画图的,随便画了下你能懂的把,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-6-3 23:03:36 | 显示全部楼层
教程写的很详细,谢谢分享。

出0入0汤圆

发表于 2013-6-4 09:36:17 | 显示全部楼层
很不错啊

出0入0汤圆

发表于 2013-10-11 20:06:53 | 显示全部楼层
看得很过瘾啊!

出0入24汤圆

发表于 2013-10-11 22:42:42 来自手机 | 显示全部楼层
学习了,小白继续努力

出0入0汤圆

发表于 2013-10-11 23:27:03 | 显示全部楼层
不知道这个玩飞车手感如何

出0入0汤圆

发表于 2013-10-12 12:42:53 | 显示全部楼层
分析比较到位

出0入0汤圆

发表于 2013-10-12 13:22:32 | 显示全部楼层
向楼主学习

出0入0汤圆

发表于 2013-10-12 14:24:47 | 显示全部楼层
这个一定得顶。。。。。。。。。。。。。。。。。。。。

出0入0汤圆

发表于 2013-10-12 14:45:24 | 显示全部楼层
太好了,寒假我也研究个,用6050做

出0入0汤圆

发表于 2013-10-12 14:47:43 | 显示全部楼层
那8个字节的数据怎么填充啊?

出0入0汤圆

发表于 2013-10-12 16:43:26 | 显示全部楼层
为什么我用你的代码,,,,输入R,,,,结果松手后.......电脑上还是一直在输入R啊?

出0入0汤圆

 楼主| 发表于 2013-10-13 09:19:36 | 显示全部楼层
Sc0pin 发表于 2013-10-12 16:43
为什么我用你的代码,,,,输入R,,,,结果松手后.......电脑上还是一直在输入R啊?

...

发送缓存区的填充格式,沙发位已经说清楚了,如果你代码没改的话,你检查下按下R键之后,硬件上R键是否还是处以按下状态

出0入0汤圆

发表于 2013-10-14 11:43:46 | 显示全部楼层
tianheiGE 发表于 2013-10-13 09:19
发送缓存区的填充格式,沙发位已经说清楚了,如果你代码没改的话,你检查下按下R键之后,硬件上R键是否还 ...

硬件上没有一直按下,,,按键的消抖,,,按下 和松手检测统统都有,,,,,,

简单的控制led灯是没有问题的,

不知为什么用在usb上就好像是一直按下的情况.

原因不明啊

出0入0汤圆

发表于 2013-10-14 11:49:02 | 显示全部楼层
tianheiGE 发表于 2013-10-13 09:19
发送缓存区的填充格式,沙发位已经说清楚了,如果你代码没改的话,你检查下按下R键之后,硬件上R键是否还 ...

还有个需要说明的是,,,我是把R键模拟成键盘的R键,,,,陀螺仪和其他的按键都统统屏蔽了,

我的想法就是点一下按键,它输入一个r在文本编辑器里,长按就输入一长串...松手就停止输入


现在是我点一下松开它也在不停的输入r,除非拔掉usb线,,,,,上电不按按键它就不输入,说明按键以及按键的逻辑判断是对的.

按键的电平检查也没有问题,,,,不然的话,上电就自动输入了,不需要手动按了

出0入0汤圆

 楼主| 发表于 2013-10-14 15:12:32 | 显示全部楼层
Sc0pin 发表于 2013-10-14 11:49
还有个需要说明的是,,,我是把R键模拟成键盘的R键,,,,陀螺仪和其他的按键都统统屏蔽了,

我的想法就是点一 ...

嗯,不知道你的程序是什么样的,建议还是仔细检测下程序的逻辑,看是否检测到一次按下就一直按下成立了

出0入0汤圆

发表于 2013-10-14 17:10:42 | 显示全部楼层
这个好啊 ,一直想做一个这种键盘来玩皇牌空战,却一直没时间,收下了

出0入0汤圆

发表于 2013-10-29 11:21:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-10-29 13:12:19 | 显示全部楼层
来学习学习哈。。。

出0入0汤圆

发表于 2013-10-29 14:04:23 | 显示全部楼层
Sc0pin 发表于 2013-10-14 11:49
还有个需要说明的是,,,我是把R键模拟成键盘的R键,,,,陀螺仪和其他的按键都统统屏蔽了,

我的想法就是点一 ...

这位仁兄,最后的结果是因为什么涅?一直返回R?

出0入0汤圆

发表于 2013-10-30 11:33:48 | 显示全部楼层
对,就是一直返回R,哎,搞不清楚什么状况了

出0入0汤圆

发表于 2013-11-20 23:51:40 | 显示全部楼层
Sc0pin 发表于 2013-10-30 11:33
对,就是一直返回R,哎,搞不清楚什么状况了

我和你一样的问题,就是输入什么,一直督在输入相同的东西,不知如何解决?

出0入0汤圆

发表于 2013-11-21 08:25:08 | 显示全部楼层
很有创意的东西,收藏了,以后慢慢来消化.

出0入0汤圆

发表于 2013-11-21 08:56:05 | 显示全部楼层
帮顶,不错~~~

出0入10汤圆

发表于 2014-5-18 15:59:13 | 显示全部楼层
楼主好厉害

出0入10汤圆

发表于 2014-5-18 16:17:32 | 显示全部楼层
楼主打字是不大逗号的,研究的USB的同时把语文也给练了

出0入0汤圆

发表于 2014-5-18 18:23:36 | 显示全部楼层
玩飞车可以不用键盘了!

出0入10汤圆

发表于 2014-5-23 12:46:12 | 显示全部楼层
楼主可否告诉我怎么才能让按键一直按下?
http://www.amobbs.com/thread-5581955-1-1.html

出0入0汤圆

发表于 2014-5-23 13:16:22 | 显示全部楼层
tianheiGE 发表于 2013-4-25 21:19
自己沙发顶顶更健康
既然占了沙发位,就简单的解释下把
首先硬件方面视频里洞洞板上实现了四个按键 ...

我想问一下楼主,罗技有一款IPHONE5S 的游戏手柄是什么原理?和你这个原理一样吗???

出0入0汤圆

 楼主| 发表于 2014-5-23 13:26:25 | 显示全部楼层
lnso 发表于 2014-5-23 13:16
我想问一下楼主,罗技有一款IPHONE5S 的游戏手柄是什么原理?和你这个原理一样吗??? ...

如果他们是用的USB键盘协议就是把,不太了解。

出0入0汤圆

发表于 2014-5-23 20:46:12 | 显示全部楼层
LZ吊,赞一个

出0入10汤圆

发表于 2014-5-24 09:23:57 | 显示全部楼层
还想问下楼主,那个官方的东西是去哪里弄来得,我发觉里面除了鼠标还有很多USB相关的用途的程序,可能还可以玩玩其他的。

出0入0汤圆

发表于 2014-5-24 10:24:33 | 显示全部楼层
比我弄得灵敏,学习学习

出0入0汤圆

 楼主| 发表于 2014-5-24 10:31:43 | 显示全部楼层
10xjzheng 发表于 2014-5-24 09:23
还想问下楼主,那个官方的东西是去哪里弄来得,我发觉里面除了鼠标还有很多USB相关的用途的程序,可能还可 ...

多是从官网下载的,你去官网就能找到

出0入10汤圆

发表于 2014-5-24 20:38:00 | 显示全部楼层
本帖最后由 10xjzheng 于 2014-5-24 20:53 编辑
tianheiGE 发表于 2014-5-24 10:31
多是从官网下载的,你去官网就能找到


大哥能找你QQ聊下你这个项目的问题吗?我能得出pitch,row和yaw,但是在用上位机显示姿态的时候,有时候会相反,就是我将传感器左转,但是在上位机中是右转的,这个问题怎么解决?在线等回复啊

出0入10汤圆

发表于 2014-5-24 21:46:34 | 显示全部楼层
大哥我移植你官方程序出现这样子的错误,求指导。
.\USBHid\inc\platform_config.h(50): error:  #35: #error directive: "Missing define: USE_STM3210B_EVAL, USE_STM3210E_EVAL"
很多个啊

出0入0汤圆

 楼主| 发表于 2014-5-24 21:53:14 | 显示全部楼层
10xjzheng 发表于 2014-5-24 20:38
大哥能找你QQ聊下你这个项目的问题吗?我能得出pitch,row和yaw,但是在用上位机显示姿态的时候,有时候 ...

我是直接用原始的传感器数据做的,只是简单的计算了下倾角

出0入0汤圆

 楼主| 发表于 2014-5-24 21:54:18 | 显示全部楼层
10xjzheng 发表于 2014-5-24 21:46
大哥我移植你官方程序出现这样子的错误,求指导。
.\USBHid\inc\platform_config.h(50): error:  #35: #err ...

这个定义你填在这个地方,如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-5-24 22:29:40 | 显示全部楼层
大师!水平相当高啊

出0入0汤圆

发表于 2014-6-18 19:38:23 | 显示全部楼层
我感到自己只是单纯的无知而已

出0入0汤圆

发表于 2014-6-18 23:16:27 | 显示全部楼层
好贴必须顶...

出0入0汤圆

发表于 2014-6-19 08:24:35 | 显示全部楼层
好,这个玩游戏方便多了!

出0入0汤圆

发表于 2014-6-19 09:20:55 | 显示全部楼层
好东西,学习了

出0入0汤圆

发表于 2014-8-13 15:53:46 | 显示全部楼层
顶起来。。。。。。。。。。。。。

出0入0汤圆

发表于 2014-11-6 09:42:33 | 显示全部楼层
USB学习,mark

出0入0汤圆

发表于 2015-1-14 17:09:52 | 显示全部楼层
省了个感应手柄的钱,现有STM32和九轴模块

出0入0汤圆

发表于 2015-1-15 22:49:46 | 显示全部楼层
很好玩的东西,先收藏着,谢谢楼主分享。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-30 12:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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