在你的很多项目中,褪色LED都是很有可能用到的。这是一个非常好的和优雅的效果,使您的项目中的指示器更令人愉快。

本项目零件清单

数量 部分/链接
1 x Arduino Uno
1 x USB B型线
1 x 无焊料的电路试验板
1 x 跳线设备
1 x 领导的工具包
1 x 电阻套件(220欧姆)

其中一些链接是附属机构。如果你使用他们,它花费你什么都没有,但我们得到一个小的佣金,这有助于我们继续为你制作内容!

买一个极客酒吧!

LED基础专业提示:如果你还没有读过LED系列的第一个教程眨眼,你应该先去做那个教程。它解释了一些需要知道的led的基本原理。led的工作原理与传统灯泡不同,它的工作原理也很独特。这意味着使用电阻器!

Arduino上的LED淡出

Arduino的GPIO头上的一些引脚可以用来生成一个脉宽调制信号。PWM代表脉冲宽度调制.如果你还没有,你应该查看我们的PWM教程,但基本上PWM脉冲电压在一个针上的特定百分比的时间。这种效果会降低或增加LED的亮度。

并不是Arduino上的所有引脚都支持PWM(至少在硬件上)。Arduino Uno上的PWM引脚分别为3、5、6、9、10、11。在我们的教程中,我们只使用pin 9。但其他任何一种都可以。

淡化LED - Arduino接线图

这个项目的布线非常简单。它只需要两根电线,一个电阻器和一个LED。请注意,为了防止电阻器损坏,需要一个电阻器。

Arduino的接线方式如下:

  • Arduino接地对试验板接地
  • Arduino销9到220欧姆电阻器
  • LED阴极(-)到面包板接地
  • LED阳极(+)至220欧姆电阻器

用于淡化LED草图和代码选项的Arduino代码

Arduino上有几个不同的LED褪色选项。第一种方法是改变PWM信号,并插入一个delay()以使其足够慢,使人眼能够看到它。第二种选择是一个更好的解决方案,尽管稍微复杂一些。让我们学习这两种方法,并找出选择其中一种而不是另一种的原因。

使用delay()函数淡出LED的Arduino代码

第一个选项是直接来自原始设备制造商提供的Arduino教程的代码。这使用延迟()函数来降低过程的速度,使其易于看到。然而,Delay()会阻碍其他代码的运行,并不总是平滑的。但在许多用例中,它工作得很好。

Int led = 9;// LED连接到int亮度= 0的PWM引脚;// LED的亮度int fadeAmount = 5;void setup(){//声明引脚9为输出:pinMode(LED, output);void loop(){//设置引脚9的亮度:analogWrite(led,亮度);//通过循环来改变下一次的亮度:如果(亮度<= 0 ||亮度>= 255){fadeAmount = -fadeAmount;} //等待30毫秒看到调光效果延迟(30);}

使用millis()函数褪色LED的Arduino代码

前面的草图的主要问题是delay()函数是一个阻塞器。在Arduino上执行的所有代码都将被delay()函数阻塞(暂停)。如果有其他任务在运行,这可能会导致很多问题。要解决这个问题,可以使用millis()函数。

渐隐LED的草图

下面的代码将“淡入”一个LED,开始暗淡和明亮。

const int LED_PIN = 9;//我们使用pin 9的PWN连接unsigned long fadeTime = 3000;//褪色时间为3秒unsigned long fadeStartTime;//当你按下reset时,setup例程会运行一次;//设置引脚9为输出fadeStartTime = millis();} //在循环中淡入,并在结束后重新启动void loop() {unsigned long progress = millis() - fadeStartTime;if (progress <= fadeTime){长亮度= map(progress, 0, fadeTime, 0, 255); / /进度analogWrite (LED_PIN、亮度);} else {fdestarttime = millis();//重新启动渐隐}}

让LED淡出的草图

下面的代码将“淡出”一个LED,开始亮和暗。

const int LED_PIN = 9;//我们使用pin 9的PWN连接unsigned long fadeTime = 3000;//褪色时间为3秒unsigned long fadeStartTime;//当你按下reset时,setup例程会运行一次;//声明pin 9为输出fdestarttime = millis();} //在循环中淡出,并在结束后重新启动void loop() {unsigned long progress = millis() - fadeStartTime;if (progress <= fadeTime){长亮度= 255 - map(progress, 0, fadeTime, 0,255);analogWrite (LED_PIN、亮度);} else {fdestarttime = millis();//重新启动渐隐}}

下一个步骤

在您的Arduino旅程中采取下一步的步骤并了解更多,或返回主教程页面: