- ベストアンサー
過去12時間の最低/最高温度を知りたい
- 自宅の外気温を測るための温度計を作ったが、過去12時間の最高/最低気温を表示する方法がわからない。
- 変数の更新とリセットをうまく管理する方法が必要。
- メモリの制約と経過した時間のおおまかな把握が課題。何か良い方法はないか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「12時間分の温度計測回数は8640回程度になりますが、それだけの温度データを保持できるメモリはもっていません。」 常に、過去12時間分の最高値と最低値を自動的に求めるには、必要な期間の過去の値を保持しておいて、その中の最大値と最小値を探して表示する方法しかないと思います。 保持できるデータ量が決まっているなら、計測する頻度(測定間隔を延ばす)を減らすか、保持するデータ量を減らすしかありません。 後者を実現するには、メモリ節約のために、1時間(30分毎でもよい)毎の最大値と最小値だけをメモリに保存し、その中の最大値と最小値を表示するとか。
その他の回答 (2)
- yaritsusozai
- ベストアンサー率59% (50/84)
(1)過去最高、過去最低、12h最高、12h最低、と4つの変数を用意し、 (2)最高値最低値更新時のみ記録、 (3)12h最高と12h最低は12時間毎にリセット。必要があればその時点での値を更に別の配列変数、半日max(n)、半日min(m)に格納してからリセット とすれば良いのでは。
お礼
回答ありがとうございます。 12時間ごとに最高、最低値をリセットすると、ボタンを押した時、過去何時間分の最高値かが分からないのではないでしょうか。 例えば変数がリセットされてから10時間後にボタンを押して変数内容を確認しても、過去10時間分の最高、最低値しか表示できません。この方法だと対象期間が過去0時間~12時間の幅で変動します。 もし更にそれより前の12時間分の最高・最低値が記録されていたとしたら、今度は、10+12=32時間分の最高・最低値しか分からないことになり、この方法では、12~24時間の幅で、対象期間が変動することになります。これだと、今日の最高気温なのか昨日の最高気温なのか分かりません。 No.1さんの方法なら、変動幅は最大1時間なので、実用の範囲のような気がします。
補足
間違えました。 訂正します >10+12=32時間分の最高・最低値しか分からないことになり ↓ 10+12=22時間分
- koi1234
- ベストアンサー率53% (1866/3459)
よくわからない部分がありますが9000回弱のデータ保持もできない ということはPCとかの話ではなくて何かの独自システム上での話ですよね? 使えるデバイスとして他には何かあったりしないのでしょうか? (ファイル読み書きできるならファイルに落とすとか) メモリにしても温度であれば小数点1ケタまで有効程度でしょうから 10倍して保存することで浮動小数点データより小さくなったりしますが それでも足りませんか? (いったいどれぐらいメモリがあるのでしょうか?) 過去のデータの中から最高・最低求める以上は 何らかの形でデータ保持ができないのであれば 不可能です ということになると思います
お礼
回答ありがとうございます。 No.1さんの方法で解決しそうです。
補足
これを使っています。 http://jp.rs-online.com/web/p/microcontrollers/4671965/ C言語で作成していますが、RAMが256バイトしかありません。プログラムや定数はROM上に配置できますが、変数はRAMを使用するため制限が大きいのです。 何日分ものデータを保持する必要があれば、SDメモリカードなどを使う場合もありますが、それほどの用途ではないので使用していません。
お礼
回答ありがとうございます。 その方法がありましたね。 たとえば、max[0~11] min[0~11]のような配列を作っておいて、 1時間ごとに書き込みポインタを0→1→2…11→0…というように巡回させれば、1時間ごとのMAXまたはMINが保持できますね。ボタンを押した時に、12個の最大値または最小値を調べればいいんですね。 (1時間経ったのを知るには、何回計測したかで大体知るしかないのですが) この方法が使えそうです。ありがとうございました。