//#include <iarduino_RTC.h>
//iarduino_RTC time(RTC_DS1302,12,10,11);
#include <DS3232RTC.h>
#include <Time.h>
#include <Wire.h>
#include "FastLED.h"
#define NUM_LEDS 114 // Number of LED controles (remember I have 3 leds / controler
#define COLOR_ORDER GRB // Define color order for your strip
#define DATA_PIN 6 // Data pin for led comunication
CRGB leds[NUM_LEDS]; // Define LEDs strip
byte digits[12][28] = {{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // Digit 0
{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1}, // Digit 1
{1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0}, // Digit 2
{1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}, // Digit 3
{1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1}, // Digit 4
{1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1}, // Digit 5
{1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // Digit 6
{0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1}, // Digit 7
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // Digit 8
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1}, // Digit 9 | Массив числе на 7 сегментах
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0}, // Digit *0
{0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0}}; // Digit C
/*
byte firstdigit[2][12] = {{0,0,0,0,0,0,0,0,0,0,0,0}, // Digit 0 first number
{1,1,1,1,1,1,1,1,1,1,1,1}}; // Digit 1 first number | 2D Array for numbers on 7 segment
*/
bool Dot = true; //Dot state
bool DST = false; //DST state
long ledColor = 0x0000ff; // Color used (in hex)
void setup(){
Serial.begin(9600);
//time.begin();
//time.settime(0,20,19,26,12,18,3); // 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
Wire.begin();
LEDS.addLeds<WS2812B, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS); // Set LED strip type
LEDS.setBrightness(40); // Set initial brightness
//pinMode(2, INPUT_PULLUP); // Define DST adjust button pin
pinMode(4, INPUT_PULLUP); // Define Minutes adjust button pin
pinMode(5, INPUT_PULLUP); // Define Hours adjust button pin
}
// Check Light sensor and set brightness accordingly
void BrightnessCheck(){
const byte sensorPin = 3; // light sensor pin
const byte brightnessLow = 40; // Low brightness value
const byte brightnessHigh = 100; // High brightness value
int sensorValue = digitalRead(sensorPin); // Read sensor
if (sensorValue == 0) {
//Serial.println("Brightness High");
LEDS.setBrightness(brightnessHigh);
}
else {
//Serial.println("Brightness Low");
LEDS.setBrightness(brightnessLow);
}
};
// Get time in a single number
int GetTime(){
tmElements_t Now;
RTC.read(Now);
int hour=Now.Hour;
if (DST) { if (hour==24) {hour=1;}
else {hour += 1;}
};
if (hour>12 ){hour -= 12;};
int minutes=Now.Minute;
int second =Now.Second;
if (second % 2==0) {Dot = false;}
else {Dot = true;};
return (hour*100+minutes);
};
void DSTcheck(){
int buttonDST = digitalRead(2);
Serial.print("DST is: ");Serial.println(DST);
if (buttonDST == LOW){
if (DST){
DST=false;
Serial.print("Switching DST to: ");Serial.println(DST);
}
else if (!DST){
DST=true;
Serial.print("Switching DST to: ");Serial.println(DST);
};
delay(500);
};
}
// Convert time to array needet for display
void TimeToArray(){
int Now = GetTime(); // Get time
int cursor = 114;
Serial.print("Time is: ");Serial.println(Now);
if (Dot)
{leds[56]=ledColor;leds[57]=ledColor;}
else
{leds[56]=0x000000;leds[57]=0x000000;};
for(int i=1;i<=4;i++){
int digit = Now % 10; // get last digit in time
if (i==1){
cursor =86;
//Serial.print("Digit 4 is : ");Serial.print(digit);Serial.print(", the array is : ");
for(int k=0; k<=27;k++){
//Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}
else if (i==2){
cursor =58;
//Serial.print("Digit 3 is : ");Serial.print(digit);Serial.print(", the array is : ");
for(int k=0; k<=27;k++){
//Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}
else if (i==3){
cursor =28;
//Serial.print("Digit 2 is : ");Serial.print(digit);Serial.print(", the array is : ");
for(int k=0; k<=27;k++){
//Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
}
else if (i==4){
cursor =0;
//Serial.print("Digit 1 is : ");Serial.print(digit);Serial.print(", the array is : ");
for(int k=0; k<=27;k++){
//Serial.print(digits[digit][k]);
if (digits[digit][k]== 1){leds[cursor]=ledColor;}
else if (digits[digit][k]==0){leds[cursor]=0x000000;};
cursor ++;
};
Serial.println();
};
Now /= 10;
};
};
void TimeAdjust(){
int buttonH = digitalRead(5);
//Serial.print("Hour");
//Serial.println(buttonH);
int buttonM = digitalRead(4);
//Serial.print("Minutes");
//Serial.println(buttonH);
if (buttonH == LOW || buttonM == LOW){
delay(500);
tmElements_t Now;
RTC.read(Now);
int hour=Now.Hour;
int minutes=Now.Minute;
if (buttonH == LOW){
if (Now.Hour== 24){Now.Hour=1;}
else {Now.Hour += 1;};
}else {
if (Now.Minute== 59){Now.Minute=0;}
else {Now.Minute += 1;};
};
RTC.write(Now);
}
}
void loop() // Main loop
{
BrightnessCheck(); // Check brightness
//DSTcheck(); // Check DST
TimeAdjust(); // Check to se if time is geting modified
TimeToArray(); // Get leds array with required configuration
FastLED.show(); // Display leds array
}