#include <Wire.h>
#include "RTClib.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
RTC_DS1307 rtc;
int i = 1;
void setup() {
Wire.begin();
if (!rtc.begin()) {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Couldn't find RTC!");
display.display();
while (1);
}
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
while (1);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Scanning I2C Bus...");
display.display();
delay(1000);
}
void loop() {
display.clearDisplay();
display.setCursor(0, 0);
byte error, address;
int nDevices = 0;
for (address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
char buf[32];
sprintf(buf, "Device: 0x%02X", address);
display.println(buf);
nDevices++;
delay(10);
} else if (error == 4) {
char buf[32];
sprintf(buf, "Error: 0x%02X", address);
display.println(buf);
}
}
if (nDevices == 0) {
display.println("No I2C devices found");
} else {
display.println("Scan complete");
}
DateTime now = rtc.now();
display.println();
char timeBuf[32];
sprintf(timeBuf, "%04d/%02d/%02d %02d:%02d:%02d",
now.year(), now.month(), now.day(),
now.hour(), now.minute(), now.second());
display.println(timeBuf);
if (i == 1) {
display.println("(😭)");
} else if (i == 2) {
display.println("(😑)zZZ");
} else if (i == 3) {
display.println("(^o^)");
}
display.display();
delay(1000);
i++;
if (i > 3) {
i = 1;
}
}