3

我正在尝试使用温度传感器用 arduino 构建一个小程序。

我以为我知道该怎么做,但我得到了一些奇怪的输出。

这是我的代码:

int sensorPin = 0;
void setup()
{
    Serial.begin(9600);
}
void loop()
{
    int reading = analogRead(sensorPin);
    float voltage = reading * 5.0 / 1024;
    float temperatureC = (voltage - 0.5) * 100;
    Serial.print(temperatureC); Serial.print(" degrees C, ");
    Serial.print(voltage); Serial.println(" volts");
    delay(1000);
}

这段代码给了我输出:

-26.56 degrees C, 0.23 volts
-26.56 degrees C, 0.23 volts
-27.05 degrees C, 0.23 volts
-26.56 degrees C, 0.23 volts
-26.07 degrees C, 0.24 volts
-26.07 degrees C, 0.24 volts

为什么是-度数?为什么我可以将它更改为我想要的任何引脚,它仍然会给我类似的输出?

4

3 回答 3

4

模拟输入 0 不是引脚 0。

您应该使用定义的符号:
A0、A1、...、A7
用于模拟输入。

尝试

int sensorPin = A0;  

你的程序应该可以工作。

如果您对实际值感到好奇,请在您的 Arduino IDE 安装下查看文件
..\hardware\arduino\variants\standard\pins_arduino.h

于 2013-01-07T08:30:21.500 回答
3

您正在正确阅读此输入。为了不让你获得负学位,你必须以不同的方式处理它。

有了这个:

float temperatureC = (voltage - 0.5) * 100;

任何值都会< 0.5导致负数乘以 100。

尝试使用交换属性来分解它。

  • (voltage - 0.5) * 100是一样的(voltage * 100) - (0.5 * 100)
  • 这可以进一步简化为(voltage * 100) - 50

尽管如此,对于所有voltage < 0.5温度为负的值。

  • 我建议将其乘以temperatureC使其-1为正,并且不要将传感器放置在任何温度为 `~ >= 50 摄氏度的地方。

此外,正如 jdr5ca 在这里指出的那样,您实际上还没有从传感器获得任何数据......:(

无论 pin0 是什么,您都可能会收到噪音(或垃圾)。

编辑

最佳实践是使用括号使操作顺序更清晰。

  • IE:
    • float voltage = reading * 5.0 / 1024;
    • 应该
    • float voltage = reading * (5.0 / 1024);
于 2013-01-07T18:32:15.567 回答
0

首先,您必须使用定义的符号A0

int sensorPin = A0;

in the next

float voltage = reading * (5.0 / 1024);

有一个例子File/Examples/Basic/AnalogReadSerial

于 2016-08-05T19:31:31.057 回答