2014-07-21 40 views
0

我正在尝试为Arduino Uno编写一个简单的控制程序,用于在工作中运行的实验。非常简单,只需要读取输入引脚是否为高电平,如果等待10毫秒以将输出引脚变为高电平,保持10毫秒然后变为低电平,否则输出引脚为低电平。Arduino循环错误:等待几秒钟以响应输入变化

我的问题是,当我运行它时,它会忽略最初的延迟,并且输出引脚在低电平前保持高电平几秒。 (使用delayMicroseconds)

void setup() 
{ 
pinMode(8, INPUT); 
pinMode(13, OUTPUT); 
} 

void loop() 
{ 
    if (digitalRead(8) == HIGH) 
    { 
    delayMicroseconds(10000); //wait 10 milliseconds 
    digitalWrite(13, HIGH); // Pump on 
    delayMicroseconds(10000); // holds for pulse width of 10 millisecond 
    digitalWrite(13, LOW); // Pump off 
    } 
    else 
    { 
    } 
} 

我已经尝试建立一些简单的使用延时功能,等待一秒钟,然后打开输出引脚为高电平,等待秒钟,然后将脚输出低电平调试。我这样做是为了使用Arduino内置的LED进行可视化调试。结果是它在输入引脚变为低电平后实际上继续运行循环3次。 (使用延迟)

void setup() 
{ 
pinMode(8, INPUT); 
pinMode(13, OUTPUT); 
} 

void loop() 
{ 
    if (digitalRead(8) == HIGH) 
    { 
    delay(1000); //wait 1 second 
    digitalWrite(13, HIGH); // Pump on 
    delay(1000);     // hold for 1 second 
    digitalWrite(13, LOW); // Pump off 
    } 
    else 
    { 
    } 
} 

我似乎无法弄清楚它为什么这样做。我已经找遍了,似乎无法找到有关为什么会发生这种情况的信息。我可能会错过一些非常简单的东西,我不是一个有经验的编码员,我只是写我需要运行实验的东西。我试着用c代码直接读写引脚寄存器,并且从if语句切换到while循环,但他们都没有解决问题。任何见解都非常感谢。

+1

原理图在哪里? –

+0

您可以通过USB端口将电路板连接到PC以使用“串行”接口进行调试吗?另外:你是否试图在'setup()'中将引脚13初始设置为'LOW'? –

+0

由于连接的LED /电阻,引脚13的行为也有所不同。我会建议尝试另一个引脚。还使用(或打开)上拉电阻。在setup()中将引脚设置为LOW。 –

回答

1

你应该看看Arduino上的内部上拉电阻。您可以完全用软件消除按钮上的信号:

void setup() { 
    pinMode(2, INPUT_PULLUP); 
} 

void loop() { 
    if (digitalRead(2) == LOW) // NOTE THAT PULLUPS REVERSE YOUR LOGIC 
    { 
    delay(1000); //wait 1 second 
    digitalWrite(13, HIGH); 
    delay(1000);     
    digitalWrite(13, LOW); 
    } 
}