PICAXEで動いているデジタル時計に温湿度の表示を追加しようと思っています。
I2C接続の温湿度センサー(DHT20)はCircuitPythonではつないでいます。
→ CircuitPythonのI2Cインターフェイスで温湿度センサー(DHT20)をつないでみた
CircuitPythonなどでは小数点や負の数値も扱えますが,PICAXEのBASIC言語は整数のみです。少し工夫が必要でしたのでメモしておきます。
PICAXE-14M2と温湿度センサーDHT20はI2Cで接続します。
![](https://stat.ameba.jp/user_images/20220420/21/pta55/82/e0/j/o1093062015105836546.jpg?caw=800)
PICAXEでデータを読み取り,シリアルターミナルに出力するプログラムと出力結果で要点は以下です。
・温湿度ともに小数の桁数は1にして,内部的には10倍した整数3桁で扱う
・センサーの20bitデータの上位16bitを使う
・PICAXEのBASIC言語では16bit同士の掛け算は
x**yで32bitの結果の上位16bitが出る
(上位の値は *2^16の重みがあるので算出式の/2^16と相殺される)
x*yでは32bitの下位16bitの結果が出る
(下位の値は算出式の/2^16で消える,,)
![](https://stat.ameba.jp/user_images/20220420/21/pta55/d6/4a/j/o0931087115105836548.jpg?caw=800)
CircuitPythonやArduinoでは浮動小数点計算が何事もなく行えますが,整数しか扱えないPICAXEのBASICではセンサーの説明書の算出式で「データ/2^20」などが出てくると,ギクッ!となります(^^;;;;;;。
ま,今回のセンサーのように小数点以下1桁ぐらいの精度を求めるなら,20bitある元データの上位16bitで十分そうで(12bitでも,,かな?),面倒も少なくできた感じです。
少しはボケ防止になったので,ぼちぼちとPICAXEのデジタル時計に温湿度表示を追加しようと思います。
I2C接続の温湿度センサー(DHT20)はCircuitPythonではつないでいます。
→ CircuitPythonのI2Cインターフェイスで温湿度センサー(DHT20)をつないでみた
CircuitPythonなどでは小数点や負の数値も扱えますが,PICAXEのBASIC言語は整数のみです。少し工夫が必要でしたのでメモしておきます。
PICAXE-14M2と温湿度センサーDHT20はI2Cで接続します。
![](https://stat.ameba.jp/user_images/20220420/21/pta55/82/e0/j/o1093062015105836546.jpg?caw=800)
PICAXEでデータを読み取り,シリアルターミナルに出力するプログラムと出力結果で要点は以下です。
・温湿度ともに小数の桁数は1にして,内部的には10倍した整数3桁で扱う
・センサーの20bitデータの上位16bitを使う
・PICAXEのBASIC言語では16bit同士の掛け算は
x**yで32bitの結果の上位16bitが出る
(上位の値は *2^16の重みがあるので算出式の/2^16と相殺される)
x*yでは32bitの下位16bitの結果が出る
(下位の値は算出式の/2^16で消える,,)
![](https://stat.ameba.jp/user_images/20220420/21/pta55/d6/4a/j/o0931087115105836548.jpg?caw=800)
CircuitPythonやArduinoでは浮動小数点計算が何事もなく行えますが,整数しか扱えないPICAXEのBASICではセンサーの説明書の算出式で「データ/2^20」などが出てくると,ギクッ!となります(^^;;;;;;。
ま,今回のセンサーのように小数点以下1桁ぐらいの精度を求めるなら,20bitある元データの上位16bitで十分そうで(12bitでも,,かな?),面倒も少なくできた感じです。
少しはボケ防止になったので,ぼちぼちとPICAXEのデジタル時計に温湿度表示を追加しようと思います。