我试图使用以下代码将超声波传感器的输出映射到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);
}
}
答案 0 :(得分:2)
基本上,您在设置函数内的代码中运行无限循环:
for(int thisLed = 0; thisLed < ledCount; thisLed = thisLed++){
pinMode(ledPins[thisLed], OUTPUT);
}
根据C99 specification的第6.5条第2款,这段代码thisLed = thisLed++
会产生未定义的行为:
在前一个和下一个序列点之间,一个对象应该具有它 通过表达式的评估,最多修改一次存储值。 此外,先前的值应只读以确定该值 存储。
为了解决问题,请thisLed = thisLed++
thisLed++