#include <FastLED.h>
#include <TinyWireM.h>
byte read_DS3231[7];
unsigned long millisCapture = millis(), myDelay = 30000;
boolean colon_ONOFF = false;
#define LED_PIN 4
#define NUM_LEDS 32
#define BRIGHTNESS 255
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
uint8_t gHue = 0;
int num_0[] = {2, 3, 5, 6, 7, 8};
int num_1[] = {3, 5};
int num_2[] = {2, 4, 5, 6, 8};
int num_3[] = {2, 3, 4, 5, 6};
int num_4[] = {3, 4, 5, 7};
int num_5[] = {2, 3, 4, 6, 7};
int num_6[] = {2, 3, 4, 6, 7, 8};
int num_7[] = {3, 5, 6};
int num_8[] = {2, 3, 4, 5, 6, 7, 8};
int num_9[] = {2, 3, 4, 5, 6, 7};
int num_10[] = {10, 11};
int* digit[10] = {num_0, num_1, num_2, num_3, num_4, num_5, num_6, num_7, num_8, num_9};
int digit_size[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int bloom_sequence[32] = {17, 16, 14, 19, 15, 21, 13, 18, 11, 20, 9, 22, 12, 24, 10, 23, 7, 26, 8, 28, 6, 25, 4, 27, 2, 29, 5, 31, 3, 30, 1, 0};
void setup() {
TinyWireM.begin();
FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
FastLED.setBrightness(BRIGHTNESS);
FastLED.clear();
}
void loop() {
//write to set pointer register to seconds
//-----------------------------------------
TinyWireM.beginTransmission(0x68);
TinyWireM.send(0x00); //point to Seconds register
TinyWireM.endTransmission();
//----------
//read time
//----------
TinyWireM.requestFrom(0x68, 3);
if(TinyWireM.available())
{
read_DS3231[0] = TinyWireM.receive(); //read seconds
read_DS3231[1] = TinyWireM.receive(); //read minutes
read_DS3231[2] = TinyWireM.receive(); //read hours
}
int minute = read_DS3231[1];
int hour = read_DS3231[2];
minute = (minute%16) + (minute/16)*10 ;
hour = (hour%16) + (hour/16)*10 ;
char period = hour>11?'P':'A';
hour = hour>11?hour-12:hour;
//minute = minute - 12;
//hour = hour - 6;
static uint8_t startIndex = 0;
startIndex = startIndex + 1;
int* m0 = digit[minute%10];
int m0_size = digit_size[minute%10];
int* m1 = digit[minute/10];
int m1_size = digit_size[minute/10];
int* h0 = digit[hour%10];
int h0_size = digit_size[hour%10];
int* h1 = digit[hour/10];
int h1_size = digit_size[hour/10];
int print_digit_size =1+ m0_size + m1_size + 2 + h0_size + h1_size;
int print_digit[print_digit_size];
print_digit[0] = period=='A'?1:0;
for(int i=0; i<m0_size; i++){
print_digit[1+i] = m0[i];
}
for(int i=0; i<m1_size; i++){
print_digit[1+m0_size+i] = m1[i] + 7;
}
print_digit[1+m0_size+m1_size] = 16;
print_digit[1+m0_size+m1_size+1] = 17;
for(int i=0; i<h0_size; i++){
print_digit[1+m0_size+m1_size+2+i] = h0[i] + 16;
}
for(int i=0; i<h1_size; i++){
print_digit[1+m0_size+m1_size+2+h0_size+i] = h1[i] + 23;
}
// int digit_to_print[print_digit_size];
// int itr = 0;
// for(int i=0; i<32 ; i++){
// for(int j=0; j<print_digit_size; j++){
// if(bloom_sequence[i]==print_digit[j]){
// digit_to_print[itr] = bloom_sequence[i];
// itr++;
// break;
// }
// }
// }
show_digit(print_digit, print_digit_size, startIndex);
FastLED.show();
FastLED.delay(750/60);
FastLED.clear();
}
void show_digit(int digit_array[], int array_size, uint8_t colorIndex){
for(int i=0; i<array_size; i++){
int index = digit_array[i];
leds[index] = ColorFromPalette( RainbowColors_p, colorIndex, BRIGHTNESS, LINEARBLEND);
colorIndex += 3;
}
}