红绿灯只是保持红色而不是交替。 希望它保持10秒,然后关闭10秒,无限期地继续。 当LED继续交替时,不要使用延迟功能cos需要做其他事情。 感谢
int red = 10; // red traffic light LED on pin 10
int redcounter;
// the setup routine runs once when you press reset:
void setup()
{
// initialize the digital pin as an output.
pinMode(red, OUTPUT);
digitalWrite(red, LOW);
redcounter = 0;
}
// the loop routine runs over and over again forever:
void loop()
{
redcounter = redcounter +1;
if(redcounter==1000)
{
redcounter=0;
if(digitalRead(red)==HIGH)
{
digitalWrite(red, LOW);
}
if(digitalRead(red)==LOW)
{
digitalWrite(red, HIGH);
}
}
答案 0 :(得分:1)
您尝试读取配置为OUTPUT的端口。我不知道这是否应该有用,但如果您只是使用另一个端口作为INPUT并反馈您想要检查该端口的信号,那就更清楚了。但是我不确定检查你自己生成的信号的状态是否有意义(?)。此外,你的redcounter只是" Active waiting",而arduino提供了一个延迟函数,它正是如此。
int red=10;
int signal=11;
void setup()
{
pinMode(red, OUTPUT);
pinMode(signal, INPUT);
digitalWrite(red, LOW);
}
void loop()
{
delay(1000);
if(digitalRead(signal)==HIGH)
{
digitalWrite(red, LOW);
}
if(digitalRead(signal)==LOW)
{
digitalWrite(red, HIGH);
}
}
答案 1 :(得分:0)
使用elseif代替if here:
if(digitalRead(red)==HIGH)
{
digitalWrite(red, LOW);
}
else if(digitalRead(red)==LOW)
{
digitalWrite(red, HIGH);
}
在你的旧解决方案中,每当红色变低时,它会在一段时间后变高。
答案 2 :(得分:0)
代码中的两个问题是数字读取不会读取输出引脚,如果使用增量计数器,则无法准确表示时间。很抱歉,如果我错过了一个支架或我在移动应用程序上执行此操作的内容。 使用此:
int red = 10; // red traffic light LED on pin 10
int redcounter;
boolean pinState = false;
int delayTime = 10000;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(red, OUTPUT);
digitalWrite(red, LOW);
redcounter = millis();
}
// the loop routine runs over and over again forever:
void loop() {
if((millis() - red counter) > delayTime) {
redcounter=millis();
if(pinState) {
digitalWrite(red, LOW);
pinState = false;
}
else {
digitalWrite(red, HIGH);
pinState = true;
}
}
}