arduinoによるLCDへの温度表示
arduinoの勉強のために少しプログラムをいじってみた。
I2Cを使った温度計測とそれをLCDに表示するプログラムである。
手持ちのセンサーは、温度計測はAT7410、LCDはosoyooのラズパイスターターキッとにはいっていたもの。
ネットで似たような書き込みを調べるがAT7410はすぐに見つかったが、LCDは特殊らしく見つからない。
そこでosoyooのarduinoに関するページを見てみるとライブラリーに関する記述があったので、それを参考にライブラリーを組み込み、テストプログラムが無事動作した。
両者を合わせた、計測した温度をLCDに表示するプログラムは次のとおりである。
------------------------------------------------------------------------------------
#include
#include
int I2CAdrs;
LiquidCrystal_I2C lcd(0x3f,16,2); // run ic2_scanner sketch and get the IC2 address, which is 0x3f in my case,it could be 0x3f in many cases
// 初期化
void setup(void) {
I2CAdrs = 0x48; // スレーブアドレス
Serial.begin(115200); // シリアル通信パラメータ設定
Wire.begin(); // I2Cマスタ初期化
lcd.init(); // initialize the lcd
}
// メインループ
void loop(void) {
uint16_t val;
float tmp;
int ival;
Wire.requestFrom(I2CAdrs, 2); // S.C発行,CB送信
val = (uint16_t)Wire.read() << 8; // データの読み出し(上位)
val |= Wire.read(); // データの読み出し(下位)
val >>= 3; // 13bit化
ival = (int)val; // 整数化
if(val & (0x8000 >> 3)) { // 符号判定
ival = ival - 8192; // 負数のとき
}
tmp = (float)ival / 16.0; // 摂氏温度換算
Serial.println(tmp, 2); // xx.xx 温度値をシリアル送信
lcd.backlight(); // 表示クリヤー
lcd.setCursor(0,1); // 位置を指定し
lcd.print("Temp:"); lcd.print(tmp); lcd.print("\337C");// 温度を表示
delay(1000); // 測定周期(ms)
}
------------------------------------------------------------------------------------
配線はI2Cの接続のためAT7410もLCDもNANOのA4,A5端子にSDA,SCLにパラで接続してアースと5V電源を継ぐだけである。
lCDの写真は以下のとおりである。