In completarea articolului anterior, in care am realizat un ceas NTP pe afisaj 16c8 leduri adresabile, de data asta am optimizat programul, incluzand si selectie ora vara sau ora de iarna, dar si reglaj intensitate luminoasa pe timp de zi, respectiv noapte.
Pentru a putea selecta ora de vara sau de iarna, am ales solutia comutarii pinului analogic la +3,3V, respectic la masa (GND), asa ca schema ceasului devine
Am achizitionat un afisaj cu 32x8 leduri adresabile (WS2812) si am vrut sa reproduc proiectul WS2812-WeatherStation al lui 707pheonix
doar ca pana sa ma prind eu ca proiectul initial a fost facut pentru o matrice de 32 leduri la rand
s-a defectat de la jumatate, ramanand functional un 16x8
ulterior constatand ca sunt defecte 8 sau 9:
si ca matrice e altfel, cu 8 leduri pe coloana
si m-am apucat sa studiez programul original sa fac ceva cu partea ramasa... am observat ca in proiect sunt niste chestii interesante, asa ca le-am pastrat si am modificat caracterele sa folosesc cat mai mult din zona de 16x8.
Dar ceasul e prea static, asa ca am ales sa schimb culorile orelor, minutelor si secundelor, astfel:
ca rezumat, folosesc 6 culori principale (din cele 8 principale posibile, adica fara alb si negru), ce se schimba la fiecare 10 minute si la fiecare secunda, respectiv la fiecare ora astfel:
- orele 0, 6, 12 si 18, minutele cu valoare mai mica de 10 (format general 0x), respectiv secundele 0, 6, 12, 18, 24, 30, 36, 42, 48, 54 apar in culoarea albastru;
- orele 1, 7, 13 si 19, minutele intre 10 si 19 (format general 1x), respectiv secundele 1,7, 13, 19, 25, 31, 37, 43, 49, 55 apar in culoarea verde;
- orele 2, 8, 14 si 20, minutele intre 20 si 29 (format general 2x), respectiv secundele 2,8, 14, 20, 26, 32, 38, 44, 50, 56 apar in culoarea bleo (albastru-verzui sau verde-albastrui);
- orele 3, 9, 15 si 21, minutele intre 30 si 39 (format general 3x), respectiv secundele 3,9, 15, 21, 27, 33, 39, 45, 51, 57 apar in culoarea rosie;
- orele 4, 10, 16 si 22, minutele intre 40 si 49 (format general 4x), respectiv secundele 4,10, 16, 22, 28, 34, 40, 46, 52, 58 apar in culoarea mov;
- orele 5, 11, 17 si 23, minutele intre 50 si 59 (format general 5x), respectiv secundele 5, 11, 17, 23, 29, 35, 41, 47, 53, 59 apar in culoarea galbena.
Pentru a fi mai convingator, am facut poze la orele 10 cand acestea au culoarea galbena, respectiv orele 11 cand acestea au culoarea galbena:
- minute 0x, albastre:
- minute 1x, verzi:
- minute 2x, bleo:
- minute 3x, rosii
- minute 4x, mov:
- minute 5x, galbene:
si, dupa cum era de asteptat, ora 12:0x are toate cifrele doar in albastru
Programul modificat este NTP_clock_16x8_WS2812_v1b.ino si modul de prezentare a orelor este mult mai clar in cele 2 filmultele:
In perioada urmatoare, o sa adaug selectie ora de vara/iarna, un control al intensitatii (zi/noapte), poate si ceas in format de 12 ore... totul in functie de timpul liber.
Fata de ce am prezentat in articolul anterior, acum am modificat ca un minut sa am ceasul ca in articolul anterior si in urmatorul sa fie doar un ceas analogic mare.
Schema de conectare a ramas identica, fara nici o modificare:
Diferenta mare e ca afisajul cu ILI9341 are rezolutie 320x240, iar cel cu ST7789 are 240x240, asa ca a trebuit sa modific programul pentru a incapea si ceasul analogic si cel digital. Am pastrat dimensiunea caracterelor pentru ceasul digital si am redus dimensiunea ceasului analog, care e doar informativ.
- ceas "original" pe afisajul cu rezolutie 320x240
- ceas pe afisajul cu rezolutie 240x240
Programul folosit este similar cu cel din programul anterior, doar ca este adaptat la afisajul cu ST7789 ce functioneaza cu biblioteca Bodmer/TFT_eSPI si am modificat ca pinul analogic sa fie cel ce face selectia de ora de vara sau de iarna. De asemenea, trebuie modificat, pentru ST7789, si fisierul User_setup.h care este in interiorul bibliotecii TFT_eSPI, la mine este asa:
Schema de conectare este:
In functie de pozitia comutatorului (sau conectarea pinului analogic A0), avem: