有关此代码的更多详情和说明:

时间:2016-02-23 23:35:18

标签: arduino

我正在处理我的最终项目,而且我很喜欢这段代码。我尝试了很多次,但每次都给我错误的结果。 我的问题是:如果有任何有Arduino代码经验的人可以解释这段代码中的每一行。

#define SERIESRESISTOR 560
// What pin to connect the sensor to
#define NUMSAMPLES 15
int samples[NUMSAMPLES];
#define SENSORPIN A0
#define FLAP 1
#define FUDGE 0.3
void setup(void) {
Serial.begin(9600);
analogReference(EXTERNAL);
}

void loop(void) {
 uint8_t i;
 float average;
 float waterlevel;
 float lastwaterlevel=0;
// take N samples in a row, with a slight delay
for (i=0; i< NUMSAMPLES; i++) {
samples[i] = analogRead(SENSORPIN);
delay(10);
}
// average all the samples out
average = 0;
for (i=0; i< NUMSAMPLES; i++) {
average += samples[i];
}
average /= NUMSAMPLES;
//Serial.print("Average analog reading ");
//Serial.println(average);
// convert the value to resistance
average = 1023 / average - 1;
average = SERIESRESISTOR / average;
//Serial.print("Sensor resistance ");
//Serial.println(average);
waterlevel = 0;
waterlevel= -1 * 0.006958 * average + 11.506958+ FUDGE;
if (lastwaterlevel<(waterlevel-FLAP)||lastwaterlevel>(waterlevel+FLAP))
{
    Serial.print("Water level (inches) ");
    Serial.println(waterlevel);
}
delay(1000);
lastwaterlevel=waterlevel;
}

提前谢谢!

1 个答案:

答案 0 :(得分:1)

  

我正在努力解决部分代码问题:#define FLAP 1 #define FUDGE 0.3这是什么意思?

您可以查看C预处理器的工作原理。在这个例子中解释:

在编译之前,您的代码将经历预处理阶段。除此之外,它还进行了文本替换。例如:

T*100 + W*10 + O*1  #=  2*_

预处理器会遍历您的代码并将#define FLAP 1 的每个实例替换为FLAP

1

预处理器会遍历您的代码并将#define FUDGE 0.3 的每个实例替换为FUDGE

等等其他定义。

要理解代码,只需在心理上自己做替换。

例如:

0.3

现在这一行:

#define NUMSAMPLES 15

有效地成为:

for (i=0; i< NUMSAMPLES; i++) {