我正在尝试为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循环,但他们都没有解决问题。任何见解都非常感谢。
原理图在哪里? –
您可以通过USB端口将电路板连接到PC以使用“串行”接口进行调试吗?另外:你是否试图在'setup()'中将引脚13初始设置为'LOW'? –
由于连接的LED /电阻,引脚13的行为也有所不同。我会建议尝试另一个引脚。还使用(或打开)上拉电阻。在setup()中将引脚设置为LOW。 –