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 が何であれ、ノイズ (またはガベージ) を取得しています。

編集

操作の順序をより明確にするために、括弧を使用することをお勧めします。

  • すなわち:
    • float voltage = reading * 5.0 / 1024;
    • する必要があります
    • float voltage = reading * (5.0 / 1024);
于 2013-01-07T18:32:15.567 に答える