#include <Wire.h>
#include <dht.h>
#include <RTClib.h>
#include <Adafruit_SSD1306.h>
#include <MsTimer2.h>
#include <stdio.h>
#define DHT22_SDA_PIN 5
#define LCD_ADDRESS 0x3C
#define RTC_ASSRESS 0x68
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
void callbackTime();
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
RTC_DS1307 rtc;
dht thermistor;
volatile bool timeFlg = true;
const char week[7][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
void setup() {
// LCD (SSD1306) 設定
display.begin(SSD1306_SWITCHCAPVCC, LCD_ADDRESS);
display.setTextColor(SSD1306_WHITE);
display.setTextSize(1);
// RTC 設定
rtc.begin();
// 割り込み設定
MsTimer2::set(1000, callbackTime); // 1000ms ごと
MsTimer2::start();
}
void loop() {
if (timeFlg) {
timeFlg = false;
DateTime now = rtc.now();
int chk = thermistor.read22(DHT22_SDA_PIN);
display.clearDisplay();
display.setCursor(0, 0);
char str[20];
sprintf(str, "%d/%02d/%02d (%s)", now.year(), now.month(), now.day(), week[now.dayOfTheWeek()]);
display.println(str);
sprintf(str, "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
display.println(str);
display.println("");
display.print("Temp : ");
display.print(thermistor.temperature, 1);
display.println(" C");
display.print("Humi : ");
display.print(thermistor.humidity, 1);
display.println(" %");
display.display();
}
}
void callbackTime() {
timeFlg = true;
}