概要
Arduinoを使用して、温度センサの値をキャラクタLCDに表示させました。
部品
- マイコンボード: Arduino Uno
- I2C接続小型キャラクタLCDモジュール: AQM0802A-FLW-GBW
- 温度センサモジュール: AE-ADT7310
回路図
プログラム
ライブラリ「FaBo 213 LCD mini AQM0802A」を使用しているため、Arduino IDEのライブラリマネージャーからインストールします。
#include <FaBoLCDmini_AQM0802A.h> #include<SPI.h> #define SS 10 #define MOSI 11 #define MISO 12 #define SCLK 13 // short: 2byte short raw_data; double temperature; FaBoLCDmini_AQM0802A lcd; void setup(){ // シリアル通信を開始 Serial.begin(9600); Serial.println("Serial start"); // 通信を無効 digitalWrite(SS,HIGH); delay(300); // SPI通信を開始 SPI.begin(); Serial.println("SPI start"); // 通信を有効 digitalWrite(SS,LOW); // 連続読み取りモードを終了 SPI.transfer(0x50); delay(300); // コマンドバイト: 設定レジスタに書き込み SPI.transfer(0x0C); // 設定レジスタ: 16bit分解能 SPI.transfer(0x80); delay(300); // 温度レジスタに対して連続読み込み SPI.transfer(0x54); delay(300); // set up the LCD: lcd.begin(); lcd.command(0x38); lcd.command(0x39); lcd.command(0x14); lcd.command(0x73); lcd.command(0x51); lcd.command(0x6c); lcd.command(0x38); lcd.command(0x01); lcd.command(0x0c); // Print a message to the LCD. lcd.print("hello!"); delay(5000); } void loop(){ // 16bitで温度データを取得 raw_data = SPI.transfer16(""); Serial.print("BIN DATA: "); Serial.println(raw_data,BIN); lcd.clear(); // 符号ありの為、32768 = 0b1000_0000_0000_0000からマイナス if(raw_data >= 32768){ // 65535 = 0b1111_1111_1111_1111 = -1と表現 // 65536を引くことで、65535から-1と表現する // 16bit分解能: 0.0078°C ≒ 1/128 temperature = (double)raw_data-65536/128; } else { temperature = (double)raw_data/128; } lcd.print(temperature); Serial.print(temperature,4); Serial.println("[°C]"); delay(500); }