查看: 9230|回复: 36

[分享] 【FRDM KL25Z开发经验分享】悬空鼠标设计与实现[申精]

[复制链接]

该用户从未签到

24

主题

364

帖子

0

高级会员

Rank: 4

积分
760
最后登录
2021-4-2
发表于 2015-5-30 16:58:49 | 显示全部楼层 |阅读模式
本帖最后由 guo8113 于 2015-6-9 10:56 编辑

==========================================================原创文章转载请注明:blog.csdn.net/guo8113
==========================================================================
说明:

今天接着上次的mbed工程又玩弄了一番,实现了基于mbed RTOS以及三轴重力传感器的鼠标,当然了,由于FRDM25Z上没有按键,通过板上的TSI触摸实现鼠标的左右键功能。

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

mbed的在线编译工具不会用的参考mbed试玩—快速开发MCU应用(基于FRDM-KL25Z)

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


导入库时通过import 导入;


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


3.新建并编写main函数:终于可以上代码了(下面的代码是简化版本,完整功能见附件):
[cpp] view plaincopy


  • #include "mbed.h"  
  • #include "rtos.h"  
  •   
  • #include "MMA8451Q.h"  
  • #include "USBMouse.h"  
  • #include "tsi_sensor.h"  
  • //MMA8451Q definiation  
  • #if   defined (TARGET_KL25Z) || defined (TARGET_KL46Z)  
  •   PinName const SDA = PTE25;  
  •   PinName const SCL = PTE24;  
  • #elif defined (TARGET_KL05Z)  
  •   PinName const SDA = PTB4;  
  •   PinName const SCL = PTB3;  
  • #elif defined (TARGET_K20D50M)  
  •   PinName const SDA = PTB1;  
  •   PinName const SCL = PTB0;  
  • #else  
  •   #error TARGET NOT DEFINED  
  • #endif  
  •   
  • #define MMA8451_I2C_ADDRESS (0x1d<<1)  
  •   
  • //  
  • #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)  
  •   #define ELEC0 9  
  •   #define ELEC1 10  
  • #elif defined (TARGET_KL05Z)  
  •   #define ELEC0 9  
  •   #define ELEC1 8  
  • #else  
  •   #error TARGET NOT DEFINED  
  • #endif  
  •   
  • MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);  
  •   
  • Ticker tick;  
  • PwmOut rled(LED1);  
  • PwmOut gled(LED2);  
  • PwmOut bled(LED3);  
  •   
  • TSIAnalogSlider tsi(ELEC0, ELEC1, 40);  
  • USBMouse mouse;  
  • //InterruptIn sw2(SW2);  
  •   
  • //thread pointer  
  • Thread *thread2;  
  •   
  • float x=0, y=0, z=0,t=0;  
  •   
  • //intruppt  
  • void sw2_press(void)  
  • {  
  •     thread2->signal_set(0x1);  
  • }  
  •   
  • void led_thread(void const *argument)  
  • {  
  •     while (true) {  
  •         rled = abs(1.0f - x -t);  
  •         gled = abs(1.0f - y -t);  
  •         bled = abs(1.0f - z -t);  
  •         Thread::wait(50);  
  •     }  
  • }  
  •   
  • void scan_thread(void const *argument)  
  • {  
  •     while (true) {  
  •         Thread::signal_wait(0x1);  
  •        // x = abs(acc.getAccX());  
  •        // y = abs(acc.getAccY());  
  •        // z = abs(acc.getAccZ());  
  •         x = acc.getAccX();  
  •         y = acc.getAccY();  
  •         z = acc.getAccZ();  
  •         t = tsi.readPercentage();  
  •     }  
  • }  
  •   
  • int main()  
  • {  
  •     Thread thread(led_thread);  
  •     thread2 = new Thread(scan_thread);  
  •   
  •   //  sw2.fall(&sw2_press);  
  •     tick.attach(&sw2_press,0.001);   //scan MMA8451Q ervery 0.01s  
  •     while (true) {  
  •         Thread::wait(1);  
  •         mouse.move( y*127,x*127);  
  •         printf("\r\n 0.1 seconds passed: %f,%f,%f,%f \r\n", x,y,z,t);  
  •         fflush(stdout);  
  •     }  
  • }  



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

工程使用了RTOS,已经导出keil工程,见附件,另一个工程为一个3d加速度计的简单例子。


FRDM_MMA8451Q_uvision_kl25z.zip

266.68 KB, 下载次数: 16, 下载积分: 威望 1

frdm_rtos_uvision_kl25z.zip

918.33 KB, 下载次数: 12, 下载积分: 威望 1

回复

使用道具 举报

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

    连续签到: 1 天

    [LV.Master]伴坛终老

    107

    主题

    4270

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    10481
    最后登录
    2023-9-17
    发表于 2015-5-30 21:10:40 | 显示全部楼层
    KL25Z上用滑条当按键,效果也是不错的。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24

    主题

    364

    帖子

    0

    高级会员

    Rank: 4

    积分
    760
    最后登录
    2021-4-2
     楼主| 发表于 2015-5-31 22:27:32 | 显示全部楼层
    shaoziyang 发表于 2015-5-30 21:10
    KL25Z上用滑条当按键,效果也是不错的。

    就是用滑条当的左右键
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30

    主题

    487

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1215
    最后登录
    2020-8-18
    发表于 2015-5-31 22:29:58 | 显示全部楼层
    顶起来 不错  
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16714
    最后登录
    1970-1-1
    发表于 2015-6-1 12:31:20 | 显示全部楼层
    多谢分享
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2015-6-1 14:39:25 | 显示全部楼层
    非常感谢你关于Kinetis的技术问题。如果你没有其他问题,我们将此帖默认为已解决.
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-4 08:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    24

    主题

    291

    帖子

    0

    高级会员

    Rank: 4

    积分
    614
    最后登录
    2020-11-21
    发表于 2015-6-1 15:33:22 | 显示全部楼层
    感谢 楼主的分想
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17

    主题

    244

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    339
    最后登录
    1970-1-1
    发表于 2015-6-1 16:55:32 | 显示全部楼层
    赚金币                     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    300

    帖子

    0

    高级会员

    Rank: 4

    积分
    746
    最后登录
    2016-5-26
    发表于 2015-6-1 16:56:30 | 显示全部楼层
    多谢分享。。
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-22 09:09
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    24

    主题

    446

    帖子

    0

    高级会员

    Rank: 4

    积分
    876
    最后登录
    2019-3-8
    发表于 2015-6-2 13:07:11 | 显示全部楼层
    好帖子,有借鉴作用,谢谢
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-27 12:56 , Processed in 0.104279 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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