#include <Wire.h>
#include <DS3231.h>
#include <TM1637Display.h>
#include <OneButton.h>
#include <Encoder.h>
// Definice pinů
#define LIGHT_SENSOR A6
#define DISPLAY_CLK 3
#define DISPLAY_DIO 2
#define ROTARY_S1 5
#define ROTARY_S2 4
#define ROTARY_KEY 6
#define BUZZER 7
#define ALARM_COUNT 3
DS3231 rtc;
TM1637Display display(DISPLAY_CLK, DISPLAY_DIO);
OneButton button(ROTARY_S2, true);
Encoder myEnc(ROTARY_S1, ROTARY_KEY);
byte LED_BRIGHT;
int LIGHT;
bool debug = true;
long oldPosition = -999;
long newPosition;
int timeToSet;
signed char TimeMode = 0; //mode casu::0 = display,1 = set time hours,2 = set time minutes,3 = set alarm hours,4 = set alarm minutes
int AlarmMinutes = -1; //-1 = neulozeno
int AlarmHours = -1; //-1 = neulozeno
byte alarmDay;
byte alarmHour;
byte alarmHourNew;
byte alarmMinute;
byte alarmMinuteNew;
byte alarmSecond;
byte alarmBits;
bool alarmDayIsDay;
bool alarmH12;
bool alarmPM;
void LongClickHandler() {
if (debug) {
Serial.println("DEBUG: Hold Detected");}
switch (TimeMode) {
case 0:
TimeMode = 1;
Serial.println("DEBUG: 0 > 1");
break;
case 1:
//alarmHourNew = newPosition;
Serial.println("DEBUG: 1");
break;
case 2:
//alarmMinuteNew= newPosition;
Serial.println("DEBUG: 2");
case 3:
return;
case 4:
return;
}
}
void setup() {
Wire.begin();
if (debug) {
Serial.begin(9600);
Serial.println("DEBUG MODE ENABLED");
}
TimeMode = 0;
pinMode(ROTARY_S2, INPUT_PULLUP);
pinMode(BUZZER, OUTPUT);
rtc.setClockMode(false);
alarmDay = rtc.getDate();
alarmHour = rtc.getHour(alarmH12, alarmPM);
alarmMinute = rtc.getMinute();
alarmSecond = INTF0;
alarmBits = 0b00001110;
alarmDayIsDay = false;
button.setPressMs(3000);
button.attachLongPressStart(LongClickHandler);
Serial.println("DEBUG: Setup Completed");
}
void loop() {
button.tick();
newPosition = myEnc.read() / 2;
if (newPosition != oldPosition) {
oldPosition = newPosition;
timeToSet = map(newPosition,0,24,0,24);
Serial.println(timeToSet); //encoder veci lul
}
LIGHT = analogRead(LIGHT_SENSOR);
LED_BRIGHT = map(LIGHT, 100, 700, 1, 7);
display.setBrightness(LED_BRIGHT);
switch (TimeMode) {
case 0:
display.showNumberDecEx(alarmHour * 100 + alarmMinute, 0b11100000, true);
break;
case 1:
alarmHourNew = timeToSet;
display.showNumberDecEx(alarmHourNew * 100 + alarmMinuteNew, 0b11100000, true);
break;
case 2:
alarmMinuteNew = timeToSet;
break;
case 3:
break;
case 4:
break;
}
}