0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RT-Thread与英飞凌Psoc6-evaluationkit-062S2的智能触摸与手势系统 | 技术集结

RT-Thread官方账号 ? 2025-09-13 10:06 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目录


电容触摸界面


手势识别


网络同步


RTduino使用


使用方法


项目源码

1 电容触摸界面


利用 Psoc6-evaluationkit-062S2 的 CapSense 模块设计一个交互式触摸面板。

可以通过触摸面板调 整PWM的频率使蜂鸣器播放不同的音调(需要映射do (1), re (2), mi (3), fa (4) 音符)+ 调整 PWM 信号的占空比控制 LED 指示灯。

1.1 Capsense触控

在Slider例程上修改,根据触摸位置(x)判断音符、手势

slider_touch_info = CyCapSense_GetTouchInfo(CY_CAPSENSE_LINEARSLIDER0_WDGT_ID, &cy_capsense_context); slider_touch_status = slider_touch_info->numPosition; slider_pos = slider_touch_info->ptrPosition->x; intx=slider_pos; if(RT_NULL != slider_touch_status) { intsenor_id=detect_sensor_id(); char*gesture=detect_gesture(x); intnow_note_id=detect_note(x); screen_show_info(now_note_id,senor_id,gesture); rt_event_send(&buzzer_event, EVENT_TOUCH); message_json(senor_id, gesture); }

获取sensor id,逐个判断是否激活,返回id

Cy_CapSense_IsSensorActive(CY_CAPSENSE_LINEARSLIDER0_WDGT_ID,i,&cy_capsense_context

intdetect_sensor_id(){ for(int i=0;i<4;i++)? ? {? ? ? ? if(Cy_CapSense_IsSensorActive\(CY_CAPSENSE_LINEARSLIDER0_WDGT_ID,i,&cy_capsense_context))? ? ? ? {? ? ? ? ? ? return?i;? ? ? ? }? ? } ?}

10ms扫描一次

voidloop(void){ /* put your main code here, to run repeatedly: */ rt_sem_take(trans_done_semphr,RT_WAITING_FOREVER); /* Process all widgets */ Cy_CapSense_ProcessAllWidgets(&cy_capsense_context); /* Process touch input */ process_touch(); /* Establishes synchronized operation between the CapSense * middleware and the CapSense Tuner tool. */ Cy_CapSense_RunTuner(&cy_capsense_context); /* Initiate next scan */ Cy_CapSense_ScanAllWidgets(&cy_capsense_context); rt_thread_mdelay(10);}

1.2 音调播放

4b807f3c-9046-11f0-8ce9-92fbcf53809c.jpg

改变pwm设置播放音调,求出周期,设置20%的占空比

intnotes[] = {1,262,294,330,349,392,440,494};structrt_eventbuzzer_event;//int pre_note=0;voidset_notes(inti){ uint32_tperiod_ns =1000000000/ notes[i];// ns uint32_tpulse_ns = period_ns *0.2; // 20% rt_pwm_set(buzzer_pwm, PWM_DEV_CHANNEL, period_ns, pulse_ns); rt_pwm_enable(buzzer_pwm, PWM_DEV_CHANNEL);}

没触摸0.2s后停止播放

voidbuzzer_entry(void*parament){ rt_uint32_t e; while(1) { if(rt_event_recv(&buzzer_event,EVENT_TOUCH,RT_EVENT_FLAG_AND|RT_EVENT_FLAG_CLEAR,0,&e)!=RT_EOK) { rt_pwm_disable(buzzer_pwm,PWM_DEV_CHANNEL); } rt_thread_mdelay(200); }}

1.3 屏幕显示

4b952c52-9046-11f0-8ce9-92fbcf53809c.jpg

触摸响应时间必须≤100ms,并且触发的命令须显示在 OLED 屏幕上(分辨率≥128x64 像素),并清晰标识触摸区域和操作。

使用ssd1306软件包,分别显示了音符,触摸区域id,手势

voidscreen_show_info(intnote,intid,char *gesture){ rt_mutex_take(screen_mutex, RT_WAITING_FOREVER); ssd1306_SetCursor(2,15); ssd1306_WriteString(note_str[note], Font_7x10, White); ssd1306_SetCursor(20,15); ssd1306_WriteChar(id+'0', Font_7x10, White); ssd1306_SetCursor(2,30); ssd1306_WriteString(gesture, Font_7x10, White); ssd1306_UpdateScreen(); rt_mutex_release(screen_mutex);}

显示时间

voidscreen_show_time(char *time){ rt_mutex_take(screen_mutex,RT_WAITING_FOREVER); ssd1306_SetCursor(2,0); ssd1306_WriteString(time,Font_6x8,White); ssd1306_UpdateScreen(); rt_mutex_release(screen_mutex);}

1.4 LED随滑动控制

可以通过触摸面板调整PWM的占空比控制 LED 指示灯的亮度。

使用pwm

rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, 1 * 1000 * 1000, GET_DUTY_CYCLE(brightness)); }

