| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- #include "Wire.h"
- #include <FastLED.h>
- #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<LED_TYPE, LED_PIN, COLOR_ORDER>(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;
- }
- }
- }
|