两侧同时换到之前的修订记录前一修订版 | |
learing:examples:fade [2017/10/05 03:24] – 弘毅 | learing:examples:fade [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1 |
---|
| ====== Fading(明暗) ====== |
| |
| <WRAP left round info 65%> |
| 使用analogWrite()功能让LED渐变亮或者渐变灭。analogWrite使用了PWM(脉冲宽度调制)功能,快速打开或者关闭数字引脚来制造渐变的效果。 |
| </WRAP> |
| |
| <WRAP left round box 100%> |
| ===== ALPHA MEGA328-U核心 ===== |
| ==== 硬件 ==== |
| * [[ocrobot:alpha:parallelexpansion:index|ALPHA 并行扩展板]] |
| * [[ocrobot:alpha:mega328-u:main|ALPHA MEGA328-U]] |
| * [[ocrobot:alpha:11led:index|ALPHA 11 LED模块]] |
| ==== 搭建电路 ==== |
| |
| - ALPHA 11 LED模块插入并行扩展版1号槽位。 |
| - ALPHA MEGA328-U模块插入并行扩展板2号槽位。 |
| - USB线连接计算机与ALPHA MEGA328-U。 |
| |
| ==== 代码 ==== |
| <code cpp> |
| /* |
| Fade |
| 使用analogWrite()功能让LED渐变亮或者渐变灭 |
| */ |
| |
| int led = 9; // LED 连到9号脚 |
| int brightness = 0; // LED 亮度 |
| int fadeAmount = 5; // 渐变量 |
| |
| void setup() { |
| //9为数字输出 |
| pinMode(led, OUTPUT); |
| } |
| |
| |
| void loop() { |
| // 亮度 |
| analogWrite(led, brightness); |
| |
| // 下一次改变亮度 |
| brightness = brightness + fadeAmount; |
| |
| // 渐变快要结束的时候反过来 |
| if (brightness == 0 || brightness == 255) { |
| fadeAmount = -fadeAmount ; |
| } |
| // 等待30毫秒看看效果 |
| delay(30); |
| } |
| |
| </code> |
| |
| <WRAP left round tip 100%> |
| 这个例子中我们使用了一个新函数:[[reference:language:analogwrite|analogWrite()]]。这个函数用于从特定的管脚输出PWM信号。 |
| |
| [[knowledge:electronic:pwm|PWM]]是使用数字手段来控制模拟输出的一种手段。使用数字控制产生占空比不同的方波(一个不停在开与关之间切换的信号)来控制模拟输出。控制LED亮度渐变我们常常会用到这个函数。 |
| </WRAP> |
| |
| |
| |
| |
| |
| <WRAP left round box 100%> |
| ===== MangoII ===== |
| |
| ==== 硬件要求 ==== |
| |
| * OCROBOT控制器 |
| * 面包板 |
| * LED |
| * 220欧姆电阻 |
| * 导线 |
| |
| 把LED的阳极(长脚的那端)接一个220欧的电阻到控制器的数字输出引脚9,连接负极到控制器的GND。 |
| |
| ==== 代码 ==== |
| |
| 只需要在setup中设置9号引脚为LED即可 |
| 你在loop中使用的analogWrite()功能需要两点: |
| \\ 1.说明输出到哪个引脚。 |
| \\ 2.说明PWM值。 |
| |
| 为了产生渐变的效果,从0到255逐渐增加PWM值,然后减小到零来完成一个循环。下面的程序中,将PWM值设置为叫做brightness的变量。loop中每一次循环,通过变量fadeAmount增减PWM值。 |
| 如果brightness不在最大值也不在最小值,fadeAmount就不会变化。换句话说,如果fadeAmount是5就把它设置成-5,如果是-5就设置为5。 |
| 下次循环的时候,反过来。 |
| |
| analogWrite()可以很快的改变pwm值,所以要delay来控制渐变的速度,试着改变delay的值,看看会发生什么。 |
| |
| <code cpp> |
| /* |
| Fade |
| 使用analogWrite()功能让LED渐变亮或者渐变灭 |
| */ |
| |
| int led = 9; // LED 连到9号脚 |
| int brightness = 0; // LED 亮度 |
| int fadeAmount = 5; // 渐变量 |
| |
| void setup() { |
| //9为数字输出 |
| pinMode(led, OUTPUT); |
| } |
| |
| |
| void loop() { |
| // 亮度 |
| analogWrite(led, brightness); |
| |
| // 下一次改变亮度 |
| brightness = brightness + fadeAmount; |
| |
| // 渐变快要结束的时候反过来 |
| if (brightness == 0 || brightness == 255) { |
| fadeAmount = -fadeAmount ; |
| } |
| // 等待30毫秒看看效果 |
| delay(30); |
| } |
| |
| </code> |
| </WRAP> |
| |