可以更改其它引脚

4baad8ae-9046-11f0-8ce9-92fbcf53809c.png4bb914f0-9046-11f0-8ce9-92fbcf53809c.png4bc68478-9046-11f0-8ce9-92fbcf53809c.png

2 手势识别


使用 CapSense 模块实现 2 种不同手势的识别(向左滑动、向右滑动)。

由于本开发板上的是slider线性滑条,在CapSense组件中,只有触摸板widget支持手势功能。所以通过记录最近3次触摸位置(x),简单判断是否为手势

char *detect_gesture(int num){ staticintval[3] = {0}; val[0] =val[1]; val[1] =val[2]; val[2] = num; rt_kprintf("val: %d %d %d\n",val[0],val[1],val[2]); char *gesture =""; if(ORDER(val[0],val[1],val[2])) { rt_kprintf("left\n"); gesture ="left "; } elseif (ORDER(val[2],val[1],val[0])) { rt_kprintf("right\n"); gesture ="right"; } else { gesture =" "; } returngesture;}

3 网络同步


通过网络模块使用MQTT协议同步NTP时间并显示到OLED上(格式:YYYY-MM-DD HHMMSS)。并将触摸和手势数据(包括:触摸区域 ID、手势类型)传输到服务器端显示。

3.1 rw007

4bd3da4c-9046-11f0-8ce9-92fbcf53809c.png

4be7db46-9046-11f0-8ce9-92fbcf53809c.png

3.2 mqtt

使用pahomqtt软件包, 使用参考样例的mqtt_start函数

设置好topic等宏

#defineMQTT_URI"tcp://broker.emqx.io:1883"#defineMQTT_SUBTOPIC"abc/sub"#defineMQTT_PUBTOPIC"abc/pub"#defineMQTT_WILLMSG"Goodbye!"#defineMQTT_USERNAME"name"#defineMQTT_PASSWORD"password"

4bf97e46-9046-11f0-8ce9-92fbcf53809c.png

可以等待网络连接后再连接mqtt

intcheck_network(void){ structnetdev *netdev =netdev_get_by_family(AF_INET); return(netdev &&netdev_is_link_up(netdev)/* && netdev_is_internet_up(netdev) */);}

用RyanJson软件包生成json数据,mqtt发送到相应的topic

char*message_json(inttouch_area_id,char*gesture_type)
{ RyanJson_t root; root =RyanJsonCreateObject(); RyanJsonAddIntToObject(root,"Touch area ID", touch_area_id); RyanJsonAddStringToObject(root,"Gesture type",gesture_type ); rt_uint32_tlen; tmp_json =RyanJsonPrint(root,650, RyanJsonTrue, &len); intret =paho_mqtt_publish(&client, QOS1, MQTT_PUBTOPIC, tmp_json); rt_kprintf("json:%s\n",tmp_json); RyanJsonDelete(root); returntmp_json;}

3.3 ntp

在netutils软件包中使能ntp

每秒更新时间

