タクトスイッチで温度センサ起動,停止の切り替えをしたい,温度が測定されない
タクトスイッチを押したときに,温度センサMCP9700を起動し温度を測定しシリアルモニタに表示,温度センサMCP9700が起動しているときにタクトスッチを押すと停止するプログラムを書いたのですが,実行したところ温度センサが起動せず,そのまま2.59Vを出力されてしまいます.またタクトスイッチを押すことで電圧オンオフはできています.
なぜこのように出力されてしまうのかこの問題を解決したいのでご教授の方お願いします.
ソースコード
#define SENSOR_COEFF 0.01
#define SENSOR_OFFSET 0.5
#define TEMP_SENSOR_IN A0
const int SWITCH = 2;
int v;
int old_v;
int state = 0;
void setup() {
pinMode(SWITCH, INPUT);
analogReference(EXTERNAL);
pinMode(TEMP_SENSOR_IN, OUTPUT);
Serial.begin(9600);
}
void loop() {
v = digitalRead(SWITCH);
if ((v == HIGH) && (old_v == LOW)) {
state = 1 - state;
delay(100);
}
old_v = v;
if (state == 1) {
digitalWrite(TEMP_SENSOR_IN, HIGH); //温度センサ起動
float v_temp = 2.59/ 1024.0 * analogRead(TEMP_SENSOR_IN); //V測定
float t_sensor = (v_temp - SENSOR_OFFSET) / SENSOR_COEFF; //温度に変換,
float t_error = 244e-6 * (125.0 - t_sensor) * (t_sensor - -40.0) + 2e-12 * (t_sensor - -40.0) - 2.0; //温度補正式
float t_comp = t_sensor - t_error; //計測温度-補正式=補正温度,精度向上
Serial.print("Sensor Voltage[V]:\t ");
Serial.println(v_temp); //V表示
Serial.print("Temperature[C]:\t\t ");
Serial.println(t_sensor); //補正なし温度表示
Serial.print("Corrected Temperature[C]:");
Serial.println(t_comp); //補正した温度表示
Serial.println();
delay(1000); //1秒まつ
}
else {
digitalWrite(TEMP_SENSOR_IN, LOW); //温度センサー停止
}
}
出力結果
Sensor Voltage[V]: 2.59
Temperature[C]: 208.75
Corrected Temperature[C]:215.83
回路図
回答2件
あなたの回答
tips
プレビュー