Creating Arduino Word Clock
Display your time with Colorful Words
Components and supplies
1
Arduino Nano R3
1
High Accuracy Pi RTC (DS3231)
1
LED strip WS2811 30LED/m 5v
Apps and platforms
1
Arduino IDE
Project description
Code
WordClock - displaying word representation of time on the 8x8 letter matrix
arduino
1#include <Wire.h> 2#include <DS3231.h> 3#include <FastLED.h> 4 5#define LED_PIN 5 6#define NUM_LEDS 64 7#define BRIGHTNESS 80 8#define LED_TYPE WS2811 9#define COLOR_ORDER GRB 10CRGB leds[NUM_LEDS]; 11 12DS3231 clock; 13RTCDateTime dt; 14 15int minutes; 16int hours; 17int CurrentTime[4]; 18int PreviousTime[4]; 19int ColorMinutes; 20int ColorPastTo; 21int ColorHour; 22 23int Time_Comp[19][7]{ {62,59,56,99,99,99,99}, 24 {48,49,62,99,99,99,99}, 25 {44,43,42,41,40,99,99}, 26 {63,62,61,60,99,99,99}, 27 {32,33,34,35,99,99,99}, 28 {47,46,45,99,99,99,99}, 29 {47,52,53,54,55,99,99}, 30 {35,36,37,38,39,99,99}, 31 {59,58,57,56,99,99,99}, 32 {39,40,55,99,99,99,99}, 33 {50,51,52,53,54,55,99}, 34 {48,49,50,51,53,54,99}, 35 {30,29,28,27,99,99,99}, 36 {27,26,99,99,99,99,99}, 37 {16,17,18,19,99,99,99}, 38 { 1, 3, 4,99,99,99,99}, 39 {15,14,13,12,11,10, 9}, 40 { 1, 2, 3, 4, 5, 6,99}, 41 {20,21,22,23,99,99,99}}; 42 43 44CRGB Colors[11]{CRGB::Chartreuse,CRGB::Orange,CRGB::BlueViolet,CRGB::Red,CRGB::Cyan,CRGB::Pink, 45 CRGB::Green,CRGB::Purple,CRGB::Yellow,CRGB::White,CRGB::Blue}; 46 47 48void LitAll(){ 49 for(int i=0;i<=80;i++){ 50 LEDS.setBrightness(i); 51 FastLED.show(); 52 delay(120-i); 53 } 54} 55 56void DimAll(){ 57 for(int i=80;i>=0;i--){ 58 LEDS.setBrightness(i); 59 FastLED.show(); 60 delay(60); 61 } 62} 63 64void setup() { 65 Serial.begin(9600); 66 clock.begin(); 67 //clock.setDateTime(__DATE__, __TIME__); 68 delay( 3000 ); // power-up safety delay 69 FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); 70 FastLED.setBrightness( BRIGHTNESS ); 71 72} 73 74void loop(){ 75 76 PreviousTime[0]=CurrentTime[0]; 77 PreviousTime[1]=CurrentTime[1]; 78 PreviousTime[2]=CurrentTime[2]; 79 PreviousTime[3]=CurrentTime[3]; 80 81 dt = clock.getDateTime(); 82 minutes=int((dt.minute)/5)*5; 83 if (minutes<35 and minutes>=0) hours=dt.hour ;else hours=dt.hour+1 ; 84 if (minutes==0) {CurrentTime[0]=99;CurrentTime[1]=99;} 85 if ((minutes==5) or (minutes==55)) {CurrentTime[0]=14;CurrentTime[1]=99;} 86 if ((minutes==10) or (minutes==50)) {CurrentTime[0]=15;CurrentTime[1]=99;} 87 if ((minutes==15) or (minutes==45)) {CurrentTime[0]=16;CurrentTime[1]=99;} 88 if ((minutes==20) or (minutes==40)) {CurrentTime[0]=17;CurrentTime[1]=99;} 89 if ((minutes==25) or (minutes==35)) {CurrentTime[0]=17;CurrentTime[1]=14;} 90 if (minutes==30) {CurrentTime[0]=18;CurrentTime[1]=99;} 91 if (minutes>= 5 and minutes<35) CurrentTime[2]=12; 92 if (minutes>=35 and minutes<=59) CurrentTime[2]=13; 93 if (minutes==0) CurrentTime[2]=99; 94 CurrentTime[3]=hours - int(hours/12)*12-1; 95 if (CurrentTime[3]<0) CurrentTime[3]=CurrentTime[3]+12; 96 97 if (PreviousTime[0]!=CurrentTime[0]or PreviousTime[1]!=CurrentTime[1]) { 98 99 DimAll(); 100 delay(2000); 101 102 if (PreviousTime[0]!=99) for (int j=0;j<7;j++) leds[Time_Comp[PreviousTime[0]][j]]=CHSV( 0 , 0, 0); 103 if (PreviousTime[1]!=99) for (int j=0;j<7;j++) leds[Time_Comp[PreviousTime[1]][j]]=CHSV( 0 , 0, 0); 104 if (PreviousTime[2]!=99) for (int j=0;j<7;j++) leds[Time_Comp[PreviousTime[2]][j]]=CHSV( 0 , 0, 0); 105 if (PreviousTime[3]!=99) for (int j=0;j<7;j++) leds[Time_Comp[PreviousTime[3]][j]]=CHSV( 0 , 0, 0); 106 107 ColorMinutes=random(0,10); 108 if (CurrentTime[0]!=99) for (int j=0;j<7;j++) leds[Time_Comp[CurrentTime[0]][j]]=Colors[ColorMinutes]; 109 if (CurrentTime[1]!=99) for (int j=0;j<7;j++) leds[Time_Comp[CurrentTime[1]][j]]=Colors[ColorMinutes]; 110 111 ColorPastTo=random(0,10); 112 while (ColorPastTo==ColorMinutes){ 113 ColorPastTo=random(0,10); 114 } 115 if (CurrentTime[2]!=99) for (int j=0;j<7;j++) leds[Time_Comp[CurrentTime[2]][j]]=Colors[ColorPastTo]; 116 117 ColorHour=random(0,10); 118 while ( ColorHour==ColorPastTo or ColorHour==ColorMinutes ){ 119 ColorHour=random(0,10); 120 } 121 for (int j=0;j<7;j++) leds[Time_Comp[CurrentTime[3]][j]]=Colors[ColorHour]; 122 //FastLED.show(); 123 LitAll(); 124 125 } 126}
Displaying Word representation current time in Serial Monitor
arduino
1 2#include <Wire.h> 3#include <DS3231.h> 4 5 6DS3231 clock; 7RTCDateTime dt; 8int dtminutes=30; 9int dthours=22; 10int minutes; 11int hours; 12int CurrentTime[4]; 13 14String Time_Comp[19]{ "ONE", 15 "TWO", 16 "THREE", 17 "FOUR", 18 "FIVE", 19 "SIX", 20 "SEVEN", 21 "EIGHT", 22 "NINE", 23 "TEN", 24 "ELEVEN", 25 "TWELVE", 26 "PAST", 27 "TO", 28 "FIVE", 29 "TEN", 30 "QUARTER", 31 "TWENTY", 32 "HALF"}; 33void setup() { 34 Serial.begin(9600); 35 clock.begin(); 36 clock.setDateTime(__DATE__, __TIME__); 37} 38void loop() { 39 dt = clock.getDateTime(); 40 minutes=int((dt.minute)/5)*5; 41 if (minutes<35 and minutes>=0) hours=dt.hour ;else hours=dt.hour+1 ; 42 if (minutes==0) {CurrentTime[0]=99;CurrentTime[1]=99;} 43 if ((minutes==5) or (minutes==55)) {CurrentTime[0]=14;CurrentTime[1]=99;} 44 if ((minutes==10) or (minutes==50)) {CurrentTime[0]=15;CurrentTime[1]=99;} 45 if ((minutes==15) or (minutes==45)) {CurrentTime[0]=16;CurrentTime[1]=99;} 46 if ((minutes==20) or (minutes==40)) {CurrentTime[0]=17;CurrentTime[1]=99;} 47 if ((minutes==25) or (minutes==35)) {CurrentTime[0]=17;CurrentTime[1]=14;} 48 if (minutes==30) {CurrentTime[0]=18;CurrentTime[1]=99;} 49 if (minutes>= 5 and minutes<35) CurrentTime[2]=12; 50 if (minutes>=35 and minutes<=59) CurrentTime[2]=13; 51 if (minutes==0) CurrentTime[2]=99; 52 CurrentTime[3]=hours - int(hours/12)*12-1; 53 Serial.print(dt.hour); 54 Serial.print(":"); 55 Serial.print(dt.minute); 56 Serial.print("-"); 57 Serial.print(hours); 58 Serial.print(":"); 59 Serial.print(minutes); 60 Serial.print("-"); 61 if (CurrentTime[0]!=99) {Serial.print(Time_Comp[CurrentTime[0]]);Serial.print(" ");} 62 if (CurrentTime[1]!=99) {Serial.print(Time_Comp[CurrentTime[1]]);Serial.print(" ");} 63 if (CurrentTime[2]!=99) {Serial.print(Time_Comp[CurrentTime[2]]);Serial.print(" ");} 64 Serial.println(Time_Comp[CurrentTime[3]]); 65 delay(1000); 66}
Displaying Word representation current time in Serial Monitor
arduino
1 2#include <Wire.h> 3#include <DS3231.h> 4 5 6DS3231 clock; 7RTCDateTime 8 dt; 9int dtminutes=30; 10int dthours=22; 11int minutes; 12int hours; 13int 14 CurrentTime[4]; 15 16String Time_Comp[19]{ "ONE", 17 "TWO", 18 19 "THREE", 20 "FOUR", 21 "FIVE", 22 23 "SIX", 24 "SEVEN", 25 "EIGHT", 26 27 "NINE", 28 "TEN", 29 "ELEVEN", 30 31 "TWELVE", 32 "PAST", 33 34 "TO", 35 "FIVE", 36 "TEN", 37 38 "QUARTER", 39 "TWENTY", 40 "HALF"}; 41void 42 setup() { 43 Serial.begin(9600); 44 clock.begin(); 45 clock.setDateTime(__DATE__, 46 __TIME__); 47} 48void loop() { 49 dt = clock.getDateTime(); 50 minutes=int((dt.minute)/5)*5; 51 52 if (minutes<35 and minutes>=0) hours=dt.hour ;else hours=dt.hour+1 ; 53 if (minutes==0) 54 {CurrentTime[0]=99;CurrentTime[1]=99;} 55 if ((minutes==5) 56 or (minutes==55)) {CurrentTime[0]=14;CurrentTime[1]=99;} 57 if ((minutes==10) 58 or (minutes==50)) {CurrentTime[0]=15;CurrentTime[1]=99;} 59 if ((minutes==15) 60 or (minutes==45)) {CurrentTime[0]=16;CurrentTime[1]=99;} 61 if ((minutes==20) 62 or (minutes==40)) {CurrentTime[0]=17;CurrentTime[1]=99;} 63 if ((minutes==25) 64 or (minutes==35)) {CurrentTime[0]=17;CurrentTime[1]=14;} 65 if (minutes==30) 66 {CurrentTime[0]=18;CurrentTime[1]=99;} 67 if (minutes>= 68 5 and minutes<35) CurrentTime[2]=12; 69 if (minutes>=35 and minutes<=59) CurrentTime[2]=13; 70 71 if (minutes==0) CurrentTime[2]=99; 72 CurrentTime[3]=hours - int(hours/12)*12-1; 73 74 Serial.print(dt.hour); 75 Serial.print(":"); 76 Serial.print(dt.minute); 77 78 Serial.print("-"); 79 Serial.print(hours); 80 Serial.print(":"); 81 Serial.print(minutes); 82 83 Serial.print("-"); 84 if (CurrentTime[0]!=99) {Serial.print(Time_Comp[CurrentTime[0]]);Serial.print(" 85 ");} 86 if (CurrentTime[1]!=99) {Serial.print(Time_Comp[CurrentTime[1]]);Serial.print(" 87 ");} 88 if (CurrentTime[2]!=99) {Serial.print(Time_Comp[CurrentTime[2]]);Serial.print(" 89 ");} 90 Serial.println(Time_Comp[CurrentTime[3]]); 91 delay(1000); 92}
WordClock - displaying word representation of time on the 8x8 letter matrix
arduino
1#include <Wire.h> 2#include <DS3231.h> 3#include <FastLED.h> 4 5#define 6 LED_PIN 5 7#define NUM_LEDS 64 8#define BRIGHTNESS 80 9#define LED_TYPE 10 WS2811 11#define COLOR_ORDER GRB 12CRGB leds[NUM_LEDS]; 13 14DS3231 clock; 15RTCDateTime 16 dt; 17 18int minutes; 19int hours; 20int CurrentTime[4]; 21int PreviousTime[4]; 22int 23 ColorMinutes; 24int ColorPastTo; 25int ColorHour; 26 27int Time_Comp[19][7]{ 28 {62,59,56,99,99,99,99}, 29 {48,49,62,99,99,99,99}, 30 {44,43,42,41,40,99,99}, 31 32 {63,62,61,60,99,99,99}, 33 {32,33,34,35,99,99,99}, 34 35 {47,46,45,99,99,99,99}, 36 {47,52,53,54,55,99,99}, 37 38 {35,36,37,38,39,99,99}, 39 {59,58,57,56,99,99,99}, 40 41 {39,40,55,99,99,99,99}, 42 {50,51,52,53,54,55,99}, 43 44 {48,49,50,51,53,54,99}, 45 {30,29,28,27,99,99,99}, 46 47 {27,26,99,99,99,99,99}, 48 {16,17,18,19,99,99,99}, 49 50 { 1, 3, 4,99,99,99,99}, 51 {15,14,13,12,11,10, 52 9}, 53 { 1, 2, 3, 4, 5, 6,99}, 54 {20,21,22,23,99,99,99}}; 55 56 57CRGB 58 Colors[11]{CRGB::Chartreuse,CRGB::Orange,CRGB::BlueViolet,CRGB::Red,CRGB::Cyan,CRGB::Pink, 59 60 CRGB::Green,CRGB::Purple,CRGB::Yellow,CRGB::White,CRGB::Blue}; 61 62 63void 64 LitAll(){ 65 for(int i=0;i<=80;i++){ 66 LEDS.setBrightness(i); 67 FastLED.show(); 68 69 delay(120-i); 70 } 71} 72 73void DimAll(){ 74 for(int i=80;i>=0;i--){ 75 76 LEDS.setBrightness(i); 77 FastLED.show(); 78 delay(60); 79 } 80} 81 82void 83 setup() { 84 Serial.begin(9600); 85 clock.begin(); 86 //clock.setDateTime(__DATE__, 87 __TIME__); 88 delay( 3000 ); // power-up safety delay 89 FastLED.addLeds<LED_TYPE, 90 LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip ); 91 FastLED.setBrightness( 92 BRIGHTNESS ); 93 94} 95 96void loop(){ 97 98 PreviousTime[0]=CurrentTime[0]; 99 100 PreviousTime[1]=CurrentTime[1]; 101 PreviousTime[2]=CurrentTime[2]; 102 PreviousTime[3]=CurrentTime[3]; 103 104 105 dt = clock.getDateTime(); 106 minutes=int((dt.minute)/5)*5; 107 if (minutes<35 108 and minutes>=0) hours=dt.hour ;else hours=dt.hour+1 ; 109 if (minutes==0) {CurrentTime[0]=99;CurrentTime[1]=99;} 110 111 if ((minutes==5) or (minutes==55)) {CurrentTime[0]=14;CurrentTime[1]=99;} 112 113 if ((minutes==10) or (minutes==50)) {CurrentTime[0]=15;CurrentTime[1]=99;} 114 115 if ((minutes==15) or (minutes==45)) {CurrentTime[0]=16;CurrentTime[1]=99;} 116 117 if ((minutes==20) or (minutes==40)) {CurrentTime[0]=17;CurrentTime[1]=99;} 118 119 if ((minutes==25) or (minutes==35)) {CurrentTime[0]=17;CurrentTime[1]=14;} 120 121 if (minutes==30) {CurrentTime[0]=18;CurrentTime[1]=99;} 122 123 if (minutes>= 5 and minutes<35) CurrentTime[2]=12; 124 if (minutes>=35 and 125 minutes<=59) CurrentTime[2]=13; 126 if (minutes==0) CurrentTime[2]=99; 127 CurrentTime[3]=hours 128 - int(hours/12)*12-1; 129 if (CurrentTime[3]<0) CurrentTime[3]=CurrentTime[3]+12; 130 131 132 if (PreviousTime[0]!=CurrentTime[0]or PreviousTime[1]!=CurrentTime[1]) { 133 134 135 DimAll(); 136 delay(2000); 137 138 if (PreviousTime[0]!=99) for (int j=0;j<7;j++) 139 leds[Time_Comp[PreviousTime[0]][j]]=CHSV( 0 , 0, 0); 140 if (PreviousTime[1]!=99) 141 for (int j=0;j<7;j++) leds[Time_Comp[PreviousTime[1]][j]]=CHSV( 0 , 0, 0); 142 if 143 (PreviousTime[2]!=99) for (int j=0;j<7;j++) leds[Time_Comp[PreviousTime[2]][j]]=CHSV( 144 0 , 0, 0); 145 if (PreviousTime[3]!=99) for (int j=0;j<7;j++) leds[Time_Comp[PreviousTime[3]][j]]=CHSV( 146 0 , 0, 0); 147 148 ColorMinutes=random(0,10); 149 if (CurrentTime[0]!=99) for 150 (int j=0;j<7;j++) leds[Time_Comp[CurrentTime[0]][j]]=Colors[ColorMinutes]; 151 if 152 (CurrentTime[1]!=99) for (int j=0;j<7;j++) leds[Time_Comp[CurrentTime[1]][j]]=Colors[ColorMinutes]; 153 154 155 ColorPastTo=random(0,10); 156 while (ColorPastTo==ColorMinutes){ 157 158 ColorPastTo=random(0,10); 159 } 160 if (CurrentTime[2]!=99) for (int j=0;j<7;j++) 161 leds[Time_Comp[CurrentTime[2]][j]]=Colors[ColorPastTo]; 162 163 ColorHour=random(0,10); 164 165 while ( ColorHour==ColorPastTo or ColorHour==ColorMinutes ){ 166 ColorHour=random(0,10); 167 168 } 169 for (int j=0;j<7;j++) leds[Time_Comp[CurrentTime[3]][j]]=Colors[ColorHour]; 170 171 //FastLED.show(); 172 LitAll(); 173 174 } 175}
Downloadable files
Schematics
Schematics

Comments
Only logged in users can leave comments