Files
Alarm_Clock/Wecker/Wecker.ino
Christian Mittring 9d75a64173 First Commit
2018-04-01 12:29:12 +02:00

165 lines
4.0 KiB
C++

#include <math.h>
#include <SPI.h>
#include "LedMatrix.h"
#include <DS3231.h>
#include <EEPROM.h>
//RealTimeClock
RTClib RTC;
DS3231 Clock;
//Display
#define NUMBER_OF_DEVICES 4
#define CS_PIN 10
LedMatrix ledMatrix = LedMatrix(NUMBER_OF_DEVICES, CS_PIN);
//ConfigData (Name and Pin-Numbers)
const String NodeName = "Wecker";
//Pin Taster
const int pinTime = 2; //Pin fuer Toggle_Power und Einstellen der Uhrzeit (Lang)
const int pinSet = 3; //Pin fuer Sleep und Zeit_Einstellung im Alarm/Time Set Mode
const int pinAlarm = 4; //Pin fuer Alarm An/Aus und setzen der Alarmzeiten (Lang)
const int pinInput = 5; //Pin für die Eingangswahl
const int pinSleep = 6; //Pin Unbenutzt
//Pin Relay
const int outInput = 7;
const int outPower = 8;
//For Summertime change notification (change alarmtime) this should be saved in the EEPROM!
bool summer = false;
//Alarm
int al1h = 0;
int al1m = 0;
int al2h = 0;
int al2m = 0;
unsigned long time_on = -1;
int minutes_sleep = -1;
//Current Date and Time from RTC
int h = 0;
int m = 0;
int s = 0;
int d = 0;
int M = 0;
int y = 0;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
String dow = "-";
int setItem = 0;
long block_gui = -1;
unsigned long previousMillis = 0;
void setup() {
Serial.begin(115200);
delay(10);
Wire.begin();
//Setup Display
ledMatrix.init();
ledMatrix.setTextAlignment(0);
ledMatrix.setRotation(true);
ledMatrix.setIntensity(0);
display_text("U");
delay(400);
display_text("Uh");
delay(400);
display_text("Uhr");
delay(400);
display_text("Uhr");
delay(500);
//restore data
get_eeprom();
//Pin Setup
pinMode(pinTime, INPUT_PULLUP); // set pin to input
digitalWrite(pinTime, HIGH); // turn on pullup resistors
pinMode(pinSet, INPUT_PULLUP); // set pin to input
digitalWrite(pinSet, HIGH); // turn on pullup resistors
pinMode(pinAlarm, INPUT_PULLUP); // set pin to input
digitalWrite(pinAlarm, HIGH); // turn on pullup resistors
pinMode(pinInput, INPUT_PULLUP); // set pin to input
digitalWrite(pinInput, HIGH); // turn on pullup resistors
pinMode(pinSleep, INPUT_PULLUP); // set pin to input
digitalWrite(pinSleep, HIGH); // turn on pullup resistors
pinMode(outPower, OUTPUT); // set pin to input
digitalWrite(outPower, HIGH); // turn on pullup resistors
pinMode(outInput, OUTPUT); // set pin to input
digitalWrite(outInput, HIGH); // turn on pullup resistors
delay(500);
//Set Alarm Times
DateTime now = RTC.now();
d = now.day();
M = now.month();
y = now.year();
h = now.hour(); //24-hr
byte A1Day, A1Hour, A1Minute, A1Second, AlarmBits;
bool A1Dy, A1h12, A1PM;
Clock.getA1Time(A1Day, A1Hour, A1Minute, A1Second, AlarmBits, A1Dy, A1h12, A1PM);
if (summer)
{
al1h = A1Hour + 1;
}
else{
al1h = A1Hour;
}
al1m = A1Minute;
Serial.println("Alarm1 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", ");
Clock.getA2Time(A1Day, A1Hour, A1Minute, AlarmBits, A1Dy, A1h12, A1PM);
if (summer)
{
al2h = A1Hour + 1;
}
else{
al2h = A1Hour;
}
al2m = A1Minute;
Serial.println("Alarm2 Set:" + String(A1Day) + ", " + String(A1Hour) + ", " + String(A1Minute) + ", " + String(AlarmBits) + ", " + String(A1Dy) + ", " + String(A1h12) + ", ");
delay(1000);
previousMillis = millis();
}
void loop() {
unsigned long currentMillis = millis();
unsigned long intervall = currentMillis - previousMillis;
release_gui(currentMillis);
// put your main code here, to run repeatedly:
if(setItem == 0){
update_Time();
run_alarm();
if (block_gui < 0)
show_current_time(intervall,currentMillis);
}
else{
show_time_infos(intervall,currentMillis);
previousMillis = currentMillis;
}
test_pin();
handleSleep(intervall, currentMillis);
delay(80);
}