#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "ds1307.h"
#include "encoder.h"
// ----- OLED ----------
#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)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
// menu
uint8_t _currentDashboard = 1;
uint8_t _menuShow = 0;
void dashboardClock(void){
display.clearDisplay();
// display.setCursor(10,2);
// display.setTextSize(1);
// display.print(getWeek(tm.wday));
display.setCursor(15,25);
display.setTextSize(3);
display.setTextColor(SSD1306_WHITE);
display.print(clockToStringFromDigit(tm.hours) + ":" + clockToStringFromDigit(tm.minutes));
display.setTextSize(1);
display.print(clockToStringFromDigit(tm.seconds));
display.setCursor(3,53);
display.setTextSize(1);
display.print(getWeek(tm.wday));
display.print(" ");
display.print(clockToStringFromDigit(tm.mday) + "." + clockToStringFromDigit(tm.month) + ".20" + clockToStringFromDigit(tm.year));
display.display();
}
void dashboardTemp(){
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.println("dat1 = 20 C");
display.println("dat2 = 30 C");
display.println("dat3 = 10 C");
display.display();
}
void currentDashboard(){
if(_menuShow == 1){
return;
}
if(encoderCounter > encoderDefaultCounter){
_currentDashboard ++;
encoderCounter = encoderDefaultCounter;
}else if(encoderCounter < encoderDefaultCounter){
_currentDashboard --;
encoderCounter = encoderDefaultCounter;
}
if(_currentDashboard < 1){
_currentDashboard = 1;
}
if(_currentDashboard > 2){
_currentDashboard = 2;
}
if(_currentDashboard == 1){
dashboardClock();
}else if(_currentDashboard == 2){
dashboardTemp();
}
}
void setup() {
Serial.begin(9600);
Serial.println(F("setup"));
Wire.begin();
delay(100); // Pause for 2 seconds
beginDS1307();
beginEncoder();
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.clearDisplay();
// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
display.display();
delay(2000); // Pause for 2 seconds
}
void testdrawline() {
int16_t i;
display.clearDisplay(); // Clear display buffer
for(i=0; i<display.width(); i+=4) {
display.drawLine(0, 0, i, display.height()-1, SSD1306_WHITE);
display.display(); // Update screen with each newly-drawn line
delay(1);
}
for(i=0; i<display.height(); i+=4) {
display.drawLine(0, 0, display.width()-1, i, SSD1306_WHITE);
display.display();
delay(1);
}
delay(250);
display.clearDisplay();
for(i=0; i<display.width(); i+=4) {
display.drawLine(0, display.height()-1, i, 0, SSD1306_WHITE);
display.display();
delay(1);
}
for(i=display.height()-1; i>=0; i-=4) {
display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE);
display.display();
delay(1);
}
delay(250);
display.clearDisplay();
for(i=display.width()-1; i>=0; i-=4) {
display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE);
display.display();
delay(1);
}
for(i=display.height()-1; i>=0; i-=4) {
display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE);
display.display();
delay(1);
}
delay(250);
display.clearDisplay();
for(i=0; i<display.height(); i+=4) {
display.drawLine(display.width()-1, 0, 0, i, SSD1306_WHITE);
display.display();
delay(1);
}
for(i=0; i<display.width(); i+=4) {
display.drawLine(display.width()-1, 0, i, display.height()-1, SSD1306_WHITE);
display.display();
delay(1);
}
delay(2000); // Pause for 2 seconds
}
void testdrawstyles(void) {
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,0); // Start at top-left corner
display.println(F("Hello, world!"));
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text
display.println(3.141592);
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.print(F("0x")); display.println(0xDEADBEEF, HEX);
display.setTextSize(4); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.print(F("4x"));
display.display();
delay(4000);
}
void loop() {
static uint32_t rebootTimerC = millis();
static uint32_t rebootTimer = millis();
readEncoder();
if(millis() - rebootTimer >= 500){
rebootTimer = millis();
// --------
readDS1307();
}
if(millis() - rebootTimerC >= 500){
rebootTimerC = millis();
currentDashboard();
// --------
Serial.println("Encoder " + String((uint16_t)encoderCounter));
// Serial.println("Encoder SW" + String((bool)encoderSw));
// Serial.println("clock " + String((uint8_t)tm.hours) + ":" + String((uint8_t)tm.minutes) + ":" + String((uint8_t)tm.seconds));
// Serial.println("clock " + String((uint8_t)tm.wday)); // tm.wday, tm.mday, tm.month, tm.year
// Serial.println("clock " + String((uint8_t)tm.mday) + "-" + String((uint8_t)tm.month) + "-" + String((uint8_t)tm.year));
}
// long newPosition = encoder.getCount() / 2;
// Serial.println(newPosition);
//testdrawstyles();
//testdrawline();
// beginDS1307();
if(encoderSw){
Serial.println("Encoder SW click");
}
// delay(2000); // Pause for 2 seconds
resetEncoderBtn();
}