Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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