【问题标题】:Arduino digital read is not working as expectedArduino 数字阅读器未按预期工作
【发布时间】:2017-09-18 13:19:41
【问题描述】:

我一直在使用我的 Arduino 来通过 Cytron MD-10 电机驱动器屏蔽来控制电机极性,并且我让它工作了。

然后,当我回来工作时,似乎数字读取引脚没有区分高电压和低电压,并且其中一个灯持续亮起。

输出功能设置为连续提供测量的 4.84 伏电压,然后开关闭合,电压降至 0,应进入相应的回路。我的板子炸了吗?

我应该尝试什么?

const int outSwitch = 13;
const int inSwitch = 12;
const int pinPWM = 3;
const int pinDir = 2;

int lightOne = 11;
int lightTwo = 10;

static int Dir = 1;
static int cycleCounter = 0;

void setup() {
    // Set Pin Out/Inputs:
    pinMode(pinPWM, OUTPUT);
    pinMode(pinDir, OUTPUT);
    pinMode(outSwitch, INPUT);
    pinMode(inSwitch, INPUT);
    pinMode(lightOne, OUTPUT);
    pinMode(lightTwo, OUTPUT);
    analogWrite(pinPWM, LOW);
}

void loop() {

    // Both read a low input value from the switch and then makes
    // direction the opposite causing it to travel backwards:
    if(digitalRead(inSwitch == LOW)){
        analogWrite(pinPWM, HIGH);

        digitalWrite(pinDir, Dir);
        digitalWrite(lightOne, LOW);
        digitalWrite(lightTwo, HIGH);
    }

    else if(digitalRead(outSwitch == LOW)){
        analogWrite(pinPWM, HIGH);

        digitalWrite(pinDir, -Dir);
        digitalWrite(lightOne, LOW);
        digitalWrite(lightTwo, HIGH);
    }
}

【问题讨论】:

  • ifelse if 条件下,括号有点错误。他们应该是if(digitalRead(inSwitch) == LOW)else if(digitalRead(outSwitch) == LOW)

标签: arduino arduino-uno plc


【解决方案1】:

Sma 正确地将问题识别为括号错位:

if (digitalRead(inSwitch == LOW))  // OOPS!

这会将 inSwitchLOW 进行比较,这可能返回 false。因为digitalRead 需要一个int,所以这个false 被转换为0。所以你读了pin 0。我认为没有pin 0,所以你可能会得到一个错误。然后将该返回值与 0 进行隐式比较,以确定要采用 if 语句的哪个分支。

正确的说法应该是这样的:

if (digitalRead(inSwitch) == LOW)

(社区 Wiki,因为我只是想提供更详细的答案。我不是想为别人的观察争取代表。)

【讨论】:

  • 只是为了澄清:Arduino上有一个pin 0。读取无效引脚返回 0:if (port == NOT_A_PIN) return LOW;
【解决方案2】:

analogWrite(pinPWM, HIGH);甚至是什么意思?缺少值 (0-255),HIGH 不是有效值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多