Arduino Code LED无法交替使用

时间:2014-11-03 12:12:48

标签: arduino

红绿灯只是保持红色而不是交替。 希望它保持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);
     } 
 }

3 个答案:

答案 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;
        }
    }
}