# LED亮度渐隐
> 本例向你展示如何使用**analogWrite()**函数来让LED亮度渐变。AnalogWrite 通过**PWM技术**(脉宽调制技术)工作,采用PWM技术能够快速的开关一个数字引脚,通电的时间和断电的时间按照一定的比例分配,这样一来就产生了亮度渐变效果。
> 【译者注:想不明白应该去了解下生物学**视觉暂留**的知识。】
### 所需硬件
* Arduino或Genuino板
* LED灯
* 220Ω电阻
* 连接线
* 面包板
### 电路
将LED阳极(较长脚)通过220Ω电阻连接到板上的9号引脚。
连接LED阴极(较短脚)到GND。
![这里写图片描述](http://img.blog.csdn.net/20160418131130640)
### 原理图
![这里写图片描述](http://img.blog.csdn.net/20160418131059575)
### 代码
setup()函数只需声明9号引脚为输出引脚,其他什么都不做。
调用analogWrite()函数(在loop函数内)需要两个参数:第一个为要操作的引脚,第二个时要写出的PWM **脉冲宽度** 值。
为了让LED的熄灭和点亮有渐变效果,你需要逐渐将PWM值从0(全部时间不通电)逐渐增加到255(全部时间通电)。然后,再从255调到0,以完成一轮亮度渐变。在下方的工程中,PWM值用一个名为**brightness**的变量存储。loop函数每执行一次,就将brightness变量的值与**fadeAmount**变量的值相加,并将和再赋给brightness变量。
当brightness变量的值是0或255时,如果发现fadeAmount值为-5,它就应被设为5;若为5则设为-5。如此一来,下次进入循环时亮度就会跟着由弱转亮或由亮转弱。analogWrite()函数能极其快速的改变PWM值,因此在loop函数最后的delay控制了渐变速度。试试看改变delay的时间,看看它如何影响渐变效果。
~~~
/*
LED亮度渐隐
本例向你展示如何用analogWrite()函数让9号引脚连接的LED亮度渐弱。
analogWrite()函数使用PWM技术,因此如果你想要使用其他引脚接LED,一定保证选择的引脚也支持PWM输出。大多数Arduino板支持PWM的引脚以“~”符号标明.比如: ~3, ~5, ~6, ~9, ~10和~11。
这个例子是公开的。
*/
int led = 9; // LED连接的PWM引脚
int brightness = 0; // LED亮度
int fadeAmount = 5; // 亮度每次的变化值
// setup函数在通电或复位后仅运行一次。
void setup() {
// 声明9号引脚为输出模式:
pinMode(led, OUTPUT);
}
// loop函数永远循环运行:
void loop() {
// 设置9号引脚LED的亮度值:
analogWrite(led, brightness);
// 改变下次的亮度值:
brightness = brightness + fadeAmount;
// 一次渐变结束后改变亮度变化的方向:
if (brightness == 0 || brightness == 255) {
fadeAmount = -fadeAmount ;
}
// 等待30毫秒以让人眼看出渐变效果
delay(30);
}
~~~
## 相关资料
[setup()](http://www.arduino.cc/en/Reference/Setup)
[loop()](http://www.arduino.cc/en/Reference/Loop)
[analogWrite()](http://www.arduino.cc/en/Reference/AnalogWrite)
[int](http://www.arduino.cc/en/Reference/Int)
[for](http://www.arduino.cc/en/Reference/For)
[PWM](http://www.arduino.cc/en/Tutorial/PWM)
[读取模拟信号、串口操作
Arduino工程的最小单元
点亮LED
读取模拟电压值]( )
- 说明
- 系统示例文件目录结构及说明
- 01.Basics
- AnalogReadSerial
- BareMinimum
- Blink
- DigitalReadSerial
- Fade
- ReadAnalogVoltage
- 02.Digital
- BlinkWithoutDelay
- Button
- Debounce
- DigitalInputPullup
- StateChangeDetection
- toneKeyboard
- toneMelody
- toneMultiple
- tonePitchFollower
- 03.Analog
- AnalogInOutSerial
- AnalogInput
- AnalogWriteMega
- Calibration
- Fading
- Smoothing
- 04.Communication
- ASCIITable
- Dimmer
- Graph
- Midi
- MultiSerial
- PhysicalPixel
- ReadASCIIString
- SerialCallResponse
- SerialCallResponseASCII
- SerialEvent
- SerialPassthrough
- VirtualColorMixer
- 05.Control
- Arrays
- ForLoopIteration
- IfStatementConditional
- switchCase
- switchCase2
- WhileStatementConditional
- 06.Sensors
- ADXL3xx
- Knock
- Memsic2125
- Ping
- 07.Display
- barGraph
- RowColumnScanning
- 08.Strings
- CharacterAnalysis
- StringAdditionOperator
- StringAppendOperator
- StringCaseChanges
- StringCharacters
- StringComparisonOperators
- StringConstructors
- StringIndexOf
- StringLength
- StringLengthTrim
- StringReplace
- StringStartsWithEndsWith
- StringSubstring
- StringToInt
- 09.USB
- Keyboard
- KeyboardLogout
- KeyboardMessage
- KeyboardReprogram
- KeyboardSerial
- KeyboardAndMouseControl
- Mouse
- ButtonMouseControl
- JoystickMouseControl
- 10.StarterKit_BasicKit (与特定硬件相关,暂无)
- p02_SpaceshipInterface
- p03_LoveOMeter
- p04_ColorMixingLamp
- p05_ServoMoodIndicator
- p06_LightTheremin
- p07_Keyboard
- p08_DigitalHourglass
- p09_MotorizedPinwheel
- p10_Zoetrope
- p11_CrystalBall
- p12_KnockLock
- p13_TouchSensorLamp
- p14_TweakTheArduinoLogo
- p15_HackingButtons
- 11.ArduinoISP(暂无)
- ArduinoISP