如何使用Arduino打开一定距离的LED

时间:2012-07-31 03:56:47

标签: arduino ping led

我正在制作一个Arduino程序,我无法让它工作。

当有人离传感器5英寸时,所有程序都会打开LED。问题在于,无论何时启动程序,LED都会保持关闭状态。这是我的程序

const int pingPin =7 ;
const int ledPin = 13;

void setup() {
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
}

void loop() {
    long duration, inches, cm;

    pinMode(pingPin,OUTPUT);
    digitalWrite(pingPin,LOW);
    delayMicroseconds(2);
    digitalWrite(pingPin,HIGH);
    delayMicroseconds(5);
    digitalWrite(pingPin,LOW);

    pinMode(pingPin,INPUT);
    duration =pulseIn(pingPin,HIGH);

    inches = microsecondsToInches(duration);
    cm = microsecondsToCentimeters(duration);

    Serial.print(inches);
    Serial.print("in, ");
    Serial.print(cm);
    Serial.print("cm");
    Serial.println();
    delay(100);

    while (true) {
        if (inches <= 5) {
            digitalWrite(ledPin, HIGH);
        }
        else {
            digitalWrite(ledPin, LOW);
        }
    }
}

long microsecondsToInches(long microseconds)
{
    return microseconds /74/2;
}

long microsecondsToCentimeters(long microseconds)
{
    return microseconds /29/2;
}

如何解决此问题,以便LED以正确的距离打开和关闭?

1 个答案:

答案 0 :(得分:1)

仔细查看代码的最后一位:

while (true) {
  if (inches <= 5) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}

你看到它在做什么?它永远是循环的。

所以......你的var inches获得一次值,然后是永恒(或直到你拔掉),这个值将保持不变..

摆脱while(),您应该看到一些响应(假设其他所有内容都正确连接)。