首页 文章

Arduino数字引脚HIGH LOW输出似乎被反转

提问于
浏览
1

去年我写了一段代码,当时效果很好 . 但是,这次加载相同的代码我得到反转输出 . 也就是说,当数字引脚设置为高电平时,它会返回低电平,反之亦然 .

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

我已经尝试了BLINK EXAMPLE,在这种情况下,输出似乎也是相反的 .

这是代码:

// 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秒钟才能再次打开 . 但是,我得到的OUTPUT完全反转,即LED亮5秒,OFF 1秒 . 我需要帮助如何解决这个问题 .

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

3 回答

  • 0

    在输出引脚上放置电压表或示波器 . 低电压为0伏特,高电压为5伏特?如果是这样,软件和芯片工作正常,你的LED接线,所以另一侧是电压,这意味着芯片的0 V将打开它 . 这是驱动LED的常用方法,因为一些芯片可以吸收比它们可以提供更多的电流 .

  • 2

    首先,正如@dithermaster明智地建议你应该检查一下你是否把LED放在正确的方向上 . 应始终将扁平侧(最短引脚)插入 - 引脚,将圆形侧(最长引脚)插入 + 引脚 .

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

    所以基本上,你想要 led 引脚上的 + 引脚和 GND 上的 - 引脚 .

    也就是说,如果你说你没有改变任何东西,并且你尝试过不同的电路板,你的问题确实很奇怪......

    所以,我现在想知道你的Arduino库是否在某种程度上没有被破坏...也许你曾经在代码中破解了 HIGHLOW ,并且忘了它?

    为了帮助您调试它,您可以尝试以下几点:

    1 /你可以在 digitalWrite() 函数中为 10 更改 HIGH ,并查看行为是否发生了变化?

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

    N.B. :我想在这里猜测,从1到3.是有人倒 HIGHLOW ,或 digitalWrite()HIGHLOW 表现的方式 . 4.绝望的解决方案:-)

  • 0

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

相关问题