Loading...

Learning   Examples | Foundations | Hacking | Links

示例 > 模拟 I/O

渐变

通过让 LED 渐变亮度,演示 analogWrite() 函数的使用。 AnalogWrite 使用 脉冲宽度调制 (PWM),让一个数字引脚迅速开关来实现渐变效果。

硬件需求

  • Arduino 开发板
  • 面包板
  • 一只 LED
  • 一只 220 欧姆电阻

电路

将 LED 的 阳极 (长管脚),通过一只 220 欧姆电阻与 Arduino 的数字输出 9 连接。将 LED 的 阴极 (短管脚) 接地。

点击图片放大

原理图

点击图片放大

图片绘制采用 Fritzing. 更多的电路示例,请参考 Fritzing 项目页面

代码

setup() 把管脚 9 定义为 LED 输出管脚。

在主循环中使用到的 analogWrite() 函数需要两个参数:一个表示你要往哪个管脚输出,另一个表示输出的 PWM 值。

为了让 LED 渐变亮度,我们逐渐增加 PWM 值,从 0(完全关闭)一直到 255(完全点亮),然后再逐渐变为 0,完成一个循环。在下面的程序中,PWM 值由一个叫做 brightness 的变量确定。每次循环执行的时候,它的值的变化由变量 fadeAmount 决定。

如果 brightness 达到极值(0 或 255),那么 fadeAmount 就应该变为它的相反数。换句话说,如果 fadeAmount 是 5,那么它应该被设为 -5。 如果它是 -5,那么应该被设为 5。在下一次循环执行的时候,这个改变会导致 brightness 向另一个方向变化。

由于 analogWrite() 能以非常快的速度改变 PWM 值,所以我们在程序的末尾用一个延时来控制渐变的速度。试试改变延时的大小,看看它对程序有什么影响。

/*
 渐变
 
 这个示例演示了怎样使用 analogWrite() 函数
 来控制管脚 9 上的 LED 灯渐变亮度
 
 此示例代码完全公开
 
 */

int brightness = 0;    // LED 的亮度
int fadeAmount = 5;    // 每次改变的 LED 亮度

void setup()  {
  // 将管脚 9 用作输出
  pinMode(9, OUTPUT);
}

void loop()  {
  // 通过管脚 9,设置 LED 的亮度
  analogWrite(9, brightness);    

  // 为下一次循环执行设置新的亮度
  brightness = brightness + fadeAmount;

  // 在渐变结束的时候,改变渐变的方向
  if (brightness == 0 || brightness == 255) {
    fadeAmount = -fadeAmount ;
  }    
  // 等待 30 毫秒
  delay(30);                            
}

请参阅