查看: 6629|回复: 14

[原创] 【FRDM-K64F】空中飞鼠 之 模拟鼠标初步

[复制链接]
  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-6-10 07:48:24 | 显示全部楼层 |阅读模式
    在前一贴里我们已经读取了FXOS8700Q的加速度值,这节要用读取出来的值来指挥鼠标动作了。
    我们还是要使用mbed,这次要用到USBMouse和RTOS了。
    实验目的:
    初步实现空中挥舞K64F开发板来指挥鼠标动作。
    电路图: null.png null.png null.png null.png null.png null.png null.png null.png null.png null.png
    参见:https://www.nxpic.org.cn/module/forum/thread-599459-1-1.html 这一贴,我懒得贴图了。
    实验代码:
    1. #include "mbed.h"
    2. #include "rtos.h"
    3. #include "FXOS8700Q.h"

    4. #define MOUSE

    5. #ifdef MOUSE
    6. #include "USBMouse.h"
    7. #endif

    8. //I2C_SCL = PTE24  
    9. //I2C_SDA = PTE25
    10. FXOS8700Q_acc acc(I2C_SDA, I2C_SCL, FXOS8700CQ_SLAVE_ADDR1);
    11. //LED_RED = PTB22
    12. DigitalOut led(LED_RED);
    13. DigitalOut led_x(LED_GREEN);
    14. DigitalOut led_y(LED_BLUE);
    15. //加速度数据
    16. MotionSensorDataCounts accData;
    17. //FXOS8700Q静态偏差
    18. int offset_x = 0;
    19. int offset_y = -212;
    20. int offset_z = 203;

    21. int dx,dy;

    22. #ifdef MOUSE
    23. Mutex mtx;
    24. USBMouse mouse;
    25. #else
    26. //USBTX = PTB17
    27. //USBRX = PTB16
    28. Serial pc(USBTX,USBRX);
    29. #endif

    30. #ifdef MOUSE
    31. //X轴移动鼠标
    32. void MouseMoveX(void const* args)
    33. {
    34.     while(1)
    35.     {
    36.         int mx = *((int*)args);
    37.         //静止
    38.         if(abs(mx) <= 1)
    39.         {
    40.             Thread::signal_wait(0xAA);
    41.             continue;
    42.         }
    43.         
    44.         //计算位移方向
    45.         int16_t distance = mx >= 0 ? 1 : -1;
    46.         //进行互斥访问
    47.         mtx.lock();
    48.         mouse.move(distance,0);
    49.         mtx.unlock();
    50.         //等待
    51.         Thread::wait(6 - abs(mx/8));
    52.         led_x = !led_x;
    53.     }
    54. }
    55. //Y轴移动鼠标
    56. void MouseMoveY(void const* args)
    57. {
    58.     while(1)
    59.     {
    60.         int my = *((int*)args);
    61.         if(abs(my) <= 1)
    62.         {
    63.             Thread::signal_wait(0xAA);
    64.             continue;
    65.         }
    66.         
    67.         int16_t distance = my >=0 ? 1 : -1;
    68.         mtx.lock();
    69.         mouse.move(0,distance);
    70.         mtx.unlock();
    71.         Thread::wait(6 - abs(my/8));
    72.         led_y = !led_y;
    73.     }
    74. }
    75. #endif

    76. int main()
    77. {
    78.     #ifdef MOUSE
    79.     Thread tx(&MouseMoveX,&dx);
    80.     Thread ty(&MouseMoveY,&dy);
    81.     #else
    82.     //cc.whoAmI() 读取并检查FXOS8700CQ WHOAMI寄存器
    83.     pc.printf("Who AM I= %X\r\n", acc.whoAmI());
    84.     #endif
    85.    
    86.     //开启加速度测量
    87.     acc.enable();
    88.    
    89.     while(1)
    90.     {
    91.         //取3个轴上的加速度值
    92.         acc.getAxis(accData);
    93.         dx = (accData.x - offset_x) / 100;
    94.         dy = (accData.y - offset_y) / 100;
    95.                
    96.         #ifdef MOUSE
    97.         //判断线程状态,发送信号
    98.         if(tx.get_state() == Thread::WaitingAnd)
    99.                 tx.signal_set(0xAA);
    100.         
    101.         if(ty.get_state() == Thread::WaitingAnd)
    102.                 ty.signal_set(0xAA);
    103.         #else
    104.         //输出
    105.         pc.printf("X:%d    Y:%d\n",dx,dy);
    106.         #endif
    107.         
    108.         //翻转LED
    109.         led = !led;
    110.         //等待1s
    111.         wait(0.0001);
    112.     }
    113. }
    复制代码
    实验视频:
    本来想用直接看鼠标轨迹的,可是觉得还是用游戏来看更直观。




    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
     楼主| 发表于 2015-6-10 09:39:28 | 显示全部楼层
    国际惯例:沙发自己坐。
    该会员没有填写今日想说内容.
    回复 支持 1 反对 0

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-17 19:57
  • 签到天数: 2310 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    107

    主题

    4270

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    10481
    最后登录
    2023-9-17
    发表于 2015-6-10 09:42:42 | 显示全部楼层
    非常不错!
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-5-7 09:07
  • 签到天数: 353 天

    连续签到: 1 天

    [LV.8]以坛为家I

    141

    主题

    8056

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    5785
    最后登录
    2025-5-7
    发表于 2015-6-10 09:48:04 | 显示全部楼层
    很厉害,改成无线的更好
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
     楼主| 发表于 2015-6-10 09:57:38 | 显示全部楼层
    wambob 发表于 2015-6-10 09:48
    很厉害,改成无线的更好

    慢慢来,现在还在调,鼠标完全调好了,再用无线。那就简单多了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13122
    最后登录
    2019-1-27
    发表于 2015-6-10 10:11:20 | 显示全部楼层
    楼主已经开始动工啦~ 加油! 飞友们也可以多多参与讨论,给楼主多点建议。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2016-10-28 22:22
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    20

    主题

    209

    帖子

    0

    高级会员

    Rank: 4

    积分
    763
    最后登录
    1970-1-1
    发表于 2015-6-10 12:00:37 | 显示全部楼层
    这东西以前在网上见到好多次了,但一直没有关注过。恩,会持续关注,期待楼主大作
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    219

    帖子

    0

    高级会员

    Rank: 4

    积分
    653
    最后登录
    2017-11-19
    发表于 2015-6-10 21:17:33 | 显示全部楼层
    看看。。。。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-8-30 16:02
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    36

    主题

    1065

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1851
    最后登录
    2019-11-19
    发表于 2015-6-11 02:26:26 | 显示全部楼层
    厉害的一笔!
    又是mbed!今天已经在第三个帖子看到它了!
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
     楼主| 发表于 2015-6-11 09:18:10 | 显示全部楼层

    请多指导。。。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-19 16:20 , Processed in 0.152572 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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