#include "Wire.h" #include #define LED_PIN 5 #define NUM_LEDS 98 #define BRIGHTNESS 64 #define LED_TYPE WS2812 #define COLOR_ORDER GRB #define DS3231_I2C_ADDRESS 0x68 CRGB leds[NUM_LEDS]; CRGB primaryColor = CRGB::White; byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; byte count; // Convert normal decimal numbers to binary coded decimal byte decToBcd(byte val) { return( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return( (val/16*10) + (val%16) ); } void setup() { Wire.begin(); Serial.begin(9600); FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness( BRIGHTNESS ); count = 0; // set the initial time here: // DS3231 seconds, minutes, hours, day, date, month, year //setDS3231time(30,13,0,5,8,11,18); } void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) { // sets time and date data to DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set next input to start at the seconds register Wire.write(decToBcd(second)); // set seconds Wire.write(decToBcd(minute)); // set minutes Wire.write(decToBcd(hour)); // set hours Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday) Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31) Wire.write(decToBcd(month)); // set month Wire.write(decToBcd(year)); // set year (0 to 99) Wire.endTransmission(); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set DS3231 register pointer to 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytes of data from DS3231 starting from register 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void displayTime() { //byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // send it to the serial monitor Serial.print(hour, DEC); // convert the byte variable to a decimal number when displayed Serial.print(":"); if (minute<10) { Serial.print("0"); } Serial.print(minute, DEC); Serial.print(":"); if (second<10) { Serial.print("0"); } Serial.print(second, DEC); Serial.print(" "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" Day of week: "); switch(dayOfWeek){ case 1: Serial.println("Sunday"); break; case 2: Serial.println("Monday"); break; case 3: Serial.println("Tuesday"); break; case 4: Serial.println("Wednesday"); break; case 5: Serial.println("Thursday"); break; case 6: Serial.println("Friday"); break; case 7: Serial.println("Saturday"); break; } } void loop() { displayTime(); // display the real-time clock data on the Serial Monitor, readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); setLeds(); FastLED.show(); delay(1000); // every second } void setLeds(){ clearAllLeds(); /* leds[count] = CRGB::White; count++; if(count == NUM_LEDS) count = 0; */ //byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; setIt(); setIs(); setMinutes(); setHours(); setOclock(); } void clearAllLeds(){ for(int i = 0; i < NUM_LEDS; i++){ leds[i] = CRGB::Black; } } void setIt(){ //if(second & B00000001){ leds[0] = primaryColor; leds[1] = primaryColor; //} } void setIs(){ leds[2] = primaryColor; leds[3] = primaryColor; } void setMinutes(){ if(minute < 3){ //do nothing } else if(minute < 8){ //5 past setFive(); setMinutesLeds(); setPast(); } else if(minute < 13){ //10 past setTen(); setMinutesLeds(); setPast(); } else if(minute < 18){ //Quarter past setQuarter(); setPast(); } else if(minute < 23){ //20 past setTwenty(); setMinutesLeds(); setPast(); } else if(minute < 28){ //25 past setTwenty(); setFive(); setMinutesLeds(); setPast(); } else if(minute < 33){ //half past setHalf(); setPast(); } else if(minute < 38){ //25 to setTwenty(); setFive(); setMinutesLeds(); setTo(); } else if(minute < 43){ //20 to setTwenty(); setMinutesLeds(); setTo(); } else if(minute < 48){ //Quarter to setQuarter(); setTo(); } else if(minute < 53){ //10 to setTen(); setMinutesLeds(); setTo(); } else if(minute < 58){ //5 to setFive(); setMinutesLeds(); setTo(); } else{ //minutes = 58 or 59 //do nothing } } void setFive(){ //five = leds 24-27 for(int i = 24; i < 28; i++){ leds[i] = primaryColor; } } void setTen(){ //ten = leds 4-6 for(int i = 4; i < 7; i++){ leds[i] = primaryColor; } } void setQuarter(){ //Quarter = leds 17-23 for(int i = 17; i < 24; i++){ leds[i] = primaryColor; } } void setTwenty(){ //twenty = leds 11-16 for(int i = 11; i < 17; i++){ leds[i] = primaryColor; } } void setHalf(){ //half = leds 7-10 for(int i = 7; i < 11; i++){ leds[i] = primaryColor; } } void setMinutesLeds(){ //minutes = leds 28-34 for(int i = 28; i < 35; i++){ leds[i] = primaryColor; } } void setPast(){ //past = leds 43-46 for(int i = 43; i < 47; i++){ leds[i] = primaryColor; } } void setTo(){ //to = leds 41-42 for(int i = 41; i < 43; i++){ leds[i] = primaryColor; } } void setHours(){ if(hour > 12) hour = hour-12; if((hour == 1 && minute < 33) || (hour == 12 && minute >= 33) || (hour == 0 && minute >= 33)){ //set 1 for(int i = 38; i < 41; i++){ leds[i] = primaryColor; } } if((hour == 2 && minute < 33) || (hour == 1 && minute >= 33)){ //set 2 for(int i = 35; i < 38; i++){ leds[i] = primaryColor; } } if((hour == 3 && minute < 33) || (hour == 2 && minute >= 33)){ //set 3 for(int i = 47; i < 52; i++){ leds[i] = primaryCo"telemetry.enableTelemetry": falselor; } } if((hour == 4 && minute < 33) || (hour == 3 && minute >= 33)){ //set 4 for(int i = 52; i < 56; i++){ leds[i] = primaryColor; } } if((hour == 5 && minute < 33) || (hour == 4 && minute >= 33)){ //set 5 for(int i = 56; i < 60; i++){ leds[i] = primaryColor; } } if((hour == 6 && minute < 33) || (hour == 5 && minute >= 33)){ //set 6 for(int i = 70; i < 73; i++){ leds[i] = primaryColor; } } if((hour == 7 && minute < 33) || (hour == 6 && minute >= 33)){ //set 7 for(int i = 65; i < 70; i++){ leds[i] = primaryColor; } } if((hour == 8 && minute < 33) || (hour == 7 && minute >= 33)){ //set 8 for(int i = 60; i < 65; i++){ leds[i] = primaryColor; } } if((hour == 9 && minute < 33) || (hour == 8 && minute >= 33)){ //set 9 for(int i = 73; i < 77; i++){ leds[i] = primaryColor; } } if((hour == 10 && minute < 33) || (hour == 9 && minute >= 33)){ //set 10 for(int i = 77; i < 80; i++){ leds[i] = primaryColor; } } if((hour == 11 && minute < 33) || (hour == 10 && minute >= 33)){ //set 11 for(int i = 80; i < 86; i++){ leds[i] = primaryColor; } } if((hour == 12 && minute < 33) || (hour == 11 && minute >= 33)||(hour == 0 && minute < 33)){ //set 12 for(int i = 92; i < 98; i++){ leds[i] = primaryColor; } } } void setOclock(){ if((minute < 3) || (minute >= 58)){ for(int i = 86; i < 92; i++){ leds[i] = primaryColor; } } }