gpt4 book ai didi

c++ - Arduino 循环错误 : Waits several seconds to respond to input change

转载 作者:行者123 更新时间:2023-11-28 06:46:43 26 4
gpt4 key购买 nike

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

我的问题是,当我运行它时,它完全忽略了初始延迟,并且输出引脚在变低之前保持高电平几秒钟。 (使用延迟微秒)

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 代码读取和写入 pin 寄存器,并从 if 语句切换到 while 循环,但都没有解决问题。非常感谢任何见解。

最佳答案

您应该查看 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);
}
}

关于c++ - Arduino 循环错误 : Waits several seconds to respond to input change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24871420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com