LED 不会用 Arduino 点亮
LED's won't light up with Arduino
这是我在 Arduino 中的代码:
int blue1 = 1;
int blue2 = 2;
int blue3 = 3;
int blue4 = 4;
int yell1 = 5;
int yell2 = 6;
int yell3 = 7;
int yell4 = 8;
int red1 = 9;
int red2 = 10;
int red3 = 11;
int red4 = 12;
int knob = A0;
void setup() {
pinMode(blue1,OUTPUT);
pinMode(blue2,OUTPUT);
pinMode(blue3,OUTPUT);
pinMode(blue4,OUTPUT);
pinMode(yell1,OUTPUT);
pinMode(yell2,OUTPUT);
pinMode(yell3,OUTPUT);
pinMode(yell4,OUTPUT);
pinMode(red1,OUTPUT);
pinMode(red2,OUTPUT);
pinMode(red3,OUTPUT);
pinMode(red4,OUTPUT);
pinMode(13,OUTPUT);
pinMode(knob,INPUT); //Value from potentiometer
Serial.begin(9600);
}
void loop() {
delay(250);
digitalWrite(13,HIGH);
delay(250);
digitalWrite(13,LOW);
int number = analogRead(knob); //'number' is return from potentiometer
Serial.println(number);
digitalWrite(blue1,HIGH);
if(number > 85) {
digitalWrite(blue1,HIGH);
}
if(number > 170) {
digitalWrite(blue2,HIGH);
}
if(number > 255) {
digitalWrite(blue3,HIGH);
}
if(number > 340) {
digitalWrite(blue4,HIGH);
}
if(number > 425) {
digitalWrite(yell1,HIGH);
}
if(number > 510) {
digitalWrite(yell2,HIGH);
}
if(number > 595) {
digitalWrite(yell3,HIGH);
}
if(number > 680) {
digitalWrite(yell4,HIGH);
}
if(number > 765) {
digitalWrite(red1,HIGH);
}
if(number > 850) {
digitalWrite(red2,HIGH);
}
if(number > 935) {
digitalWrite(red3,HIGH);
}
if(number == 1023) {
digitalWrite(red4,HIGH);
}
}
目标是让一条 LED 灯亮起,电位计的 return 值越高,点亮的 LED 灯就越多。我知道电位器工作正常,因为它正在将值打印到串行 window。而且我几乎可以肯定我的接线就在面包板上。所以基本上我来这里是为了验证代码是否正确。我真的无法很好地了解面包板(如果可以的话,我什至不确定如何 post 它)。因此,如果您在代码中发现任何问题,请告诉我(以及如何解决这些问题)。但如果你不能,那么我就会知道他的问题出在面包板本身,或者我的接线方式。提前致谢!
我发现您的代码存在两个主要问题:
您正在使用 Serial
,尽管您为 LED 灯条预留了 pin 1
。您不能同时使用两种方法:要么将 pin 用于 Serial 接口(默认情况下,使用引脚 0
和 1
),或者您使用 led 的引脚。尝试同时执行这两项操作可能会损坏您的组件 and/or 您的设备。 因此,您应该删除所有引用串行接口的代码。
你没有设置任何pin到LOW
状态,也就是说如果number是在一个循环中等于 1023
,在那一刻之后,每个引脚将永远处于 HIGH
状态。您应该在循环开始时将每个引脚设置回 LOW
,或者为每个 if
条件添加一个 else 分支。
除此之外,由于您使用了这么多引脚,因此我建议您检查设备吸收的电流是否不超过 Arduino 的 current limitations,因为你可能会损坏你的电路板。
这是我在 Arduino 中的代码:
int blue1 = 1;
int blue2 = 2;
int blue3 = 3;
int blue4 = 4;
int yell1 = 5;
int yell2 = 6;
int yell3 = 7;
int yell4 = 8;
int red1 = 9;
int red2 = 10;
int red3 = 11;
int red4 = 12;
int knob = A0;
void setup() {
pinMode(blue1,OUTPUT);
pinMode(blue2,OUTPUT);
pinMode(blue3,OUTPUT);
pinMode(blue4,OUTPUT);
pinMode(yell1,OUTPUT);
pinMode(yell2,OUTPUT);
pinMode(yell3,OUTPUT);
pinMode(yell4,OUTPUT);
pinMode(red1,OUTPUT);
pinMode(red2,OUTPUT);
pinMode(red3,OUTPUT);
pinMode(red4,OUTPUT);
pinMode(13,OUTPUT);
pinMode(knob,INPUT); //Value from potentiometer
Serial.begin(9600);
}
void loop() {
delay(250);
digitalWrite(13,HIGH);
delay(250);
digitalWrite(13,LOW);
int number = analogRead(knob); //'number' is return from potentiometer
Serial.println(number);
digitalWrite(blue1,HIGH);
if(number > 85) {
digitalWrite(blue1,HIGH);
}
if(number > 170) {
digitalWrite(blue2,HIGH);
}
if(number > 255) {
digitalWrite(blue3,HIGH);
}
if(number > 340) {
digitalWrite(blue4,HIGH);
}
if(number > 425) {
digitalWrite(yell1,HIGH);
}
if(number > 510) {
digitalWrite(yell2,HIGH);
}
if(number > 595) {
digitalWrite(yell3,HIGH);
}
if(number > 680) {
digitalWrite(yell4,HIGH);
}
if(number > 765) {
digitalWrite(red1,HIGH);
}
if(number > 850) {
digitalWrite(red2,HIGH);
}
if(number > 935) {
digitalWrite(red3,HIGH);
}
if(number == 1023) {
digitalWrite(red4,HIGH);
}
}
目标是让一条 LED 灯亮起,电位计的 return 值越高,点亮的 LED 灯就越多。我知道电位器工作正常,因为它正在将值打印到串行 window。而且我几乎可以肯定我的接线就在面包板上。所以基本上我来这里是为了验证代码是否正确。我真的无法很好地了解面包板(如果可以的话,我什至不确定如何 post 它)。因此,如果您在代码中发现任何问题,请告诉我(以及如何解决这些问题)。但如果你不能,那么我就会知道他的问题出在面包板本身,或者我的接线方式。提前致谢!
我发现您的代码存在两个主要问题:
您正在使用
Serial
,尽管您为 LED 灯条预留了 pin1
。您不能同时使用两种方法:要么将 pin 用于 Serial 接口(默认情况下,使用引脚0
和1
),或者您使用 led 的引脚。尝试同时执行这两项操作可能会损坏您的组件 and/or 您的设备。 因此,您应该删除所有引用串行接口的代码。你没有设置任何pin到
LOW
状态,也就是说如果number是在一个循环中等于1023
,在那一刻之后,每个引脚将永远处于HIGH
状态。您应该在循环开始时将每个引脚设置回LOW
,或者为每个if
条件添加一个 else 分支。
除此之外,由于您使用了这么多引脚,因此我建议您检查设备吸收的电流是否不超过 Arduino 的 current limitations,因为你可能会损坏你的电路板。