打印
[活动专区]

【AT-START-F405测评】 2、GPIO正弦呼吸灯

[复制链接]
3789|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#有奖活动#

目的:①实现呼吸灯效果;②呼吸灯呈现出正弦效果;③LED3和LED4亮度互补
1、程序设计思路
该程序的目的是通过使用GPIO控制,实现两个LED灯(LED3和LED4)的呼吸灯效果,其中两个LED的亮度是互补变化的。程序使用正弦函数来计算亮度值,以达到平滑的亮度变化效果。以下是程序的整体设计思路:
1.包含必要的头文件:
   - 引入控制LED和系统时钟配置的头文件。
   - 引入数学库头文件用于计算正弦函数。
2. 定义常量:
   - 定义PI的值用于角度到弧度的转换。
   - 定义最大亮度值(255),表示LED全亮的情况。
3. 初始化系统:
   - 调用函数`system_clock_config()`配置系统时钟。
   - 调用函数`at32_board_init()`初始化开发板,设置GPIO引脚。
4. 主循环设计:
   - 使用`while(1)`进入无限循环,使程序能够持续运行,实现连续的呼吸灯效果。
5. 正弦波亮度控制:
   - 通过一个外部`for`循环从0到360度,遍历一个完整的正弦周期。
   - 在每个角度下计算对应的正弦波亮度值,并将其转换到0到255范围内。
   - 通过正弦函数计算LED3的亮度,同时计算LED4的互补亮度。
6. 模拟LED亮度:
   - 通过内部`for`循环和延迟函数`delay_us`来模拟LED的亮度变化。
   - 控制每个LED的亮度,通过快速开关LED实现不同的亮度效果。
7. 平滑过渡:
   - 使用`delay_ms`函数在每个角度计算后延迟一段时间,使亮度变化更加平滑,避免视觉上的突变。


2、程序
#include "at32f402_405_board.h"  // 包含AT32F402/405开发板的头文件,提供LED控制和初始化等功能
#include "at32f402_405_clock.h"  // 包含AT32F402/405的时钟配置头文件
#include <math.h>  // 包含数学库头文件,用于计算正弦函数

#define PI 3.14159265
#define MAX_BRIGHTNESS 255

int main(void)
{
  int i;
  int j;  // 将变量j的声明移到for循环外
  double brightness;
  int led3_brightness, led4_brightness;
  int delay_time = 10;  // 调整此值以控制呼吸灯的速度

  system_clock_config();
  at32_board_init();

  while(1)  // 无限循环
  {
    // 从0到360度变化,相当于一个完整的正弦周期
    for(i = 0; i < 360; i++)
    {
      // 计算正弦波对应的亮度值,范围从0到MAX_BRIGHTNESS
      brightness = (sin(i * PI / 180) + 1) / 2 * MAX_BRIGHTNESS;
      
      led3_brightness = (int)brightness;  // 将计算的亮度值赋给LED3亮度
      led4_brightness = MAX_BRIGHTNESS - led3_brightness;  // LED4亮度与LED3互补

      // 模拟LED3的亮度
      for(j = 0; j < led3_brightness; j++)
      {
        at32_led_on(LED3);  // 打开LED3
        delay_us(10);  // 延迟10微秒,控制亮度
        at32_led_off(LED3);  // 关闭LED3
      }
      
      // 模拟LED4的亮度
      for(j = 0; j < led4_brightness; j++)
      {
        at32_led_on(LED4);  // 打开LED4
        delay_us(10);  // 延迟10微秒,控制亮度
        at32_led_off(LED4);  // 关闭LED4
      }

      delay_ms(delay_time);  // 延迟一段时间,平滑过渡
    }
  }
}



3、效果

使用特权

评论回复
沙发
呐咯密密| | 2024-6-11 16:41 | 只看该作者
这个不搞个动态图或者视频吗,这拍照看不出来啊

使用特权

评论回复
板凳
gangong| | 2024-10-28 20:07 | 只看该作者
牛了不错

使用特权

评论回复
地板
micoccd| | 2024-11-16 18:42 | 只看该作者
我一般都是PWM的方波控制,这个正弦波更平滑

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

121

主题

713

帖子

3

粉丝