使用arduino uno,sr04超声波传感器和9个LED,为什么不能使用这个代码呢?

时间:2016-02-20 23:45:04

标签: c++ arduino

我试图使用以下代码将超声波传感器的输出映射到9个LED,出于某种原因,当我上传代码时,LED全部停留并且我甚至没有得到读数槽串口监视器。我以前尝试过类似的代码,但没有LED,而且运行完美。

const int trigPin = 13;
const int echoPin = 12;
const int maxRange = 300;
const int minRange = 0;
const int delayTime = 300;
const int ledPins[] = {10, 9, 8, 7 ,6, 5, 4, 3, 2};
const int ledCount = 9;

void setup() {
    Serial.begin (9600);
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    for(int thisLed = 0; thisLed < ledCount; thisLed = thisLed++){
        pinMode(ledPins[thisLed], OUTPUT); 
    }
}

void loop() {
    long duration;

    digitalWrite(trigPin, LOW);        // this alinea triggers the sensor
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);

    duration = pulseIn(echoPin, HIGH);  // stores lenght of returned pulse

    long distance = duration/58.2;

    if (distance > maxRange){
        Serial.println("Out of range");
        delay(delayTime);
    }
    else if (distance < minRange){
        Serial.println("Out of range");
        delay(delayTime);
    }
    else {
        Serial.print(distance);
        Serial.println(" cm");      
        delay(delayTime);
    }

    constrain(distance, minRange, maxRange);
    int usedLed = map(distance, minRange, maxRange, 0, ledCount);

    for(int thisLed = 0; thisLed < usedLed; thisLed++){
        digitalWrite(ledPins[thisLed], HIGH); 
    } 
}

1 个答案:

答案 0 :(得分:2)

基本上,您在设置函数内的代码中运行无限循环:

for(int thisLed = 0; thisLed < ledCount; thisLed = thisLed++){
   pinMode(ledPins[thisLed], OUTPUT); 
}

根据C99 specification的第6.5条第2款,这段代码thisLed = thisLed++会产生未定义的行为:

  

在前一个和下一个序列点之间,一个对象应该具有它   通过表达式的评估,最多修改一次存储值。   此外,先前的值应只读以确定该值   存储。

为了解决问题,请thisLed = thisLed++

替换thisLed++