【问题标题】:Arduino Digital Pins HIGH LOW output seem to be reversedArduino Digital Pins HIGH LOW 输出似乎颠倒了
【发布时间】:2014-01-31 21:55:51
【问题描述】:

我去年写了一段代码,当时运行良好。但是,这次加载相同的代码时,我得到了相反的输出。也就是说,当 Digital Pin 设置为 HIGH 时,它返回 LOW,反之亦然。

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

我尝试了 BLINK 示例,在这种情况下,输出似乎也反转了。

代码如下:

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
// initialize the digital pin as an output.
pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
delay(1000);               // wait for a second
digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
delay(5000);               // wait for a second
}

根据代码,我的 LED 应该打开 1 秒钟,然后关闭 5 秒钟,然后再打开。但是,我得到的输出完全相反,即 LED 亮 5 秒,灭 1 秒。 我需要有关如何解决此问题的帮助。

我的主要代码是基于 arduino 与 android 的接口。我一直在努力通过蓝牙解决 android-arduino 连接的问题,我去年确实做到了,但现在遇到了这个问题。 我在三个不同的 arduino uno 板上试过这个,用不同的传感器试过,但 HIGH-LOW 似乎颠倒了。

【问题讨论】:

  • 你确定你的二极管接法和去年没有什么不同。换句话说,您可以用输出引脚驱动 LED 的高端。或者你可能会在输出引脚上用低电平将 LED 下沉。
  • 没有。连接与之前相同。 LED 的高压侧固定到 +3.3V,另一侧固定到数字引脚号。 13. 我无法找出大量连接的问题,所以我决定在单个 LED 上试一试,在那里我知道数字输出似乎已损坏(反转)。另外,我已经在三个不同的板上进行了尝试。同样的问题。
  • 它似乎按预期工作。正如我们中的一些人所逃避的那样,您已经确认您正在低端驱动 LED 的阴极 (-)。当数字输出为低电平或零时,它将点亮 LED。

标签: android bluetooth arduino arduino-ide digital-logic


【解决方案1】:

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

【讨论】:

  • 该死的......你说得对,这对我来说太明显了,我忘了他可以反转 LED ;-)
【解决方案2】:

首先,正如@dithermaster 明智地建议的那样,您应该检查是否将 LED 置于正确的方向。扁平侧(最短引脚)应始终插入- 引脚,圆形侧(最长引脚)应始终插入+ 引脚。

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

因此,基本上,您希望将 + 引脚放在引脚 led 上,将 - 引脚放在 GND 上。

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

所以,我现在想知道您的 Arduino 库是否没有以某种方式损坏……也许您在不久前将 HIGH 和 LOW 反转的代码中破解了一些东西并忘记了它?

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

1/ 你能否在digitalWrite() 函数中将HIGH 更改为1 和LOW 为0,看看行为是否发生了变化?

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 框架,以重新启动。

注意:我在这里试图猜测,从 1. 到 3. 是有人倒置了HIGH 和LOW,或 digitalWrite() 与 HIGH 和 LOW 的行为方式。 4. 是绝望的解决方案 :-)

【讨论】:

  • 我的 LED 的长引脚连接到 3v,短路连接到 13(数字引脚),我遇到了同样的问题,你能告诉我我试过 digitalWrite(LED_BUILTIN, 1);但它没有点亮我的 LED,而是 digitalWrite(LED_BUILTIN, 1);这段代码可以..
  • @N.K 你能写一个新问题并最终在此处给出一个链接作为评论,而不是在评论中挤压一个问题,这使得它无法阅读并且可能与这个答案无关?跨度>
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2023-02-18
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多