RaspberryPi i2cgetでADT7410の温度を取得するコマンド その2

 2015-08-10
前回はとりあえず正の温度が得られることを前提としていましたが、ちゃんと負の温度のことも考えたらこうなる。
 


以前はとりあえずI2Cを使ってログを取って記録させてみてちゃんと動くかな?ってのがメインだったので、0℃以下はとりあえず知らんぷりしてましたが、そろそろちゃんとしたのを考える。。。


考えた結果↓
#!/bin/zsh -f                                                                                                                                                

export PATH=/usr/local/bin:$PATH
export PATH=/sbin:/usr/sbin:/usr/local/sbin:~/bin/:$PATH:./

function calc_temp {
DEC=`echo "$1" | sed 's/0x\(..\)\(..\)/0x\2\1/g' | xargs printf "%d / 8\n" | bc`
if [ ${DEC} -lt 4096 ]
then
echo "scale=4;${DEC}*0.0625"
else
echo "scale=4;(${DEC}-8192)*0.0625"
fi | bc | xargs printf "%08.4f\n"
}




CH0_DAT=`i2cget -y 1 0x48 0x00 w 2>/dev/null`
CH1_DAT=`i2cget -y 1 0x49 0x00 w 2>/dev/null`
CH2_DAT=`i2cget -y 1 0x4a 0x00 w 2>/dev/null`
CH3_DAT=`i2cget -y 1 0x4b 0x00 w 2>/dev/null`
calc_temp ${CH0_DAT}
calc_temp ${CH1_DAT}
calc_temp ${CH2_DAT}
calc_temp ${CH3_DAT}

計算式自体はADT7410のマニュアルに記載されているもの。
それをshellscriptでポン!と実現したかったのだけれども、どうしても正負の判定で式を切り替える(負の時は-8192する)必要があったので、無理矢理1行に詰め込むよりちゃんと書いて可読性確保した方がよかろうと、shell関数にしました。


コマンドの流れは以前と同じで、sedでMSB/LSBの調整をして、xargsとprintfで10進数化、その後はマニュアル記載の式の通りにbcコマンドで計算。

perlやpython使うのは負けた気がするのでshellscript
コマンド呼び出し時のオーバーヘッドが軽い気がします。(気がするだけ)


ADT7410関係:



 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/204-a26d0f22
≪ トップページへこのページの先頭へ  ≫