Components and supplies
1
Real Time Clock (RTC)
1
Breadboard (generic)
1
Arduino Nano R3
1
geekcraft 091 128 X 32 oled display
1
Jumper wires (generic)
Apps and platforms
1
Arduino IDE
Project description
Code
oled word clock
arduino
run RTCLib ds1307 to set time on rtc before using with display
1//OLED Word Clock 2 3 4#include <Wire.h> 5#include"RTClib.h" 6#include <SPI.h> 7#include <Adafruit_GFX.h> 8#include <Adafruit_SSD1306.h> 9#define OLED_RESET 4 10Adafruit_SSD1306 display(OLED_RESET); 11#if (SSD1306_LCDHEIGHT != 32) 12#error("Height incorrect, please fix Adafruit_SSD1306.h!"); 13#endif 14// Display output 15#define MINUTES 16#define MTEN 17#define HALF 18#define PAST 19#define THREE 20#define ITIS 21#define TWENTY 22#define TO 23#define TWO 24#define SIX 25#define TWELVE 26#define HFIVE 27#define SEVEN 28#define OCLOCK 29#define ONE 30#define QUARTER 31#define EIGHT 32#define MFIVE 33#define ARDUINO 34#define ELEVEN 35#define HTEN 36#define NINE 37#define FOUR 38#define RBK 39int hour=0, minute=0, second=0; 40static unsigned long msTick =0; // the number of Millisecond Ticks since we last 41// incremented the second counter 42int selftestmode; // 1 = in self test - flash display 43 char Display1=0, Display2=0, Display3=0; 44 45// RTC DEFINE- 46RTC_DS1307 RTC ; 47void setup() 48{ 49 Serial.begin(9600); // setup the serial port to 9600 baud 50 Wire.begin(); 51 RTC.begin(); 52 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32) 53 // init done 54 //Clear the buffer. 55 display.clearDisplay(); 56 //draw scrolling text 57 testscrolltext(); 58 delay(2); 59 display.clearDisplay(); 60 if ( RTC.isrunning()) { 61 DateTime now = RTC.now(); 62 display.clearDisplay(); 63 } 64 65 DateTime now = RTC.now(); 66 msTick=millis(); // Initialise the msTick counter 67 if ( RTC.isrunning() ) { 68 // Get the current time and date from the RTC chip 69 second=now.second(); 70 minute=now.minute(); 71 hour=now.hour(); 72 display.clearDisplay(); 73 } 74 displaytime(); // display the current time 75} 76 void testscrolltext(void) { 77 display.setTextSize(1); 78 display.setTextColor(WHITE); 79} 80void displaytime(void){ 81 // start by clearing the display to a known state 82display.clearDisplay(); 83display.setCursor(30,0); 84 display.print("It is"); 85 display.println(" "); 86display.display(); 87 // now we display the appropriate minute counter 88 if ((minute>4) && (minute<10)) { 89 MFIVE; 90 MINUTES; 91 display.setCursor(1,10); 92 display.print("Five Minutes "); 93 display.println(" "); 94 display.display(); 95 } 96 if ((minute>9) && (minute<10)) { 97 MTEN; 98 MINUTES; 99 display.setCursor(1,10); 100 display.print("Ten Minutes "); 101 display.println(" "); 102 display.display(); 103 } 104 if ((minute>14) && (minute<20)) { 105 QUARTER; 106 display.setCursor(1,10); 107 display.print("A Quarter "); 108 display.println(" "); 109 display.display(); 110 } 111 if ((minute>19) && (minute<25)) { 112 TWENTY; 113 MINUTES; 114 display.setCursor(1,10); 115 display.print("Twenty Minutes "); 116 display.println(" "); 117 display.display(); 118 } 119 if ((minute>24) && (minute<30)) { 120 TWENTY; 121 MFIVE; 122 MINUTES; 123 display.setCursor(1,10); 124 display.print("Twenty Five Minutes "); 125 display.println(" "); 126 display.display(); 127 } 128 if ((minute>29) && (minute<35)) { 129 HALF; 130 display.setCursor(1,10); 131 display.print("Half "); 132 display.println(" "); 133 display.display(); 134 } 135 if ((minute>34) && (minute<40)) { 136 TWENTY; 137 MFIVE; 138 display.setCursor(1,10); 139 display.print("Twenty Five Minutes "); 140 display.println(" "); 141 display.display(); 142 } 143 if ((minute>39) && (minute<45)) { 144 TWENTY; 145 MINUTES; 146 display.setCursor(1,10); 147 display.print("Twenty Minutes "); 148 display.println(" "); 149 display.display(); 150 } 151 if ((minute>44) && (minute<50)) { 152 QUARTER; 153 display.setCursor(1,10); 154 display.print("A Quarter "); 155 display.println(" "); 156 display.display(); 157 } 158 if ((minute>49) && (minute<55)) { 159 MTEN; 160 MINUTES; 161 display.setCursor(1,10); 162 display.print("Ten Minutes "); 163 display.println(" "); 164 display.display(); 165 } 166 if (minute>54) { 167 MFIVE; 168 MINUTES; 169 display.setCursor(1,10); 170 display.print("Five Minutes "); 171 display.println(" "); 172 display.display(); 173 } 174 if ((minute <5)) 175 { 176 switch (hour) { 177 case 1: 178 case 13: 179 ONE; 180 display.print("One O'Clock"); 181 display.display(); 182 break; 183 case 2: 184 case 14: 185 TWO; 186 display.print("Two O'Clock"); 187 display.display(); 188 break; 189 case 3: 190 case 15: 191 THREE; 192 display.print("Three O'Clock"); 193 display.display(); 194 break; 195 case 4: 196 case 16: 197 FOUR; 198 display.print("Four O'Clock"); 199 display.display(); 200 break; 201 case 5: 202 case 17: 203 HFIVE; 204 display.print("Five O'Clock"); 205 display.display(); 206 break; 207 case 6: 208 case 18: 209 SIX; 210 display.print("Six O'Clock"); 211 display.display(); 212 break; 213 case 7: 214 case 19: 215 SEVEN; 216 display.print("Seven O'Clock"); 217 display.display(); 218 break; 219 case 8: 220 case 20: 221 EIGHT; 222 display.print("Eight O'Clock"); 223 display.display(); 224 break; 225 case 9: 226 case 21: 227 NINE; 228 display.print("Nine O'Clock"); 229 display.display(); 230 break; 231 case 10: 232 case 22: 233 HTEN; 234 display.print("Ten O'Clock"); 235 display.display(); 236 break; 237 case 11: 238 case 23: 239 ELEVEN; 240 display.print("Eleven O'Clock"); 241 display.display(); 242 break; 243 case 0: 244 case 12: 245 TWELVE; 246 display.print("Twelve O'Clock"); 247 display.display(); 248 break; 249 } 250 251 } else 252 if ((minute < 35) && (minute >4)) 253 { 254 PAST; 255 display.print("Past "); 256 display.display(); 257 switch (hour) { 258 case 1: 259 case 13: 260 ONE; 261 display.print("One O'Clock"); 262 display.display(); 263 break; 264 case 2: 265 case 14: 266 TWO; 267 display.print("Two O'Clock"); 268 display.display(); 269 break; 270 case 3: 271 case 15: 272 THREE; 273 display.print("Three O'Clock"); 274 display.display(); 275 break; 276 case 4: 277 case 16: 278 FOUR; 279 display.print("Four O'Clock"); 280 display.display(); 281 break; 282 case 5: 283 case 17: 284 HFIVE; 285 display.print("Five O'Clock"); 286 display.display(); 287 break; 288 case 6: 289 case 18: 290 SIX; 291 display.print("Six O'Clock"); 292 display.display(); 293 break; 294 case 7: 295 case 19: 296 SEVEN; 297 display.print("Seven O'Clock"); 298 display.display(); 299 break; 300 case 8: 301 case 20: 302 EIGHT; 303 display.print("Eight O'Clock"); 304 display.display(); 305 break; 306 case 9: 307 case 21: 308 NINE; 309 display.print("Nine O'Clock"); 310 display.display(); 311 break; 312 case 10: 313 case 22: 314 HTEN; 315 display.print("Ten O'Clock"); 316 display.display(); 317 break; 318 case 11: 319 case 23: 320 ELEVEN; 321 display.print("Eleven O'Clock"); 322 display.display(); 323 break; 324 case 0: 325 case 12: 326 TWELVE; 327 display.print("Twelve O'Clock"); 328 display.display(); 329 break; 330 } 331 } 332 else 333 { 334 // if we are greater than 34 minutes past the hour then display 335 // the next hour, as we will be displaying a 'to' sign 336 TO; 337 display.print("To "); 338 display.display(); 339 switch (hour) { 340 case 1: 341 case 13: 342 TWO; 343 display.print("Two O'Clock"); 344 display.display(); 345 break; 346 case 14: 347 case 2: 348 THREE; 349 display.print("Three O'Clock"); 350 display.display(); 351 break; 352 case 15: 353 case 3: 354 FOUR; 355 display.print("Four O'Clock"); 356 display.display(); 357 break; 358 case 4: 359 case 16: 360 HFIVE; 361 display.print("Five O'Clock"); 362 display.display(); 363 break; 364 case 5: 365 case 17: 366 SIX; 367 display.print("Six O'Clock"); 368 display.display(); 369 break; 370 case 6: 371 case 18: 372 SEVEN; 373 display.print("Seven O'Clock"); 374 display.display(); 375 break; 376 case 7: 377 case 19: 378 EIGHT; 379 display.print("Eight O'Clock"); 380 display.display(); 381 break; 382 case 8: 383 case 20: 384 NINE; 385 display.print("Nine O'Clock"); 386 display.display(); 387 break; 388 case 9: 389 case 21: 390 HTEN; 391 display.print("Ten O'Clock"); 392 display.display(); 393 break; 394 case 10: 395 case 22: 396 ELEVEN; 397 display.print("Eleven O'Clock"); 398 display.display(); 399 break; 400 case 11: 401 case 23: 402 TWELVE; 403 display.print("Twelve O'Clock"); 404 display.display(); 405 break; 406 case 0: 407 case 12: 408 ONE; 409 display.print("One O'Clock"); 410 display.display(); 411 break; 412 } 413 } 414 415 } 416 417void loop() 418{ 419 DateTime now = RTC.now(); 420 second=now.second(); 421 minute=now.minute(); 422 hour=now.hour(); 423 if ( millis() - msTick >5000) { 424 msTick=millis(); 425 digitalWrite(13,HIGH); 426 delay(50); 427 digitalWrite(13,LOW); 428 delay(50); 429 digitalWrite(13,HIGH); 430 delay(50); 431 digitalWrite(13,LOW); 432 } 433 if (second==59) // Update the display every 1 minute... 434 435 { 436 displaytime(); 437 } 438 } 439 440 441 442
oled word clock
arduino
run RTCLib ds1307 to set time on rtc before using with display
1//OLED Word Clock 2 3 4#include <Wire.h> 5#include"RTClib.h" 6#include 7 <SPI.h> 8#include <Adafruit_GFX.h> 9#include <Adafruit_SSD1306.h> 10#define 11 OLED_RESET 4 12Adafruit_SSD1306 display(OLED_RESET); 13#if (SSD1306_LCDHEIGHT 14 != 32) 15#error("Height incorrect, please fix Adafruit_SSD1306.h!"); 16#endif 17// 18 Display output 19#define MINUTES 20#define MTEN 21#define HALF 22#define 23 PAST 24#define THREE 25#define ITIS 26#define TWENTY 27#define TO 28 29#define TWO 30#define SIX 31#define TWELVE 32#define HFIVE 33#define 34 SEVEN 35#define OCLOCK 36#define ONE 37#define QUARTER 38#define 39 EIGHT 40#define MFIVE 41#define ARDUINO 42#define ELEVEN 43#define HTEN 44#define 45 NINE 46#define FOUR 47#define RBK 48int hour=0, minute=0, second=0; 49static 50 unsigned long msTick =0; // the number of Millisecond Ticks since we last 51// 52 incremented the second counter 53int selftestmode; // 1 = in self test 54 - flash display 55 char Display1=0, Display2=0, Display3=0; 56 57// 58 RTC DEFINE- 59RTC_DS1307 RTC ; 60void setup() 61{ 62 Serial.begin(9600); // 63 setup the serial port to 9600 baud 64 Wire.begin(); 65 RTC.begin(); 66 display.begin(SSD1306_SWITCHCAPVCC, 67 0x3C); // initialize with the I2C addr 0x3C (for the 128x32) 68 // init done 69 70 //Clear the buffer. 71 display.clearDisplay(); 72 //draw scrolling text 73 74 testscrolltext(); 75 delay(2); 76 display.clearDisplay(); 77 if ( RTC.isrunning()) 78 { 79 DateTime now = RTC.now(); 80 display.clearDisplay(); 81 } 82 83 84 DateTime now = RTC.now(); 85 msTick=millis(); // Initialise 86 the msTick counter 87 if ( RTC.isrunning() ) { 88 // Get the current time 89 and date from the RTC chip 90 second=now.second(); 91 minute=now.minute(); 92 93 hour=now.hour(); 94 display.clearDisplay(); 95 } 96 displaytime(); // 97 display the current time 98} 99 void testscrolltext(void) { 100 display.setTextSize(1); 101 102 display.setTextColor(WHITE); 103} 104void displaytime(void){ 105 // start by 106 clearing the display to a known state 107display.clearDisplay(); 108display.setCursor(30,0); 109 110 display.print("It is"); 111 display.println(" "); 112display.display(); 113 114 // now we display the appropriate minute counter 115 if ((minute>4) && (minute<10)) 116 { 117 MFIVE; 118 MINUTES; 119 display.setCursor(1,10); 120 display.print("Five 121 Minutes "); 122 display.println(" "); 123 display.display(); 124 } 125 126 if ((minute>9) && (minute<10)) { 127 MTEN; 128 MINUTES; 129 display.setCursor(1,10); 130 131 display.print("Ten Minutes "); 132 display.println(" "); 133 display.display(); 134 135 } 136 if ((minute>14) && (minute<20)) { 137 QUARTER; 138 display.setCursor(1,10); 139 140 display.print("A Quarter "); 141 display.println(" "); 142 display.display(); 143 144 } 145 if ((minute>19) && (minute<25)) { 146 TWENTY; 147 MINUTES; 148 149 display.setCursor(1,10); 150 display.print("Twenty Minutes "); 151 display.println(" 152 "); 153 display.display(); 154 } 155 if ((minute>24) && (minute<30)) 156 { 157 TWENTY; 158 MFIVE; 159 MINUTES; 160 display.setCursor(1,10); 161 162 display.print("Twenty Five Minutes "); 163 display.println(" "); 164 165 display.display(); 166 } 167 if ((minute>29) && (minute<35)) { 168 169 HALF; 170 display.setCursor(1,10); 171 display.print("Half "); 172 173 display.println(" "); 174 display.display(); 175 } 176 if ((minute>34) 177 && (minute<40)) { 178 TWENTY; 179 MFIVE; 180 display.setCursor(1,10); 181 182 display.print("Twenty Five Minutes "); 183 display.println(" "); 184 185 display.display(); 186 } 187 if ((minute>39) && (minute<45)) { 188 189 TWENTY; 190 MINUTES; 191 display.setCursor(1,10); 192 display.print("Twenty 193 Minutes "); 194 display.println(" "); 195 display.display(); 196 } 197 198 if ((minute>44) && (minute<50)) { 199 QUARTER; 200 display.setCursor(1,10); 201 202 display.print("A Quarter "); 203 display.println(" "); 204 display.display(); 205 206 } 207 if ((minute>49) && (minute<55)) { 208 MTEN; 209 MINUTES; 210 display.setCursor(1,10); 211 212 display.print("Ten Minutes "); 213 display.println(" "); 214 display.display(); 215 216 } 217 if (minute>54) { 218 MFIVE; 219 MINUTES; 220 display.setCursor(1,10); 221 222 display.print("Five Minutes "); 223 display.println(" "); 224 display.display(); 225 226 } 227 if ((minute <5)) 228 { 229 switch (hour) { 230 case 1: 231 case 232 13: 233 ONE; 234 display.print("One O'Clock"); 235 display.display(); 236 237 break; 238 case 2: 239 case 14: 240 TWO; 241 display.print("Two 242 O'Clock"); 243 display.display(); 244 break; 245 case 3: 246 case 247 15: 248 THREE; 249 display.print("Three O'Clock"); 250 display.display(); 251 252 break; 253 case 4: 254 case 16: 255 FOUR; 256 display.print("Four 257 O'Clock"); 258 display.display(); 259 break; 260 case 5: 261 case 262 17: 263 HFIVE; 264 display.print("Five O'Clock"); 265 display.display(); 266 267 break; 268 case 6: 269 case 18: 270 SIX; 271 display.print("Six 272 O'Clock"); 273 display.display(); 274 break; 275 case 7: 276 case 277 19: 278 SEVEN; 279 display.print("Seven O'Clock"); 280 display.display(); 281 282 break; 283 case 8: 284 case 20: 285 EIGHT; 286 display.print("Eight 287 O'Clock"); 288 display.display(); 289 break; 290 case 9: 291 case 292 21: 293 NINE; 294 display.print("Nine O'Clock"); 295 display.display(); 296 297 break; 298 case 10: 299 case 22: 300 HTEN; 301 display.print("Ten 302 O'Clock"); 303 display.display(); 304 break; 305 case 11: 306 case 307 23: 308 ELEVEN; 309 display.print("Eleven O'Clock"); 310 display.display(); 311 312 break; 313 case 0: 314 case 12: 315 TWELVE; 316 display.print("Twelve 317 O'Clock"); 318 display.display(); 319 break; 320 } 321 322 } else 323 324 if ((minute < 35) && (minute >4)) 325 { 326 PAST; 327 display.print("Past 328 "); 329 display.display(); 330 switch (hour) { 331 case 1: 332 333 case 13: 334 ONE; 335 display.print("One O'Clock"); 336 337 display.display(); 338 break; 339 case 2: 340 case 341 14: 342 TWO; 343 display.print("Two O'Clock"); 344 display.display(); 345 346 break; 347 case 3: 348 case 15: 349 THREE; 350 display.print("Three 351 O'Clock"); 352 display.display(); 353 break; 354 case 4: 355 356 case 16: 357 FOUR; 358 display.print("Four O'Clock"); 359 360 display.display(); 361 break; 362 case 5: 363 case 364 17: 365 HFIVE; 366 display.print("Five O'Clock"); 367 display.display(); 368 369 break; 370 case 6: 371 case 18: 372 SIX; 373 display.print("Six 374 O'Clock"); 375 display.display(); 376 break; 377 case 7: 378 379 case 19: 380 SEVEN; 381 display.print("Seven O'Clock"); 382 383 display.display(); 384 break; 385 case 8: 386 case 387 20: 388 EIGHT; 389 display.print("Eight O'Clock"); 390 display.display(); 391 392 break; 393 case 9: 394 case 21: 395 NINE; 396 display.print("Nine 397 O'Clock"); 398 display.display(); 399 break; 400 case 10: 401 402 case 22: 403 HTEN; 404 display.print("Ten O'Clock"); 405 406 display.display(); 407 break; 408 case 11: 409 case 410 23: 411 ELEVEN; 412 display.print("Eleven O'Clock"); 413 display.display(); 414 415 break; 416 case 0: 417 case 12: 418 TWELVE; 419 display.print("Twelve 420 O'Clock"); 421 display.display(); 422 break; 423 } 424 } 425 426 else 427 { 428 // if we are greater than 34 minutes past the hour then 429 display 430 // the next hour, as we will be displaying a 'to' sign 431 TO; 432 433 display.print("To "); 434 display.display(); 435 switch (hour) 436 { 437 case 1: 438 case 13: 439 TWO; 440 display.print("Two 441 O'Clock"); 442 display.display(); 443 break; 444 case 14: 445 446 case 2: 447 THREE; 448 display.print("Three O'Clock"); 449 450 display.display(); 451 break; 452 case 15: 453 case 454 3: 455 FOUR; 456 display.print("Four O'Clock"); 457 display.display(); 458 459 break; 460 case 4: 461 case 16: 462 HFIVE; 463 display.print("Five 464 O'Clock"); 465 display.display(); 466 break; 467 case 5: 468 469 case 17: 470 SIX; 471 display.print("Six O'Clock"); 472 473 display.display(); 474 break; 475 case 6: 476 case 477 18: 478 SEVEN; 479 display.print("Seven O'Clock"); 480 display.display(); 481 482 break; 483 case 7: 484 case 19: 485 EIGHT; 486 display.print("Eight 487 O'Clock"); 488 display.display(); 489 break; 490 case 8: 491 492 case 20: 493 NINE; 494 display.print("Nine O'Clock"); 495 496 display.display(); 497 break; 498 case 9: 499 case 500 21: 501 HTEN; 502 display.print("Ten O'Clock"); 503 display.display(); 504 505 break; 506 case 10: 507 case 22: 508 ELEVEN; 509 display.print("Eleven 510 O'Clock"); 511 display.display(); 512 break; 513 case 11: 514 515 case 23: 516 TWELVE; 517 display.print("Twelve O'Clock"); 518 519 display.display(); 520 break; 521 case 0: 522 case 12: 523 524 ONE; 525 display.print("One O'Clock"); 526 display.display(); 527 528 break; 529 } 530 } 531 532 } 533 534void loop() 535{ 536 DateTime 537 now = RTC.now(); 538 second=now.second(); 539 minute=now.minute(); 540 hour=now.hour(); 541 542 if ( millis() - msTick >5000) { 543 msTick=millis(); 544 digitalWrite(13,HIGH); 545 546 delay(50); 547 digitalWrite(13,LOW); 548 delay(50); 549 digitalWrite(13,HIGH); 550 551 delay(50); 552 digitalWrite(13,LOW); 553 } 554 if (second==59) // Update 555 the display every 1 minute... 556 557 { 558 displaytime(); 559 } 560 } 561 562 563 564 565
Downloadable files
oled word clock
oled word clock
Comments
Only logged in users can leave comments