/*************************************/
//     温湿度計
//     Sensor: DHT11 Module 
//          Lcd: LCD1602-I2C Module
/*************************************/
 
#include < LiquidCrystal_I2C.h >        // ライブラリのインクルード
#include < DHT.h >  
 
LiquidCrystal_I2C lcd( 0x27, 16 , 2 ) ;// 0x27のアドレス,16列2行のLCDを使用
 
#define DHT_PIN 7                          // DHT11のDATAピンをデジタルピン7に定義
//#define DHT_MODEL DHT11   // 接続するセンサの型番を定義する(DHT11やDHT22など)
#define DHT_MODEL DHT22       // DHT 22  (AM2302)
 
DHT dht( DHT_PIN, DHT_MODEL ) ;       // センサーの初期化
 
void setup( ){
  //Serial.begin( 9600 ) ;       // シリアル通信の開始
  dht.begin( ) ;                      // センサーの動作開始
 
  lcd.init( ) ;                          // LCDの初期化
  lcd.backlight( ) ;                // LCDバックライトの点灯
  lcd.setCursor( 0, 0 ) ;        // カーソルの位置を指定
  /***** データを一回読み飛ばし 一回目は不安定? *****/
  float Humidity = dht.readHumidity( ) ;             // 湿度の読み取り---DUMMY
  float Temperature = dht.readTemperature( ) ; // 温度の読み取り(摂氏)---DUMMY  
  /********************************************* */
  lcd.print( "Humid    " ) ;          // 文字の表示
  lcd.print( "Temp " ) ;
}
 
void loop( ){
  delay(5000 ) ;                              // センサーの読み取りを10秒間隔に
 
  float Humidity = dht.readHumidity( ) ;            // 湿度の読み取り
  float Temperature = dht.readTemperature( ) ;// 温度の読み取り(摂氏)
 
  if( isnan( Humidity ) || isnan( Temperature ) ){// 読み取りのチェック
    Serial.println( "ERROR" ) ;
    lcd.setCursor( 0, 1 ) ;
    lcd.print( "     ERROR     " ) ;
    return;
  }
 
// シリアルモニタに温度&湿度を表示
  //Serial.print( "Temp:" ) ;
  //Serial.print( Temperature ) ;
  //Serial.print( "[C]" ) ;
  //Serial.print( "   Humid:" ) ; 
  //Serial.print( Humidity ) ;  
  //Serial.println( "[%]" ) ;
 
// LCDに温度&湿度を表示
  lcd.setCursor( 0, 1 ) ;
  lcd.print( Humidity ) ;
  lcd.print( "%  " ) ;
  lcd.print( Temperature ) ;
  lcd.print( "C" ) ;
}