Class to display Time in words on WS2812B-LED-Stripe. * Drive LEDs with PixelArray * with 11x10 LED-Matrix and 4 minute-LEDS * GERMAN LAYOUT !!!!!!
WordClock.cpp
00001 #include "mbed.h" 00002 #include "WordClock.h" 00003 #include "neopixel.h" 00004 00005 WordClock::WordClock (PinName pin) : di_pin_(pin, PullDown), array_(pin) 00006 { 00007 00008 // Create a temporary DigitalIn so we can configure the pull-down resistor. 00009 // (The mbed API doesn't provide any other way to do this.) 00010 // An alternative is to connect an external pull-down resistor. 00011 //DigitalIn(pin, PullDown); 00012 // The pixel array control class. 00013 //neopixel::PixelArray array(pin); 00014 00015 // initialize hsv 00016 //hue_ = 0.0; //red 00017 hue_ = 0.2917; //limett-green 00018 saturation_ = 1.0; //full color 00019 value_ = 1.0; //brightness 00020 00021 } 00022 00023 /** Convert a color from the HSV representation to RGB. 00024 * 00025 * @param h hue 0.0 ... 1.0 00026 * @param s saturation 0.0 ... 1.0 00027 * @param v value 0.0 ... 1.0 00028 */ 00029 neopixel::Pixel WordClock::hsvToRgb(float h, float s, float v) 00030 { 00031 int i = floor(h * 6); 00032 float f = h * 6 - i; 00033 float p = v * (1 - s); 00034 float q = v * (1 - f * s); 00035 float t = v * (1 - (1 - f) * s); 00036 float r = 0, g = 0, b = 0; 00037 switch(i % 6) { 00038 case 0: 00039 r = v; 00040 g = t; 00041 b = p; 00042 break; 00043 case 1: 00044 r = q; 00045 g = v; 00046 b = p; 00047 break; 00048 case 2: 00049 r = p; 00050 g = v; 00051 b = t; 00052 break; 00053 case 3: 00054 r = p; 00055 g = q; 00056 b = v; 00057 break; 00058 case 4: 00059 r = t; 00060 g = p; 00061 b = v; 00062 break; 00063 case 5: 00064 r = v; 00065 g = p; 00066 b = q; 00067 break; 00068 } 00069 return (neopixel::Pixel) { 00070 r * 255, g * 255, b * 255 00071 }; 00072 } 00073 00074 void WordClock::cls() 00075 { 00076 int i; 00077 for (i=0; i<NUMLEDS; i++) { 00078 ledstripe_[i].red=0; 00079 ledstripe_[i].green=0; 00080 ledstripe_[i].blue=0; 00081 } 00082 } 00083 00084 void WordClock::es_ist() 00085 { 00086 ledstripe_[0] = hsvToRgb(hue_, saturation_, value_); 00087 ledstripe_[1] = hsvToRgb(hue_, saturation_, value_); 00088 ledstripe_[3] = hsvToRgb(hue_, saturation_, value_); 00089 ledstripe_[4] = hsvToRgb(hue_, saturation_, value_); 00090 ledstripe_[5] = hsvToRgb(hue_, saturation_, value_); 00091 } 00092 void WordClock::fuenf_m() 00093 { 00094 ledstripe_[7] = hsvToRgb(hue_, saturation_, value_); 00095 ledstripe_[8] = hsvToRgb(hue_, saturation_, value_); 00096 ledstripe_[9] = hsvToRgb(hue_, saturation_, value_); 00097 ledstripe_[10]= hsvToRgb(hue_, saturation_, value_); 00098 } 00099 void WordClock::zehn_m() 00100 { 00101 ledstripe_[21] = hsvToRgb(hue_, saturation_, value_); 00102 ledstripe_[20] = hsvToRgb(hue_, saturation_, value_); 00103 ledstripe_[19] = hsvToRgb(hue_, saturation_, value_); 00104 ledstripe_[18] = hsvToRgb(hue_, saturation_, value_); 00105 } 00106 00107 void WordClock::zwanzig() 00108 { 00109 ledstripe_[17] = hsvToRgb(hue_, saturation_, value_); 00110 ledstripe_[16] = hsvToRgb(hue_, saturation_, value_); 00111 ledstripe_[15] = hsvToRgb(hue_, saturation_, value_); 00112 ledstripe_[14] = hsvToRgb(hue_, saturation_, value_); 00113 ledstripe_[13] = hsvToRgb(hue_, saturation_, value_); 00114 ledstripe_[12] = hsvToRgb(hue_, saturation_, value_); 00115 ledstripe_[11] = hsvToRgb(hue_, saturation_, value_); 00116 } 00117 00118 void WordClock::drei_m() 00119 { 00120 ledstripe_[22] = hsvToRgb(hue_, saturation_, value_); 00121 ledstripe_[23] = hsvToRgb(hue_, saturation_, value_); 00122 ledstripe_[24] = hsvToRgb(hue_, saturation_, value_); 00123 ledstripe_[25] = hsvToRgb(hue_, saturation_, value_); 00124 } 00125 00126 void WordClock::vier_m() 00127 { 00128 ledstripe_[26] = hsvToRgb(hue_, saturation_, value_); 00129 ledstripe_[27] = hsvToRgb(hue_, saturation_, value_); 00130 ledstripe_[28] = hsvToRgb(hue_, saturation_, value_); 00131 ledstripe_[29] = hsvToRgb(hue_, saturation_, value_); 00132 } 00133 00134 void WordClock::tel() 00135 { 00136 ledstripe_[30] = hsvToRgb(hue_, saturation_, value_); 00137 ledstripe_[31] = hsvToRgb(hue_, saturation_, value_); 00138 ledstripe_[32] = hsvToRgb(hue_, saturation_, value_); 00139 } 00140 00141 void WordClock::nach() 00142 { 00143 ledstripe_[41] = hsvToRgb(hue_, saturation_, value_); 00144 ledstripe_[40] = hsvToRgb(hue_, saturation_, value_); 00145 ledstripe_[39] = hsvToRgb(hue_, saturation_, value_); 00146 ledstripe_[38] = hsvToRgb(hue_, saturation_, value_); 00147 } 00148 00149 void WordClock::vor() 00150 { 00151 ledstripe_[37] = hsvToRgb(hue_, saturation_, value_); 00152 ledstripe_[36] = hsvToRgb(hue_, saturation_, value_); 00153 ledstripe_[35] = hsvToRgb(hue_, saturation_, value_); 00154 } 00155 00156 void WordClock::halb() 00157 { 00158 ledstripe_[44] = hsvToRgb(hue_, saturation_, value_); 00159 ledstripe_[45] = hsvToRgb(hue_, saturation_, value_); 00160 ledstripe_[46] = hsvToRgb(hue_, saturation_, value_); 00161 ledstripe_[47] = hsvToRgb(hue_, saturation_, value_); 00162 } 00163 00164 void WordClock::zwoelf() 00165 { 00166 ledstripe_[49] = hsvToRgb(hue_, saturation_, value_); 00167 ledstripe_[50] = hsvToRgb(hue_, saturation_, value_); 00168 ledstripe_[51] = hsvToRgb(hue_, saturation_, value_); 00169 ledstripe_[52] = hsvToRgb(hue_, saturation_, value_); 00170 ledstripe_[53] = hsvToRgb(hue_, saturation_, value_); 00171 } 00172 00173 void WordClock::zwei() 00174 { 00175 ledstripe_[65] = hsvToRgb(hue_, saturation_, value_); 00176 ledstripe_[64] = hsvToRgb(hue_, saturation_, value_); 00177 ledstripe_[63] = hsvToRgb(hue_, saturation_, value_); 00178 ledstripe_[62] = hsvToRgb(hue_, saturation_, value_); 00179 } 00180 00181 void WordClock::eins() 00182 { 00183 ledstripe_[63] = hsvToRgb(hue_, saturation_, value_); 00184 ledstripe_[62] = hsvToRgb(hue_, saturation_, value_); 00185 ledstripe_[61] = hsvToRgb(hue_, saturation_, value_); 00186 ledstripe_[60] = hsvToRgb(hue_, saturation_, value_); 00187 } 00188 00189 void WordClock::ein() 00190 { 00191 ledstripe_[63] = hsvToRgb(hue_, saturation_, value_); 00192 ledstripe_[62] = hsvToRgb(hue_, saturation_, value_); 00193 ledstripe_[61] = hsvToRgb(hue_, saturation_, value_); 00194 } 00195 00196 void WordClock::sieben() 00197 { 00198 ledstripe_[60] = hsvToRgb(hue_, saturation_, value_); 00199 ledstripe_[59] = hsvToRgb(hue_, saturation_, value_); 00200 ledstripe_[58] = hsvToRgb(hue_, saturation_, value_); 00201 ledstripe_[57] = hsvToRgb(hue_, saturation_, value_); 00202 ledstripe_[56] = hsvToRgb(hue_, saturation_, value_); 00203 ledstripe_[55] = hsvToRgb(hue_, saturation_, value_); 00204 00205 } 00206 00207 void WordClock::drei_h() 00208 { 00209 ledstripe_[67] = hsvToRgb(hue_, saturation_, value_); 00210 ledstripe_[68] = hsvToRgb(hue_, saturation_, value_); 00211 ledstripe_[69] = hsvToRgb(hue_, saturation_, value_); 00212 ledstripe_[70] = hsvToRgb(hue_, saturation_, value_); 00213 } 00214 00215 void WordClock::fuenf_h() 00216 { 00217 ledstripe_[73] = hsvToRgb(hue_, saturation_, value_); 00218 ledstripe_[74] = hsvToRgb(hue_, saturation_, value_); 00219 ledstripe_[75] = hsvToRgb(hue_, saturation_, value_); 00220 ledstripe_[76] = hsvToRgb(hue_, saturation_, value_); 00221 } 00222 00223 void WordClock::elf() 00224 { 00225 ledstripe_[87] = hsvToRgb(hue_, saturation_, value_); 00226 ledstripe_[86] = hsvToRgb(hue_, saturation_, value_); 00227 ledstripe_[85] = hsvToRgb(hue_, saturation_, value_); 00228 } 00229 00230 void WordClock::neun() 00231 { 00232 ledstripe_[84] = hsvToRgb(hue_, saturation_, value_); 00233 ledstripe_[83] = hsvToRgb(hue_, saturation_, value_); 00234 ledstripe_[82] = hsvToRgb(hue_, saturation_, value_); 00235 ledstripe_[81] = hsvToRgb(hue_, saturation_, value_); 00236 } 00237 00238 void WordClock::vier_h() 00239 { 00240 ledstripe_[80] = hsvToRgb(hue_, saturation_, value_); 00241 ledstripe_[79] = hsvToRgb(hue_, saturation_, value_); 00242 ledstripe_[78] = hsvToRgb(hue_, saturation_, value_); 00243 ledstripe_[77] = hsvToRgb(hue_, saturation_, value_); 00244 } 00245 00246 void WordClock::acht() 00247 { 00248 ledstripe_[89] = hsvToRgb(hue_, saturation_, value_); 00249 ledstripe_[90] = hsvToRgb(hue_, saturation_, value_); 00250 ledstripe_[91] = hsvToRgb(hue_, saturation_, value_); 00251 ledstripe_[92] = hsvToRgb(hue_, saturation_, value_); 00252 } 00253 00254 void WordClock::zehn_h() 00255 { 00256 ledstripe_[93] = hsvToRgb(hue_, saturation_, value_); 00257 ledstripe_[94] = hsvToRgb(hue_, saturation_, value_); 00258 ledstripe_[95] = hsvToRgb(hue_, saturation_, value_); 00259 ledstripe_[96] = hsvToRgb(hue_, saturation_, value_); 00260 } 00261 00262 void WordClock::sechs() 00263 { 00264 ledstripe_[108] = hsvToRgb(hue_, saturation_, value_); 00265 ledstripe_[107] = hsvToRgb(hue_, saturation_, value_); 00266 ledstripe_[106] = hsvToRgb(hue_, saturation_, value_); 00267 ledstripe_[105] = hsvToRgb(hue_, saturation_, value_); 00268 ledstripe_[104] = hsvToRgb(hue_, saturation_, value_); 00269 } 00270 00271 void WordClock::uhr() 00272 { 00273 ledstripe_[101] = hsvToRgb(hue_, saturation_, value_); 00274 ledstripe_[100] = hsvToRgb(hue_, saturation_, value_); 00275 ledstripe_[99] = hsvToRgb(hue_, saturation_, value_); 00276 } 00277 00278 void WordClock::m1(int second) 00279 { 00280 ledstripe_[110] = hsvToRgb(hue_, saturation_, float(second)/60); 00281 } 00282 00283 void WordClock::m2(int second) 00284 { 00285 ledstripe_[111] = hsvToRgb(hue_, saturation_, float(second)/60); 00286 } 00287 00288 void WordClock::m3(int second) 00289 { 00290 ledstripe_[112] = hsvToRgb(hue_, saturation_, float(second)/60); 00291 } 00292 00293 void WordClock::m4(int second) 00294 { 00295 ledstripe_[113] = hsvToRgb(hue_, saturation_, float(second)/60); 00296 } 00297 00298 void WordClock::sz() 00299 { 00300 cls(); 00301 ledstripe_[4] = hsvToRgb(hue_, saturation_, value_); 00302 ledstripe_[17] = hsvToRgb(hue_, saturation_, value_); 00303 array_.update(ledstripe_,NUMLEDS); 00304 } 00305 00306 void WordClock::wz() 00307 { 00308 cls(); 00309 ledstripe_[16] = hsvToRgb(hue_, saturation_, value_); 00310 ledstripe_[13] = hsvToRgb(hue_, saturation_, value_); 00311 array_.update(ledstripe_,NUMLEDS); 00312 } 00313 00314 void WordClock::test_display(int option, int index) 00315 { 00316 cls(); 00317 //build and display the content of ledarray 00318 switch (option) { 00319 case 1 : { 00320 // color gradient from red to red through hsv colors 00321 for (int i=0; i<NUMLEDS; i++) { 00322 ledstripe_[i] = hsvToRgb(1.0*i/NUMLEDS, saturation_, value_); 00323 } 00324 array_.update(ledstripe_,NUMLEDS); 00325 break; 00326 } 00327 case 2 : { 00328 //display one LED in White, full brightness 00329 ledstripe_[index] = hsvToRgb(1.0, 0.0, 1.0);//white 00330 array_.update(ledstripe_,NUMLEDS); 00331 break; 00332 } 00333 case 3 : { 00334 //display a word 00335 cls(); 00336 switch (index) { 00337 case 1: { 00338 es_ist(); 00339 break; 00340 } 00341 case 2: { 00342 fuenf_m(); 00343 break; 00344 } 00345 case 3: { 00346 zehn_m(); 00347 break; 00348 } 00349 case 4: { 00350 zwanzig(); 00351 break; 00352 } 00353 case 5: { 00354 drei_m(); 00355 break; 00356 } 00357 case 6: { 00358 vier_m(); 00359 break; 00360 } 00361 case 7: { 00362 tel(); 00363 break; 00364 } 00365 case 8: { 00366 nach(); 00367 break; 00368 } 00369 case 9: { 00370 vor(); 00371 break; 00372 } 00373 case 10: { 00374 halb(); 00375 break; 00376 } 00377 case 11: { 00378 zwoelf(); 00379 break; 00380 } 00381 case 12: { 00382 zwei(); 00383 break; 00384 } 00385 case 13: { 00386 eins(); 00387 break; 00388 } 00389 case 14: { 00390 sieben(); 00391 break; 00392 } 00393 case 15: { 00394 drei_h(); 00395 break; 00396 } 00397 case 16: { 00398 fuenf_h(); 00399 break; 00400 } 00401 case 17: { 00402 elf(); 00403 break; 00404 } 00405 case 18: { 00406 neun(); 00407 break; 00408 } 00409 case 19: { 00410 vier_h(); 00411 break; 00412 } 00413 case 20: { 00414 acht(); 00415 break; 00416 } 00417 case 21: { 00418 zehn_h(); 00419 break; 00420 } 00421 case 22: { 00422 sechs(); 00423 break; 00424 } 00425 case 23: { 00426 uhr(); 00427 break; 00428 } 00429 case 24: { 00430 m1(); 00431 break; 00432 } 00433 case 25: { 00434 m2(); 00435 break; 00436 } 00437 case 26: { 00438 m3(); 00439 break; 00440 } 00441 case 27: { 00442 m4(); 00443 break; 00444 } 00445 case 28: { 00446 ein(); 00447 break; 00448 } 00449 00450 00451 }//switch 00452 array_.update(ledstripe_,NUMLEDS); 00453 break; 00454 } 00455 }//switch 00456 } 00457 00458 void WordClock::display_time(int hour,int minute, int second) 00459 { 00460 //display the time in words 00461 if (hour < 0 ) hour = 0; 00462 if (hour > 23 ) hour = 23; 00463 if (minute < 0) minute = 0; 00464 if (minute > 59) minute = 59; 00465 if (second < 0) second = 0; 00466 if (second > 59) second = 59; 00467 00468 //set the color depending on the hour 00469 hue_ = float(hour)/24; 00470 00471 cls(); 00472 es_ist(); 00473 //minutes 00474 if (minute >=5 and minute <10) { 00475 fuenf_m(); 00476 nach(); 00477 } 00478 if (minute >=10 and minute <15) { 00479 zehn_m(); 00480 nach(); 00481 } 00482 if (minute >=15 and minute <20) { 00483 vier_m(); 00484 tel(); 00485 nach(); 00486 } 00487 if (minute >=20 and minute <25) { 00488 zwanzig(); 00489 nach(); 00490 } 00491 if (minute >=25 and minute <30) { 00492 fuenf_m(); 00493 vor(); 00494 halb(); 00495 hour++; 00496 } 00497 if (minute >= 30 and minute<35) { 00498 halb(); 00499 hour++; 00500 } 00501 if (minute >=35 and minute<40) { 00502 fuenf_m(); 00503 nach(); 00504 halb(); 00505 hour++; 00506 } 00507 if (minute >=40 and minute<45) { 00508 zwanzig(); 00509 vor(); 00510 hour++; 00511 } 00512 if (minute >=45 and minute<50) { 00513 drei_m(); 00514 vier_m(); 00515 tel(); 00516 hour++; 00517 } 00518 if (minute >=50 and minute<55) { 00519 zehn_m(); 00520 vor(); 00521 hour++; 00522 } 00523 if (minute >=55 and minute<60) { 00524 fuenf_m(); 00525 vor(); 00526 hour++; 00527 } 00528 //hours 00529 if (hour >=13) hour -= 12; 00530 switch (hour){ 00531 case 0:{ 00532 zwoelf(); 00533 break; 00534 } 00535 case 1:{ 00536 if (minute < 5) { 00537 ein(); 00538 }else{ 00539 eins(); 00540 } 00541 break; 00542 } 00543 case 2:{ 00544 zwei(); 00545 break; 00546 } 00547 case 3:{ 00548 drei_h(); 00549 break; 00550 } 00551 case 4:{ 00552 vier_h(); 00553 break; 00554 } 00555 case 5:{ 00556 fuenf_h(); 00557 break; 00558 } 00559 case 6:{ 00560 sechs(); 00561 break; 00562 } 00563 case 7:{ 00564 sieben(); 00565 break; 00566 } 00567 case 8:{ 00568 acht(); 00569 break; 00570 } 00571 case 9:{ 00572 neun(); 00573 break; 00574 } 00575 case 10:{ 00576 zehn_h(); 00577 break; 00578 } 00579 case 11:{ 00580 elf(); 00581 break; 00582 } 00583 case 12:{ 00584 zwoelf(); 00585 break; 00586 } 00587 }//switch hour 00588 00589 //only on full hours 00590 if (minute < 5) { 00591 uhr(); 00592 } 00593 00594 //minutes 0..4 and seconds in brigtness 00595 switch (minute%5){ 00596 case 0:{ 00597 m1(second); 00598 break; 00599 } 00600 case 1:{ 00601 m1(); 00602 m2(second); 00603 break; 00604 } 00605 case 2:{ 00606 m1(); 00607 m2(); 00608 m3(second); 00609 break; 00610 } 00611 case 3:{ 00612 m1(); 00613 m2(); 00614 m3(); 00615 m4(second); 00616 break; 00617 } 00618 case 4:{ 00619 // we don't have a 5th led for minute 4..5 00620 // dim down all 4 LEDs 00621 m1(59-second); 00622 m2(59-second); 00623 m3(59-second); 00624 m4(59-second); 00625 break; 00626 } 00627 }//switch minute%5 00628 //display the LED-Array 00629 array_.update(ledstripe_,NUMLEDS); 00630 }
Generated on Mon Jul 18 2022 19:16:40 by
1.7.2