04-PWM调制实现呼吸灯效果

Author:teacherXue

一、PWM调控原理

有很多的设备,对于电压变化并不敏感,不能使用模拟量老控制,这时不太适用电压控制其功率输出。比较典型的就是我们熟悉的LED。但是,我们可以使用脉宽调制 (PWM) 输出“假”中级电压的方式,来控制LED的亮度。用极其简单的方式来解释就是非常快速的切换开关(高低电平)状态,通过开的时间占比来达到功率控制。人的眼睛将无法跟上 LED 开关的速度,看到的是不同亮度的灯珠。

二、模拟写入()

analogWrite(pin, value);

analogWrite将会向指定支持PWM调制的数字端口写入模拟量,取值应该在 0 到PWM范围,默认情况下为 255。当值为 0 时,该引脚上的 PWM 被禁用。值255 对应于 100% 占空比。

可以通过调用以下命令更改 PWM范围:

analogWriteRange(new_range);

默认情况下,ESP8266PWM 频率为 1kHz。您可以通过以下方式更改 PWM 频率,频率越高则闪烁感越低,所谓的护眼灯就是频率很高的调制。有效值为 100Hz 至 40000Hz。

analogWriteFreq(new_frequency);

三、NodeMCU 使用PWM调光LED实验

本实验,我们将构建一个使 LED随时间顺滑的改变明暗的呼吸灯简单示例,以便了解如何在项目中使用 PWM。接线请参考第三章内容。

  1. 创建灯控项目

1)在 VS Code 上,单击 PlartfomIO主页图标。点击+ New Project创建Lamp_ctl_v2.0项目并确定。
2)修改platformio.ini配置文件增加串口通讯波特率monitor_speed = 115200
3)编辑main.cpp主文件,其中LED引脚定义为14,查阅引脚对应表,D5引脚对应的是GPIO14

在loop方法中通过两个循环,通过PWM调制让LED的亮度分别逐步增加和逐步熄灭,以实现呼吸效果。检查无误后烧录代码。

#include <Arduino.h>

#define LED 14 // D5引脚对应的是GPIO14

void setup()
{
  // put your setup code here, to run once:
  Serial.begin(115200); // 设置串口通信波特率
  pinMode(LED, OUTPUT);
}

void loop()
{
  // put your main code here, to run repeatedly:
  for (int dutyCycle = 0; dutyCycle < 255; dutyCycle++)
  {
    // 用PWM增加LED亮度
    analogWrite(LED, dutyCycle);
    delay(1); // 阻塞程序运行1毫秒,让其变化不至于太快,增大可以让变化趋缓,但过大会产生卡顿和闪烁。
  }

  for (int dutyCycle = 255; dutyCycle > 0; dutyCycle--)
  {
    // 用PWM降低LED亮度
    analogWrite(LED, dutyCycle);
    delay(5); // 阻塞程序运行1毫秒,让其变化不至于太快,增大可以让变化趋缓,但过大会产生卡顿和闪烁。
  }
  delay(200); //灭灯后暂停200毫秒
}
5)一秒间隔闪烁的白色LED,通过实验我们发现,搞清楚引脚后修改代码执行并不困难。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盐池虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值