staticvoidtime_thread_entry(void *parameter){ structtm *tm; while(1) { //获取当前时间 time_t now =time(NULL); tm =localtime(&now);//使用UTC时间 strftime(time_buf, sizeof(time_buf),"%Y-%m-%d %H:%M:%S", tm); screen_show_time(time_buf); //线程睡眠1秒钟 rt_thread_mdelay(1000); }}

4 RTduino使用


4.1 RT-Thread多任务集成

利用 Psoc6 的 RTduino 支持(RT-Thread 的 Arduino 兼容生态系统)来实现实时触摸和手势处理

4c0509be-9046-11f0-8ce9-92fbcf53809c.png

4.2 使用.c文件中的函数

applications/arduino_main.cpp: :undefinedreference to`'

在arduino_main.cpp中调用其它文件的函数时,提示说未定义,要在对应头文件中添加extern "C"

#ifdef__cplusplusextern"C"{#endif#ifdef__cplusplus}#endif

5 使用方法


5.1 线程使用

buzzer线程,用于停止播放音调

time线程,用于更新屏幕显示时间

rtduino loop,用于触摸识别,与数据处理显示

mqtt线程,用于等待网络连接和启动mqtt客户端

5.2 软件包使用

4c168298-9046-11f0-8ce9-92fbcf53809c.png

6 项目源码


Gitee仓库地址(https://gitee.com/dgjames/psoc6project

RT-Thread Github 开源仓库,欢迎撒个星(Star)支持,更期待你的代码贡献:https://github.com/RT-Thread/rt-thread

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英飞凌
    +关注

    关注

    68

    文章

    2388

    浏览量

    141342
  • 触摸
    +关注

    关注

    8

    文章

    200

    浏览量

    65332
  • RT-Thread
    +关注

    关注

    32

    文章

    1465

    浏览量

    42727
  • psoc6
    +关注

    关注

    1

    文章

    10

    浏览量

    5123
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    PSoC6-CY8CKIT-062S2-43012开发板简介

    简介PSoC6-CY8CKIT-062S2-43012 是英飞凌推出的一款32位双核CPU子系统( ARM Cortex-M4 和 ARM Cortex-M0)的开发板,具有单周期乘法
    发表于 10-14 11:08

    【资料下载】英飞凌PSoC 6 RTT物联网开发板

    Psoc6-evaluationkit-062S2RT-Thread 联合英飞凌推出的一款集成32位双核CPU子系统( ARM Cortex-M4 和 ARM Cortex-M0
    发表于 04-13 13:38

    英飞凌PSoC 6 RTT开发板试用】

    首先感谢发烧友、RT-Thread英飞凌! 一、开箱 Psoc6-evaluationkit-062S2RT-Thread 联合英飞凌
    发表于 05-30 20:47

    英飞凌PSoC 6 RTT开发板试用】以搭积木方式实现简单的互联型家庭网关

    Psoc6-evaluationkit-062S2RT-Thread工程就不介绍了,毕竟有现成的Psoc6-evaluationkit-062S2 BSP。 (一)wifi配置 根据
    发表于 05-31 22:19

    英飞凌PSoC 6 RTT开发板试用】+开箱测试

    英飞凌PSoC 6 RTT开发板试用】+开箱测试 硬件资源介绍 Psoc6-evaluationkit-062S2RT-Thread
    发表于 06-05 01:06

    RT-Thread文档_英飞凌 Psoc6-CY8CKIT-062S2-43012上手指南

    RT-Thread文档_英飞凌 Psoc6-CY8CKIT-062S2-43012 上手指南
    发表于 02-22 18:27 ?3次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>英飞凌</b> <b class='flag-5'>Psoc6-CY8CKIT-062S2</b>-43012上手指南

    英飞凌联合 RT-Thread 发布 PSoC? 62 with CAPSENSE ? evaluation kit开发板

    近日,RT-Thread 社区团队打造了新品开发板:英飞凌联合 RT-Thread 发布 ?PSoC 62 with CAPSENSE evaluation kit开发板?(以下简称
    的头像 发表于 04-13 01:35 ?2569次阅读

    基于RT-Thread的家庭智能家居系统的控制平台设计

    这个系统是在英飞凌Psoc6-evaluationkit-062S2开发板的基础上,充分利用了RT-Thread实时操作系统强大的功能及丰富
    发表于 07-18 16:23 ?1460次阅读
    基于<b class='flag-5'>RT-Thread</b>的家庭<b class='flag-5'>智能</b>家居<b class='flag-5'>系统</b>的控制平台设计

    基于PSOC6开发板构建的智能小车

    本项目是基于Psoc6-evaluationkit-062S2开发板构建的智能小车。该开发板由RT-Thread英飞凌联合推出,集成了一颗32位双核CPU子
    发表于 07-28 15:14 ?1289次阅读
    基于<b class='flag-5'>PSOC6</b>开发板构建的<b class='flag-5'>智能</b>小车

    如何设计一种基于PSOC6的人体交互式智能家居系统呢?

    Psoc6-evaluationkit-062S2RT-Thread 联合英飞凌推出的一款集成 32 位双核 CPU 子系统( ARM Cortex-M4 和 ARM Corte
    的头像 发表于 07-28 16:02 ?1551次阅读
    如何设计一种基于<b class='flag-5'>PSOC6</b>的人体交互式<b class='flag-5'>智能</b>家居<b class='flag-5'>系统</b>呢?

    英飞凌Psoc6-evaluationkit-062S2测评1_LED

    Psoc6-evaluationkit-062S2开发板使用DAP_LINK方式下载,开发板有两个芯片,其中一块芯片用作DAP_LINK下载,在安装好插件的前提下,可以直接通过DAP_TYPEC下载
    发表于 08-08 17:18 ?950次阅读
    <b class='flag-5'>英飞凌</b><b class='flag-5'>Psoc6-evaluationkit-062S2</b>测评1_LED

    PSoC?62 for RT-ThreadRT-Thread携手英飞凌举办嵌入式网络应用开发沙龙,圆满落幕!

    题的线下沙龙!此次沙龙聚焦使用英飞凌科技PSoC62在RT-Thread Studio平台上进行开发,并结合智能数据网关动手培训为开发者们提供了深入了解
    的头像 发表于 12-14 16:25 ?1166次阅读
    【<b class='flag-5'>PSoC</b>?62 for <b class='flag-5'>RT-Thread</b>】<b class='flag-5'>RT-Thread</b>携手<b class='flag-5'>英飞凌</b>举办嵌入式网络应用开发沙龙,圆满落幕!

    RT-Thread开发者大会系统控制分论坛动手实践指南

    网关动手实践,本次实践将使用——PSoC6-evaluationkit-062S2 。本开发板是 RT-T
    的头像 发表于 12-22 18:15 ?1011次阅读
    <b class='flag-5'>RT-Thread</b>开发者大会<b class='flag-5'>系统</b>控制分论坛动手实践指南

    英飞凌测评】英飞凌PSoC? 62开发板试用报告-LCD ILI9341 8080 DEMO

    介绍 `Psoc6-evaluationkit-062S2` 是 RT-Thread 联合英飞凌推出的一款集成32位双核CPU子系统( ARM Cortex-M4 和 ARM Cort
    的头像 发表于 03-07 21:07 ?1541次阅读
    【<b class='flag-5'>英飞凌</b>测评】<b class='flag-5'>英飞凌</b><b class='flag-5'>PSoC</b>? 62开发板试用报告-LCD ILI9341 8080 DEMO

    基于PSOC6智能环境监控系统

    本项目是基于PSOC6进行开发,它具有以下特性Psoc6-evaluationkit-062S2RT-Thread联合英飞凌推出的一款集成32位双核CPU子
    的头像 发表于 01-07 19:54 ?1036次阅读
    基于<b class='flag-5'>PSOC6</b>的<b class='flag-5'>智能</b>环境监控<b class='flag-5'>系统</b>