查看: 2158|回复: 2

[原创] mbed系列 - 基于飞思卡尔FRDM KL25Z鼠标设计的高速实现

[复制链接]

该用户从未签到

10

主题

273

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1485
最后登录
2020-2-18
发表于 2016-3-17 09:35:02 | 显示全部楼层 |阅读模式

转载地址:http://www.cnblogs.com/bhlsheji/p/4912151.html


今天接着上次的mbed工程又玩弄了一番,实现了基于mbed RTOS以及三轴重力传感器的鼠标,当然了,由于FRDM25Z上没有按键,仅仅实现了鼠标的移动。

在这个系统中更是充分体现了mbed的方便快捷,分分钟钟几行代码搞定了一个飞鼠的设计。


实现步骤:

1.新建工程,导入相应的库(在线有提供的库):

20141119211749306.jpg

导入库时通过import 导入;

20141119211832955.jpg

2.为了好玩我把TSI(触摸按键),mbed RTOS、LED、Timer都导入了,其实这个功能用不到RTOS。可导入的库有:

20141119212011109.jpg

3.新建并编写main函数:终于可以上代码了:


  1. #include "mbed.h"  
  2. #include "rtos.h"  
  3.   
  4. #include "MMA8451Q.h"  
  5. #include "USBMouse.h"  
  6. #include "tsi_sensor.h"  
  7. //MMA8451Q definiation  
  8. #if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)  
  9.   PinName const SDA = PTE25;  
  10.   PinName const SCL = PTE24;  
  11. #elif defined (TARGET_KL05Z)  
  12.   PinName const SDA = PTB4;  
  13.   PinName const SCL = PTB3;  
  14. #elif defined (TARGET_K20D50M)  
  15.   PinName const SDA = PTB1;  
  16.   PinName const SCL = PTB0;  
  17. #else  
  18.   #error TARGET NOT DEFINED  
  19. #endif  
  20.   
  21. #define MMA8451_I2C_ADDRESS (0x1d<<1)  
  22.   
  23. //  
  24. #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)  
  25.   #define ELEC0 9  
  26.   #define ELEC1 10  
  27. #elif defined (TARGET_KL05Z)  
  28.   #define ELEC0 9  
  29.   #define ELEC1 8  
  30. #else  
  31.   #error TARGET NOT DEFINED  
  32. #endif  
  33.   
  34. MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);  
  35.   
  36. Ticker tick;  
  37. PwmOut rled(LED1);  
  38. PwmOut gled(LED2);  
  39. PwmOut bled(LED3);  
  40.   
  41. TSIAnalogSlider tsi(ELEC0, ELEC1, 40);  
  42. USBMouse mouse;  
  43. //InterruptIn sw2(SW2);  
  44.   
  45. //thread pointer  
  46. Thread *thread2;  
  47.   
  48. float x=0, y=0, z=0,t=0;  
  49.   
  50. //intruppt  
  51. void sw2_press(void)  
  52. {  
  53.     thread2->signal_set(0x1);  
  54. }  
  55.   
  56. void led_thread(void const *argument)  
  57. {  
  58.     while (true) {  
  59.         rled = abs(1.0f - x -t);  
  60.         gled = abs(1.0f - y -t);  
  61.         bled = abs(1.0f - z -t);  
  62.         Thread::wait(50);  
  63.     }  
  64. }  
  65.   
  66. void scan_thread(void const *argument)  
  67. {  
  68.     while (true) {  
  69.         Thread::signal_wait(0x1);  
  70.        // x = abs(acc.getAccX());  
  71.        // y = abs(acc.getAccY());  
  72.        // z = abs(acc.getAccZ());  
  73.         x = acc.getAccX();  
  74.         y = acc.getAccY();  
  75.         z = acc.getAccZ();  
  76.         t = tsi.readPercentage();  
  77.     }  
  78. }  
  79.   
  80. int main()  
  81. {  
  82.     Thread thread(led_thread);  
  83.     thread2 = new Thread(scan_thread);  
  84.   
  85.   //  sw2.fall(&sw2_press);  
  86.     tick.attach(&sw2_press,0.001);   //scan MMA8451Q ervery 0.01s  
  87.     while (true) {  
  88.         Thread::wait(1);  
  89.         mouse.move( y*127,x*127);  
  90.         printf("\r\n 0.1 seconds passed: %f,%f,%f,%f \r\n", x,y,z,t);  
  91.         fflush(stdout);  
  92.     }  
  93. }  
复制代码


OK ,大功告成,连接USB线到板子上的USB KL25Z到PC,PC识别USB输入设备,鼠标动了。。。。

回复

使用道具 举报

该用户从未签到

2

主题

109

帖子

0

中级会员

Rank: 3Rank: 3

积分
278
最后登录
2016-6-10
发表于 2016-3-17 13:04:21 | 显示全部楼层
好好
回复

使用道具 举报

该用户从未签到

40

主题

500

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1089
最后登录
2025-1-13
发表于 2016-3-17 14:23:27 | 显示全部楼层
这个不错!挺好的学习了!!
xingxiny75@gmail.com.png
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-22 14:16 , Processed in 0.084133 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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