【Funpack4-2】 -使用SAME51实现呼吸灯速率切换控制
该项目使用了SAME51,实现了呼吸灯速率切换控制的设计,它的主要功能为:使用SAME51实现呼吸灯速率切换控制。
标签
嵌入式系统
呼吸灯
SAME51J20A
冲向天空的猪
更新2025-07-02
12

任务要求

使用MPLAB开发,尝试让部分管脚实现触摸功能,可搭配触摸扩展面板,并通过按键和滑动实现呼吸灯速率切换,可自行设计触摸板

任务思路

本次使用的板卡是SAME51J20A Curiosity Nano ,实现呼吸灯的功能使用定时器实现呼吸灯模拟,通过触摸按键上的排针模拟触摸板的左滑和右滑实现对板卡的呼吸灯进行滑动。

逻辑框图

实现准备

软件准备:使用MPLAB X IDE

创建MCC管脚准备

添加TC0和touch,配置我们的定时器的数值。

touch的库需要我们的CM中下载,才能找到并且使用。

触摸引脚选择

这里选择相近的引脚,方便实现我们的引脚的选择。

准备工作基本完成,接下来进行代码实现。

软件代码

可视化的框图可以一键帮我添加配置,轻松实现复杂框架的搭建。

这里是实现左滑和右滑的逻辑判断,来实现调节我们占空比的数值

void process_touch_input()
{
  static const uint8_t RIGHT_SLIDE_FLAG = 0x08;
  static const uint8_t LEFT_SLIDE_FLAG = 0x08;
   
  if (KEY_TOUCHED_MASK == (get_scroller_state(0) & KEY_TOUCHED_MASK))
  {
      if (qtm_scroller_data1[0].right_hyst & RIGHT_SLIDE_FLAG)
      {
          speedLevel = (speedLevel < 4) ? speedLevel + 1 : 4;
      }
      else if (qtm_scroller_data1[0].left_hyst & LEFT_SLIDE_FLAG)
      {
          speedLevel = (speedLevel > 0) ? speedLevel - 1 : 0;
      }
  }
}

在主函数中我们先需要开启定时器和定时器中断,实现我们的数据的读取,之后在线程中进行滑动的逻辑帕努但

int main(void) 
{
  SYS_Initialize(NULL);
  TC0_TimerCallbackRegister(pwm_timer_callback, 0);
  TC0_TimerStart();
   
  while (true)
  {
      SYS_Tasks();
      touch_process();

      if (measurement_done_touch)
      {
          measurement_done_touch = false;
          process_touch_input();
      }
  }

  return EXIT_FAILURE;
}

实现呼吸灯的关键就是通过定时器模拟PWM的效果的中断回调函数

void pwm_timer_callback(TC_TIMER_STATUS status, uintptr_t context)
{
  const uint16_t PWM_PERIOD = 200;
  const uint16_t MIN_DUTY = 20;
   
  // 每200次计数完成一个PWM周期
  if (++timerCounter >= PWM_PERIOD) {
      timerCounter = 0;
  }

  // PWM占空比更新控制
  static uint16_t updateCounter;
  if (updateCounter++ >= pwmUpdateIntervals[speedLevel])
  {
      updateCounter = 0;
       
      // 自动调整占空比方向
      if (pwmDuty >= PWM_PERIOD) dutyStep = -1;
      else if (pwmDuty <= MIN_DUTY) dutyStep = 1;
       
      pwmDuty += dutyStep;
  }

  // 输出PWM信号
  (timerCounter > pwmDuty) ? LED_Clear() : LED_Set();
}

实现效果

实现效果的呼吸灯亮度在实时变化,这里简单的图片无法完全展示,如果有需要可以查看一下b站使用的效果演示。

总结归纳

一开始尝试的自己画板,想实现触摸板来实现呼吸灯的效果,由于使用杜邦线,其中引脚的干扰容易误触发,后续就改成直接在板子上的引脚实现功能,其中的管脚轻松实现触摸的功能。二是软件的下载加载太久了,一旦有什么需要下载的库至少下载半小时体验很不好。也最后感谢硬禾学堂,能让我体验到不同的板卡开发的过程。

附件下载
touch.zip
团队介绍
个人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号