本实验通过 PWM 来控制一盏 LED 灯,让它慢慢变亮再慢慢变暗,如此循环。下面是接线图

/*
@Using PWM to control the PIN 9 on Arduino board.
*/

int brightness = 0; //@定义整型变量 brightness 与其初始值,此变量用来表示 LED 的亮度。

int fadeAmount = 5; //@定义整数型变量 fadeAmount,此变量用来做亮度变化的增减量。

void setup()
{
    pinMode(9, OUTPUT); //@设置9号IO口为输出端口
}

void loop()
{
    analogWrite(9, brightness); //@把 brightness 的值写入9号IO口
    brightness = brightness + fadeAmount; //@改变 brightness 的值,使亮度再下一次循环发生改变

    if (brightness == 0 || brightness == 255)
    {
        fadeAmount = -fadeAmount; //@在亮度达到最高时进行翻转
    }

    delay(30); //@延时30毫秒
}

/*
@end
*/

本次实验总结:

analogWrite(); 其作用是给端口写入一个模拟值 (PWM 波),可以用来控制 LED 灯的亮度变化,或者以不同的速度驱动马达。当执行 analogWrite()命令后,端口会输出一个稳定的占空比方波,除非有下一个命令来改变它。 PWM 信号的频率大约为 490Hz。

使用 ATMega168 与 ATMega328 的 Arduino 控制板时,其工作在 3、5、6、9、10、11 端口,Arduino Mega 控制板,可以工作于 2-23 端口。在更古老的基于 ATMega8 的 Arduino 控制板上,analogWrite() 命令只能工作于 9、10、11 号端口。在使用 analogWrite() 命令前,可以不使用 pinMode() 命令把端口定义为输出端口,当然如果定义了更好,这样利于程序语言规范。

语法:

analogWrite(pin, value)

参数:

pin: 写入的端口号

value:占空比,在0-255之间

 

扩展知识:

PWM (Pulse-width Modulation) 脉宽调制

PWM 是使用数字手段来控制模拟输出的一种手段,使用数字控制产生占空比不同的方波(一个不停在开与关之间切换的信号)来控制模拟输出。通俗点说,以本次实验来看,端口的输入电压只有两个,0V 与 5V,如果我想要 3V 的输出电压怎么办,可以串联电阻,但是如果我想在 1V、3V、3.5V 等等之间来回变动怎么办呢? 不可能不停地切换电阻吧,这种情况下,就需要使用 PWM 了。它是怎么控制的呢?

对于 Arduino 的数字端口电压输出只有 LOW 和 HIGH 两个开关,对应的就是 0V 与 5V 的电压输出,咱们把 LOW 定义为0, HIGH 定义为1,一秒内让 Arduino 输出 500 个0或者1 的信号,如果这 500 个全部为1,那就是完整的5V,如果全部为 0,那就是 0V。如果 010101010101 这样输出,刚好一半一半,输出端口就感觉是 2.5V 的电压输出了。