Funpack5-2 - 基于EV41C56A实现触摸控制LED
该项目使用了EV41C56A,实现了触摸控制LED控制的设计,它的主要功能为:通过板载触摸传感器识别用户操作,支持两种触摸手势:单击和长按,分别实现 LED 状态翻转和亮度调节功能。
标签
触摸
GPIO
touch
Funpack5-2
EV41C56A
PIC32CM
Blink
SERCOM
TC
鲜de芒果
更新2026-06-22
26

一、项目介绍

1.1 项目功能简介

本项目基于 Microchip EV41C56A 开发板,实现触摸按键控制板载 LED 的人机交互系统。通过板载触摸传感器识别用户操作,支持两种触摸手势:单击长按,分别实现 LED 状态翻转和亮度调节功能。


1.2 硬件介绍

硬件组件

描述

开发板

Microchip EV41C56A (ATSAML11E16A)

触摸传感器

板载电容式触摸按键 (QTouch)

LED

板载 LED 指示灯

定时器

TC0 定时器用于 PWM 亮度控制

系统时钟

SYSTICK 定时器提供 1ms 时间基准

1.3 功能概览

功能

触发方式

实现效果

LED 亮灭翻转

单击触摸按键

切换 LED 开/关状态

LED 亮度调节

长按触摸按键

循环调节亮度(由亮转暗再由暗转亮)

1.4 设计思路

采用有限状态机 (FSM) 设计触摸检测逻辑,核心思路如下:

  1. 去抖动处理:通过连续检测确认有效触摸,避免误触发
  2. 时间阈值判断:区分单击(< 长按阈值)和长按(≥ 长按阈值)
  3. PWM 亮度控制:利用定时器比较匹配功能实现 LED 亮度调节
  4. 状态管理:使用全局变量记录 LED 状态和亮度等级

二、功能实现

2.1 软件流程图

2.2 实现过程

2.2.1 状态机设计

typedef enum {
TOUCH_STATE_IDLE, // 空闲状态
TOUCH_STATE_DEBOUNCE, // 去抖动状态
TOUCH_STATE_PRESSED // 已按下状态
} TouchState;


2.2.2 MCC关键配置

  1. 首先是全部模块配置,本次项目需要用到 TC、Touch 和 SERCOM 三个关键组件。
  2. SERCOM 配置,用于调试日志的串口打印。
  3. TC 配置,用于控制LED灯亮度与开关。
  4. Touch 触摸按键的配置
  5. 最终的Pin Configuration


2.2.3 核心参数配置

参数

定义

说明

LONG_PRESS_THRESHOLD

长按阈值

180

约 180ms(1ms × 180)

DEBOUNCE_COUNT

去抖动计数

3

连续3次检测确认有效

turnStep

亮度步进值

30

每次长按调节的亮度增量

maxPeriodValue

PWM 周期最大值

TC0 周期寄存器值

决定最大亮度

2.2.4 关键函数实现

触摸状态检测函数 (check_touch_status):

  • 空闲状态:检测到触摸时记录时间戳,进入去抖动状态
  • 去抖动状态:连续检测到触摸达到阈值后进入按下状态
  • 按下状态:持续触摸超过阈值则开始调节亮度,释放时判断单击/长按

LED 翻转函数 (led_toggle):

  • 根据当前状态切换 LED 开/关
  • 开启时恢复上次亮度值

亮度调节逻辑

  • 长按期间周期性更新 periodValue 实现亮度渐变
  • 达到边界时反转调节方向(亮→暗→亮循环)

三、功能展示

3.1 操作演示

操作

预期效果

串口输出

单击触摸按键

LED 状态翻转(亮→灭 或 灭→亮)

Single click detected!

长按触摸按键

LED 亮度渐变调节(循环)

Long press!(持续输出)

长按结束

保持当前亮度

Long press detected!

3.2 典型场景

场景1:LED 点亮

用户单击 → LED 点亮 → 串口输出: "Single click detected!"


场景2:LED 熄灭

用户再次单击 → LED 熄灭 → 串口输出: "Single click detected!"


场景3:亮度调节

用户长按 → LED 亮度逐渐变化 → 串口持续输出: "Long press!"
用户释放 → 保持当前亮度 → 串口输出: "Long press detected!"


3.3 串口日志示例

System initialized! period: 0
Single click detected! // 单击点亮LED
Long press! // 长按开始调节
Long press!
Long press!
Long press detected! // 长按结束
Single click detected! // 单击熄灭LED

四、总结

4.1 项目完成情况

本项目成功实现了基于 EV41C56A 开发板的触摸控制 LED 功能:

  1.  触摸检测:实现稳定的电容式触摸按键检测,包含去抖动处理
  2.  手势识别:正确区分单击和长按两种手势
  3.  LED 控制:单击翻转状态,长按调节亮度
  4.  亮度循环:长按调节时亮度由亮转暗再由暗转亮循环


4.2 遇到的问题

  1. 触摸无效,根据官方例程的配置步骤配置好触摸功能之后,烧录到开发板后点击触摸按键没有响应。经群友提醒发现需要在 Pin Configuration 中配置触摸引脚,另外还需要将 SYS_Initialize 函数中 RTC_Initialize(); 的调用放转在 touch_init(); 函数之前。


4.3 技术要点

  • 状态机设计:使用有限状态机管理触摸事件,逻辑清晰
  • 时间基准:基于 SYSTICK 实现 1ms 精确定时
  • PWM 控制:利用 TC0 定时器实现平滑的亮度调节
  • 防抖处理:通过多次采样确认有效触摸,提高可靠性


4.4 扩展建议

  1. 多按键支持:扩展支持多个触摸按键,实现不同功能
  2. 触摸滑动:实现滑动手势,支持更多交互方式
  3. 状态指示:增加不同颜色 LED 或蜂鸣器反馈
  4. 参数配置:通过串口或按键动态调整阈值和步进参数

五、参考资料

附件下载
Funpack5_2_secure.zip
MPLAB X 工程源码
团队介绍
业余电子爱好者
团队成员
鲜de芒果
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号