我一直在尝试制作一个红绿灯模拟器,但在使一个RGB灯亮起来(在代码中用(颜色)Pin2表示)时遇到了麻烦。第一个灯光工作正常,但左侧的RGB不能正常工作。我成功地在白光时使它变亮,但当我试图使它变黄时,光是如此暗淡,我几乎看不见它。它是正确连接的,所以我认为代码中可能有错误。如果有人需要https://www.tinkercad.com/things/g0UkhvSKylW-copy-of-traffic-light-with-pedestrian-crossing,这里是该项目的链接
(对于混乱的代码,我也很抱歉,我还不太习惯arduinos,所以我知道代码不是很好)
int redLight = 13;
int yellowLight = 12;
int greenLight = 11;
int redLight2 = 10;
int yellowLight2 = 9;
int greenLight2 = 8;
int redPin = 7;
int bluePin = 6;
int greenPin = 5;
int redPin2 = 4;
int bluePin2 = 3;
int greenPin2 = 2;
void setup() {
pinMode(redLight, OUTPUT);
pinMode(yellowLight, OUTPUT);
pinMode(greenLight, OUTPUT);
pinMode(redLight2, OUTPUT);
pinMode(yellowLight2, OUTPUT);
pinMode(greenLight2, OUTPUT);
pinMode(redPin, OUTPUT);
pinMode(bluePin, OUTPUT);
pinMode(greenPin, OUTPUT);
}
void loop() {
//Note: leftmost traffic light is used for refrence
//all other lights are based on each others timing
while(digitalRead(redLight) ==HIGH){
redLightOn();
break;
}
while(digitalRead(greenLight) == HIGH){
//pedestrian light is white
digitalWrite(redPin, 255);
digitalWrite(greenPin, 255);
digitalWrite(bluePin, 255);
//pedestrian light is off
digitalWrite(redLight2, HIGH);
delay(6000);
digitalWrite(bluePin, 0);//make sure to turn blue pin off!
digitalWrite(redPin, 255);
digitalWrite(greenPin, 40);
delay(1000);
digitalWrite(redPin, 0);
digitalWrite(greenPin, 0);
delay(500);
digitalWrite(redPin, 255);
digitalWrite(greenPin, 40);
delay(1000);
digitalWrite(redPin, 0);
digitalWrite(greenPin, 0);
delay(500);
digitalWrite(redPin, 255);
digitalWrite(greenPin, 40);
delay(1000);
digitalWrite(greenLight, LOW);
digitalWrite(redPin, 0);
digitalWrite(greenPin, 0);
digitalWrite(bluePin, 0);
digitalWrite(yellowLight, HIGH);
//pedestrial light flashing
digitalWrite(redPin, 255);
digitalWrite(greenPin, 40);
delay(5000);
//yellow light changes to red
digitalWrite(yellowLight, LOW);
digitalWrite(redLight, HIGH);
}
//Initial starting light: starts off red
digitalWrite(redLight, HIGH);
}
//create an initial red light function
void redLightOn(){
digitalWrite(redLight2, LOW);
digitalWrite(greenLight2, HIGH);
digitalWrite(redPin2, 255);
digitalWrite(greenPin2, 255);
digitalWrite(bluePin2, 255);
//pedestrian light on white
digitalWrite(redPin, 255);
digitalWrite(greenPin, 40);
//pedestrian light is off
delay(6000);
digitalWrite(bluePin2, 0);//make sure to turn blue pin off!
digitalWrite(redPin2, 255);
digitalWrite(greenPin2, 255);
delay(1000);
digitalWrite(redPin2, 0);
digitalWrite(greenPin2, 0);
delay(500);
pYellow();
delay(1000);
digitalWrite(redPin2, 0);
digitalWrite(greenPin2, 0);
delay(500);
pYellow();
delay(1000);
digitalWrite(greenLight, LOW);
//digitalWrite(redPin, 0);
//digitalWrite(greenPin, 0);
//digitalWrite(bluePin, 0);
digitalWrite(greenLight, LOW);
//pedestrial light off
digitalWrite(greenLight2, LOW);
digitalWrite(yellowLight2, HIGH);
delay(5000);
digitalWrite(yellowLight2, LOW);
digitalWrite(redLight, LOW);
digitalWrite(greenLight, HIGH);
}
void pYellow(){
digitalWrite(redPin2, 255);
digitalWrite(greenPin2, 40);
}发布于 2021-04-07 23:37:47
你似乎把digitalWrite和analogWrite搞混了。digitalWrite函数接受引脚编号和高位或低位。在undefined中传递一个整数值。我猜测0的整数将被关闭,而其他任何值都将被打开。
看起来您想要将引脚设置为模拟引脚,然后使用analogWrite更新它们。使用此命令,您可以使用值0- 255设置0- 5v之间的任何电压电平。
此外,检查其代码或硬件的一个好方法是简单地将LED的黄色引脚连接到5V电源线,看看它变得有多亮。最后,你有没有一个共同的LED下拉电阻,或者你有每个颜色的独立电阻?如果是这样的话,可能其中一个值是错误的,或者你在黄线上的某个地方有一个不可靠的连接。
发布于 2021-04-07 23:32:57
我看不出你的代码有什么问题。实际上,这不是一个软件问题,而是一个物理问题。如果您测量LED支脚之间的电压,您可能会看到该电压根据您的代码而变化。问题是,亮度是你用眼睛测量的东西。有一些情况,比如你从同一家供应商购买了不同颜色的LEDS,但灯泡看起来不同。
如果你想在所有颜色中获得均匀的亮度,你可以尝试从代码中使较浅的颜色变暗,或者尝试在腿上使用不同的值电阻。
https://stackoverflow.com/questions/66989112
复制相似问题