为什么Arduino数字引脚输出(`HIGH`、`LOW`)似乎颠倒了?

问题描述 投票:0回答:4

我去年写了一个草图,当时效果很好。但现在运行此代码会导致反向输出(当将

HIGH
写入数字引脚时,它会输出
LOW
,反之亦然)。

// PROBLEM: Should turn ON the LED but instead it turns OFF
digitalWrite(led, HIGH);

我尝试过“Blink”草图,输出似乎也是相反的:

void setup() {                
    pinMode(LED_BUILTIN, OUTPUT);     
}

void loop() {
    // Should turn the LED on by making the voltage HIGH
    digitalWrite(LED_BUILTIN, HIGH);   
    delay(1000);

    // Should turn the LED off by making the voltage LOW
    digitalWrite(LED_BUILTIN, LOW);
    delay(5000);
}

根据代码,我的 LED 应该打开on 1 秒,然后应该打开off 5 秒,然后再次打开on。然而,我得到的输出是相反的,即 LED on 持续 5 秒,off 持续 1 秒。

如何让引脚输出想要的值?

arduino digital-logic
4个回答
2
投票

将电压表或示波器放在输出引脚上。 0 伏时为低电平,5 伏时为高电平吗?如果是这样,则软件和芯片工作正常,并且您的 LED 已接线,因此另一侧将有电压,这意味着芯片的 0 V 将打开它。这是驱动 LED 的常见方法,因为某些芯片吸收的电流比源出的电流多。


0
投票

首先,正如 @dithermaster 明智地建议的那样,您应该检查 LED 的方向是否正确。应始终将扁平侧(最短的插针)插入

-
插针,将圆形侧(最长的插针)插入
+
插针。

切勿在两个 IO 引脚之间连接 LED,因为这可能会损坏 Atmega!

所以基本上,您希望将

+
引脚放在
led
引脚上,将
-
引脚放在
GND
上。

也就是说,如果你说你什么也没改变,并且你尝试过不同的板,你的问题确实很奇怪......

所以,我现在想知道你的 Arduino 库是否没有以某种方式损坏......也许你在代码中修改了一些东西,不久前颠倒了

HIGH
LOW
然后忘记了?

为了帮助您调试它,您可以尝试一些方法:

1/ 您能否在

HIGH
函数中将
1
更改为
LOW
,将
0
更改为
digitalWrite()
,并查看行为是否发生变化?

2/如果确实改变了,你可以尝试以下方法吗

请您运行这个草图并告诉我们它的行为是否符合预期?看看arduino显示器

void setup() {
    Serial.begin(115200);
}

void loop() {
    Serial.print("HIGH: ");
    Serial.print(HIGH);
    Serial.print(" ; LOW: ");
    Serial.println(LOW);
}

3/你可以尝试改变吗

digitalWrite()

具有以下内容:

void loop() {
    out = portOutputRegister(digitalPinToPort(pin));
    *out |= digitalPinToBitMask(pin);  // set pin to HIGH
    delay(1000);
    *out &= ~digitalPinToBitMask(pin); // set pin to LOW
    delay(5000);
}

4/我想,您可能还想卸载/重新安装完整的 Arduino 框架,以重新启动。

NB.:我在这里试图猜测,从 1.3. 是有人颠倒了

HIGH
LOW
,或者
digitalWrite()
HIGH
 的行为方式LOW
4. 是绝望的解决方案:-)


0
投票

我唯一一次遇到这种情况是在我弄乱了arduino的boards.txt文件之后,如果你改变了这个文件中的任何内容,你可以卸载并删除C:/Program Files/Arduino中的所有arduino剩余数据只需备份库和其他脚本。然后重新安装arduino应该就可以了。 Arduino 也可以从 win10 上的 windows store 安装以自动更新


0
投票

您可能连接到了错误的引脚,您认为该引脚是 GND。仔细检查哪个引脚是 GND,是打印文本“GND”左侧的引脚,还是右侧的引脚。

© www.soinside.com 2019 - 2024. All rights reserved.