#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <U8g2_for_Adafruit_GFX.h>
#include "PinButton.h"
#include "RTClib.h"
#include "Bitmaps.h"
#include "OnOffFont.h"
#include "Clockfont.h"
#include "Variables.h"
#include "helpers.h"
PinButton startBtn(15);//, MultiButtonConfig* { 20, 100, 800 });
PinButton menuBtn(14);//, MultiButtonConfig* { 20, 100, 800 });
PinButton plusBtn(13);//, MultiButtonConfig* { 20, 100, 800 });
PinButton minusBtn(12);//, MultiButtonConfig* { 20, 100, 800 });
RTC_DS1307 rtc;
Adafruit_SSD1306 display(128, 64, &Wire, -1);
U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;
#include "Screens.h"
#include "ProcessButtons.h"
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
//rtc.adjust(DateTime(60));
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// initialize OLED display with I2C address 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (1);
}
u8g2_for_adafruit_gfx.begin(display);
pinMode(buzzerPin, OUTPUT);
digitalWrite(buzzerPin, LOW);
delay(2000); // wait two seconds for initializing
if (splash > 0) {
// splash screen 5 seconds
display.clearDisplay();
display.drawBitmap(0, 0, skiboot_bitmap, 64, 64, 1);
display.display();
delay(250);
display.setTextColor(WHITE, BLACK);
display.setTextSize(2);
display.setCursor(47, 8);
display.print("Ski");
display.display();
delay(250);
display.setCursor(57, 26);
display.print("Boots");
display.display();
delay(250);
display.setCursor(67, 44);
display.print("Dryer");
display.display();
delay(splash);
screenHome();
}
}
void loop() {
now = rtc.now();
//Full Timestamp
//Serial.println(String("DateTime::TIMESTAMP_FULL:\t")+time.timestamp(DateTime::TIMESTAMP_FULL));
//Date Only
//Serial.println(String("DateTime::TIMESTAMP_DATE:\t")+time.timestamp(DateTime::TIMESTAMP_DATE));
//Full Timestamp
//Serial.println(String("DateTime::TIMESTAMP_TIME:\t")+time.timestamp(DateTime::TIMESTAMP_TIME));
//Serial.print(now.year(), DEC);
//Serial.print('/');
//Serial.print(now.month(), DEC);
//Serial.print('/');
//Serial.print(now.day(), DEC);
//Serial.print(" ");
//Serial.print(now.hour(), DEC);
//Serial.print(':');
//Serial.print(now.minute(), DEC);
//Serial.print(':');
//Serial.print(now.second(), DEC);
//Serial.println();
//Serial.println(dtFormat(now, "%Y %y %L %F %M %n %m %g:%i:%s %a %W %N %D %l %z"));
//Serial.println("\n");
processButtons();
screenTimeoutProcess();
blinkCounter = blinkCounter + 10;
if (blinkCounter > blinkDuration) {
blinkCounter = 0;
blinkState = !blinkState;
}
delay(10);
}
void screenTimeoutProcess() {
if (curentScreen == 0 && !curentState) {
if (lastSecond != now.second()) {
screenHome();
}
} else if (curentScreen == 1 || curentScreen == 2 || curentScreen == 3 || curentScreen == 4 || curentScreen == 50 || curentScreen == 60 || curentScreen == 70 || curentScreen == 8 || curentScreen == 9 || curentScreen == 10 || curentScreen == 11) {
if (millis() > lastClick + screenTimeout) {
screenHome();
}
} else if (curentScreen == 5 && lastBlinkState != blinkState) {
if (millis() > lastClick + screenTimeout) {
screenHome();
} else {
screenDateformat();
}
} else if (curentScreen == 6 && lastBlinkState != blinkState) {
if (millis() > lastClick + screenTimeout) {
screenHome();
} else {
screenTimeformat();
}
} else if (curentScreen == 7 && lastBlinkState != blinkState) {
screenSetDatetime();
}
}