我正在尝试使用温度传感器构建一个带有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
为什么-
为度?为什么我可以将它更改为我想要的任何引脚,它仍会给我一个类似的输出?
答案 0 :(得分: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
以使其为正值,而不是将传感器放在任何“〜&gt; = 50摄氏度”附近。另外,正如jdr5ca指出here,你实际上还没有从传感器获取任何数据...... :(
你可能从任何pin0获得噪音(或垃圾)。
修改强>
最佳做法是使用括号使操作顺序更加清晰。
float voltage = reading * 5.0 / 1024;
float voltage = reading * (5.0 / 1024);
答案 1 :(得分:0)
首先,您必须使用定义的符号client.PutAsync("xxx/xx/xxx",new StringContent(myQueueItem, UnicodeEncoding.UTF8, "application/json")).Result
A0
int sensorPin = A0;
in the next
float voltage = reading * (5.0 / 1024);