Adventskalender - Warten auf Weihnachten
Ein elektronischer Adventskalender. Mit Hilfe eines Arduinos und dem 12864 LCD aus dem Franzis
Lernpaket geht das recht einfach. Mit jedem Tag darf ein neues Türchen mit der rechten Displaytaste
geöffnet werden. Es dauert nicht mehr lange dann geht es los.
Die Anwendung
Die Funktionalität der Anwendung ist auf das Wesentliche reduziert. In einer Endlosschleife werden die beiden
Displaytaster abgefragt. Die rechte Taste zählt die Tage um eins nach oben. Die linke Taste ist für alle,
deren Schoko-Adventskalender den 24. nicht erlebt hat. Ich zähle mich dazu :).
Zuerst wird in den Videobuffer das Hintergrundbild geladen. Im Anschluss folgt die Darstellung der einzelnen Türchen. Eine Variable
für den aktuellen Tag dient als Indikator ob das jeweilige Türchen dargestellt wird oder nicht.
Der Adventskalender verwendet den Standardbefehlssatz der Display-API.
Hier geht's zum Download.
#include "Display.h" #include "SPI.h" #include "Advent.h" #define LCD_BUTTON_LEFT A4 #define LCD_BUTTON_RIGHT A5 Display lcd = Display(); byte day = 0; void setup() { lcd.init(20); pinMode(LCD_BUTTON_LEFT, INPUT_PULLUP); pinMode(LCD_BUTTON_RIGHT, INPUT_PULLUP); draw(); } void loop() { if (!digitalRead(LCD_BUTTON_LEFT)) { if (day != 0) { day--; } draw(); delay(200); } else if (!digitalRead(LCD_BUTTON_RIGHT)) { if (day < 24) { day++; } draw(); delay(200); } } void draw() { lcd.clearVideoBuffer(); lcd.drawBitmap(0, 0, 128, 64, background); if (day < 1) { drawWicket(15, 33, 1); } if (day < 2) { drawWicket(46, 33, 2); } if (day < 3) { drawWicket(1, 34, 3); } if (day < 4) { drawWicket(78, 1, 4); } if (day < 5) { drawWicket(40, 1, 5); } if (day < 6) { drawWicket(34, 49, 6); } if (day < 7) { drawWicket(25, 4, 7); } if (day < 8) { drawWicket(30, 33, 8); } if (day < 9) { drawWicket(3, 2, 9); } if (day < 10) { drawWicket(1, 45, 10); } if (day < 11) { drawWicket(1, 20, 11); } if (day < 12) { drawWicket(66, 30, 12); } if (day < 13) { drawWicket(51, 50, 13); } if (day < 14) { drawWicket(114, 2, 14); } if (day < 15) { drawWicket(60, 8, 15); } if (day < 16) { drawWicket(94, 27, 16); } if (day < 17) { drawWicket(80, 27, 17); } if (day < 18) { drawWicket(95, 45, 18); } if (day < 19) { drawWicket(16, 48, 19); } if (day < 20) { drawWicket(114, 17, 20); } if (day < 21) { drawWicket(114, 32, 21); } if (day < 22) { drawWicket(114, 45, 22); } if (day < 23) { drawWicket(64, 47, 23); } if (day < 24) { drawWicket(95, 1, 24); } lcd.show(); } void drawWicket(byte x, byte y, byte number) { lcd.drawBitmap(x, y, 14, 14, empty); lcd.invertRectangle(x, y, x+13, y + 13); char buffer[50]; sprintf(buffer, "%d", number); lcd.drawString(x+1, y+3, buffer); }
Links und Referenzen: