亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

使用按钮通过 PWM 调光灯光

组件和用品

Arduino Mega 2560
× 1
面包板(通用)
× 1
跳线(通用)
使用量可能会有所不同,这取决于使用的方法。
× 11
LED(通用)
任何颜色都可以,但我推荐 3 种不同的颜色。
× 3
SparkFun 按钮开关 12mm
× 1
电阻 330 ohm
× 4

应用和在线服务

Arduino IDE

关于这个项目

该项目向您展示了如何使用 Arduino 淡化 LED(发光二极管)。它分为 3 个部分:

  • 淡入淡出的灯光
  • 使用按钮使灯光变暗
  • 使用按钮淡化灯光(改进延迟)

淡出灯光:

在本节结束时,您的项目应如下所示。

正如您所看到的,灯光变亮,然后按照交通灯的顺序逐渐变暗。现在,让我们开始吧。

示意图:

如您所见,LED 连接到引脚 3、6 和 9。您可以将 LED 连接到您喜欢的任何引脚,但您必须记住之后在代码中更改它。

代码:

首先,将其添加到您的代码中。它指示哪些组件,在这种情况下,哪些 LED 进入哪些引脚。

int ledRed =9;int ledYellow =6;int ledGreen =3; 

现在,在 void setup() 功能,说明管脚是输入还是输出。

void setup() { pinMode(ledRed, OUTPUT); pinMode(ledYellow,输出); pinMode(ledGreen, OUTPUT);} 

最后,将以下内容添加到 void loop() 功能。它告诉 MCU 要做什么。

