|
| 1 | +const char ae[] PROGMEM = "arma uirumque cano Troiae qui primus ab oris / " |
| 2 | +"Italiam fato profugus Lauiniaque uenit / " |
| 3 | +"litora multum ille et terris iactatus et alto / " |
| 4 | +"ui superum saeuae memorem Iunonis ob iram / " |
| 5 | +"multa quoque et bello passus dum conderet urbem / " |
| 6 | +"inferretque deos Latio genus unde Latinum / " |
| 7 | +"Albanique patres atque altae moenia Romae / " |
| 8 | +"Musa mihi causas memora quo numine laeso / " |
| 9 | +"quidue dolens regina deum tot uoluere casus / " |
| 10 | +"insignem pietate uirum tot adire labores / " |
| 11 | +"impulerit tantaene animis caelestibus irae / " |
| 12 | +"urbs antiqua fuit Tyrii tenuere coloni / " |
| 13 | +"Karthago Italiam contra Tiberinaque longe / " |
| 14 | +"ostia diues opum studiisque asperrima belli / " |
| 15 | +"quam Iuno fertur terris magis omnibus unam / " |
| 16 | +"posthabita coluisse Samo hic illius arma / " |
| 17 | +"hic currus fuit hoc regnum dea gentibus esse / " |
| 18 | +"si qua fata sinant iam tum tenditque fouetque / " |
| 19 | +"progeniem sed enim Troiano a sanguine duci / " |
| 20 | +"audierat Tyrias olim quae uerteret arces / " |
| 21 | +"hinc populum late regem belloque superbum / " |
| 22 | +"uenturum excidio Libyae sic uoluere Parcas / " |
| 23 | +"id metuens ueterisque memor Saturnia belli / " |
| 24 | +"prima quod ad Troiam pro caris gesserat Argis / " |
| 25 | +"necdum etiam causae irarum saeuique dolores "; |
| 26 | + |
| 27 | +char lastClearState = 0; |
| 28 | +void checkClear() { |
| 29 | + if (! (*clearPort & clearMask) ) { |
| 30 | + if (lastClearState) { |
| 31 | + ((void(*)(void))0)(); |
| 32 | + } |
| 33 | + } |
| 34 | + else { |
| 35 | + lastClearState = 1; |
| 36 | + } |
| 37 | +} |
| 38 | + |
| 39 | +char text[33] = ""; |
| 40 | +void scrollingWrite(char c) { |
| 41 | + int l = strlen(text); |
| 42 | + if (l<32) { |
| 43 | + text[l] = c; |
| 44 | + text[l+1] = 0; |
| 45 | + } |
| 46 | + else { |
| 47 | + memmove(text,text+1,31); |
| 48 | + text[31] = c; |
| 49 | + } |
| 50 | + lcd.setCursor(0,0); |
| 51 | + int i; |
| 52 | + for (i=0;i<16 && text[i];i++) lcd.write(text[i]); |
| 53 | + if (i<16) |
| 54 | + return; |
| 55 | + lcd.setCursor(0,1); |
| 56 | + for (i=16;i<32 && text[i];i++) lcd.write(text[i]); |
| 57 | +} |
| 58 | + |
| 59 | +void easterEgg2() { |
| 60 | + int i = 0; |
| 61 | + lcd.setCursor(0,0); |
| 62 | + while(1) { |
| 63 | + checkClear(); |
| 64 | + char c = pgm_read_byte_near(ae+i); |
| 65 | + if (c==0) |
| 66 | + return; |
| 67 | + scrollingWrite(c); |
| 68 | + delay(150); |
| 69 | + i++; |
| 70 | + } |
| 71 | +} |
| 72 | + |
| 73 | +void easterEgg1() { |
| 74 | + |
| 75 | +} |
| 76 | + |
| 77 | +void easterEggs() { |
| 78 | + lcd.clear(); |
| 79 | + lcd.setCursor(0, 0); |
| 80 | + |
| 81 | + if (1 == digitalRead(certamenMode)) { |
| 82 | + lcd.print("Easter Egg #2"); |
| 83 | + delay(20); |
| 84 | + easterEgg2(); |
| 85 | + } |
| 86 | + else { |
| 87 | + easterEgg1(); |
| 88 | + } |
| 89 | +} |
| 90 | + |
0 commit comments