我去年写了一个草图,当时效果很好。但现在运行此代码会导致反向输出(当将
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 秒。
如何让引脚输出想要的值?
将电压表或示波器放在输出引脚上。 0 伏时为低电平,5 伏时为高电平吗?如果是这样,则软件和芯片工作正常,并且您的 LED 已接线,因此另一侧将有电压,这意味着芯片的 0 V 将打开它。这是驱动 LED 的常见方法,因为某些芯片吸收的电流比源出的电流多。
首先,正如 @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. 是绝望的解决方案:-)
我唯一一次遇到这种情况是在我弄乱了arduino的boards.txt文件之后,如果你改变了这个文件中的任何内容,你可以卸载并删除C:/Program Files/Arduino中的所有arduino剩余数据只需备份库和其他脚本。然后重新安装arduino应该就可以了。 Arduino 也可以从 win10 上的 windows store 安装以自动更新
您可能连接到了错误的引脚,您认为该引脚是 GND。仔细检查哪个引脚是 GND,是打印文本“GND”左侧的引脚,还是右侧的引脚。