void loop() { // 这只是使红灯渐暗 - ledRed //ledRed for (int i=0; i<=255; i++) { analogWrite(ledRed, i);延迟(30); } for (int i=255; i>=0; i--) {analogWrite(ledRed, i);延迟(30); }} 

这里发生了什么,是 MCU 正在检查整数 'i' 是否低于 255。如果是,'i' 的值 增加一。该过程延迟 30 毫秒,然后重新启动。一旦 'i' 的值 等于或大于255,每检查一次就减一。当该值达到 0 时,整个过程重新进行。

但是,如果您想更改淡入淡出所需的时间,则必须更改所有 delay() 功能到你想要的数量。那不是很有效率。在想要更改 delay() 时使事情变得更容易和更快 次,将此添加到代码的开头。

const int fake =30; 

它所做的是设置一个默认值,在这种情况下,它是一个默认时间。现在,更改每个 delay() 值变成(淡入淡出) .如果您愿意,您可以将其命名为其他名称。结果你的 delay() 函数应该是这样的。

延迟(淡入淡出); 

代码应该如下所示:

int ledRed =9;int ledYellow =6;int ledGreen =3;const int Fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode(ledYellow,输出); pinMode(ledGreen, OUTPUT);}void loop() { //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); }延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledRed, i);延迟(淡出); } //ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledYellow, i);延迟(淡出); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledGreen, i);延迟(淡出); } //ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledYellow, i);延迟(淡出); }} 

使用按钮使灯光变暗:

在本节之后,您将能够向您的项目添加一个按钮。

如您所见,LED 仅在我按下按钮后才会改变。现在,让我们开始吧。

示意图:

您可能已经注意到,所有 LED 都保持在同一个位置,但增加了一个按钮。

代码:

首先,我们需要告诉 MCU 按钮连接到哪个引脚。为此,请将其添加到代码的开头。

int button =7;  

现在,在 void setup() 功能,添加这个告诉MCU按钮是否为Input of Output。

pinMode(button, INPUT); 

还要将此添加到函数中。

 digitalWrite(ledRed, LOW);数字写入(ledYellow,低);数字写入(ledGreen,高); 

它设置了一个启动灯。这次,启动 LED 为绿色,但您可以根据需要将其更改为红色或黄色。

现在,void loop() 有一个很大的变化 功能。 loop() 中的所有内容 现在已被名为fadeLights() 的函数取代 (如果您愿意,名称可以不同)。在 loop() 中 现在应该是:

void loop() { if(digitalRead(button) ==HIGH) { delay(15); // 软件去抖动 if(digitalRead(button) ==HIGH){ // 如果按钮被按下,函数fadeLights(); // 调用淡入淡出 } } else { digitalWrite(ledRed, LOW); // 如果按钮没有被按下,绿色 LED 是 digitalWrite(ledYellow, LOW); // 将要开启,而其他人则不会。数字写入(ledGreen,高); }} 

如前所述,voidfadeLights() 函数将包含循环中的内容。

voidfadeLights(){ for (int i =255; i>=0; i--) { //从绿色开始所以需要让绿色淡出analogWrite(ledGreen, i);延迟(淡出); } //ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledYellow, i);延迟(淡出); } //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledRed, i);延迟(淡出); } //ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledYellow, i);延迟(淡出); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i);延迟(淡出); } } 

如果您的项目与视频中的项目一样,那么您就做对了。如果顺序不正确,请检查:

  • 如果您的代码编写正确
  • 如果您已将 LED 连接到正确的引脚

如果您的灯不亮,请检查

  • 如果您已将 LED 连接到正确的引脚
  • 如果您已正确连接电线
  • 如果你的公式写对了

带按钮的淡出灯光(改进延迟):

您可能已经注意到,当我松开按钮时,灯光继续变暗。在本节之后,您将能够编辑您的代码,以便 LED 仅在按下按钮时淡出。

正如您在这里看到的,当我松开按钮时,LED 恢复到默认顺序:

红色 - 关闭

黄色 - 关闭

绿色 - 开启

示意图:

原理图保持不变,因为我们不再添加组件或希望它做任何不同的事情 - 我们仍然希望 LED 褪色。

代码:

我们不再添加任何内容,因此无需在开始时添加任何内容。但是,由于我们正在更改延迟,因此需要将其删除。

const int fake =10; // 不再需要这个了 

setup() 无需更改 功能。在 void loop() ,我们需要添加一个else 声明。

void loop() { if(digitalRead(button) ==HIGH) { delay(15); if(digitalRead(button) ==HIGH){fadeLights(); } } else { // 在这里添加 digitalWrite(ledRed, LOW);数字写入(ledYellow,低);数字写入(ledGreen,高); }}  

这意味着当按钮没有被按下时,程序退出 fadeLights() 然后转到else 具有默认 LED 顺序的语句。与之前不同 - 之前,该按钮未检查一次 fadeLights() 已被调用。

现在,更改所有 delay() 功能:

for( int y =0; y <1000; y++){ // 如果按钮被释放 if (digitalRead(button) ==LOW) { return; } 

在每个循环中,微处理器都会检查按钮。如果它被释放,返回 将调用命令来停止 fadeLights() .据我估计,当每个 for 循环执行时,可能需要大约 10 微秒,这意味着我们需要多次执行才能使其达到我们想要的速度。

希望您喜欢本教程并祝您的项目好运。

代码

  • 淡入淡出的灯光
  • 使用按钮使灯光变暗
  • 使用按钮淡化灯光(改进延迟)
淡入淡出的灯光Arduino
int ledRed =9;int ledYellow =6;int ledGreen =3;const intfade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode(ledYellow,输出); pinMode(ledGreen, OUTPUT);}void loop() { //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); }延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledRed, i);延迟(淡出); } //ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledYellow, i);延迟(淡出); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledGreen, i);延迟(淡出); } //ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledYellow, i);延迟(淡出); }}
带按钮的淡入淡出灯光Arduino
int ledRed =9;int ledYellow =6;int ledGreen =3;int button =7;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode(ledYellow,输出); pinMode(ledGreen,输出); pinMode(按钮,输入);数字写入(ledRed,低);数字写入(ledYellow,低); digitalWrite(ledGreen, HIGH);}void loop() { if (digitalRead(button) ==HIGH) { delay(15); if (digitalRead(button) ==HIGH) {fadeLights(); } } else { digitalWrite(ledRed, LOW);数字写入(ledYellow,低);数字写入(ledGreen,高); }}voidfadeLights() { for (int i =255; i>=0; i--) {analogWrite(ledGreen, i);延迟(淡出); } //ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledYellow, i);延迟(淡出); } //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledRed, i);延迟(淡出); } //ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i);延迟(淡出); } for (int i =255; i>=0; i--) {analogWrite(ledYellow, i);延迟(淡出); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i);延迟(淡出); }}
带按钮的淡入淡出灯光(改进延迟)Arduino
int ledRed =9;int ledYellow =6;int ledGreen =3;int button =7;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); pinMode(ledYellow,输出); pinMode(ledGreen,输出); pinMode(按钮,输入);数字写入(ledRed,低);数字写入(ledYellow,低); digitalWrite(ledGreen, HIGH);}void loop() { if(digitalRead(button) ==HIGH) { delay(15); if(digitalRead(button) ==HIGH){fadeLights(); } } else { digitalWrite(ledRed, LOW);数字写入(ledYellow,低);数字写入(ledGreen,高); }}无效fadeLights(){ for( int i=255; i>=0; i--) { analogWrite(ledGreen, i); for( int y =0; y <1000; y++){ // 如果按钮被释放 if (digitalRead(button) ==LOW) { return; } } } //ledYellow for( int i=0; i<=255; i++) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 如果按钮被释放 if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 如果按钮被释放 if (digitalRead(button) ==LOW) { return; } } } //ledRed for( int i=0; i<=255; i++) { analogWrite(ledRed, i); for( int y =0; y <1000; y++){ // 如果按钮被释放 if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledRed, i); for( int y =0; y <1000; y++){ // 如果按钮被释放 if (digitalRead(button) ==LOW) { return; } } } //ledYellow for( int i=0; i<=255; i++) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 如果按钮被释放 if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 如果按钮被释放 if (digitalRead(button) ==LOW) { return; } } } //ledGreen for( int i=0; i<=255; i++) { analogWrite(ledGreen, i); for( int y =0; y <1000; y++){ // 如果按钮被释放 if (digitalRead(button) ==LOW) { return; } } }}

示意图


制造工艺

  1. Arduino Gyroscope Game with MPU-6050
  2. 使用 Arduino 和 RFID 和 Python 的考勤系统
  3. 带 LED 和压电扬声器的 DHT11 传感器
  4. 使用 ARDUINO 的超声波悬浮机器
  5. Unopad - 带有 Ableton 的 Arduino MIDI 控制器
  6. 带有 Arduino 的自动植物浇水系统
  7. 带有 Arduino 的简单障碍物传感器
  8. 找到我
  9. 如何使用 Arduino 测量地球质量
  10. Sonar 使用 arduino 并在处理 IDE 上显示
  11. Car Counter using Arduino + Processing + PHP
  12. 25 kHz 4 Pin PWM 风扇控制与 Arduino Uno