Fórum témák
» Több friss téma |
Cikkek » IV-12 VFD Óra - Egy digit IV-12 VFD Óra - Egy digit
Szerző: tomcii, idő: Sze, 17:56, Olvasva: 259, Oldal olvasási idő: kb. 3 perc
Részletekre fogom bontani a programot és igyekszem a legérthetőbben elmagyarázni, mi is történik. Definiciók: Itt történnek a könyvtárak meghívásai, mely sorrendben:
Konstansok: const int pinTest = 10; // Teszt gomb Szegmensekhez tartozó bájt: (Kommentben a port neve és száma, hogy hová csatlakozik) byte segment[] = { 2, // segmA = PD2 }; LED-ekhez tartozó bájt: (Kommentben a port neve és száma, hogy hová csatlakozik)
A0, // Hours 1st place = PC0 byte second=0, minute=0, hour=0; // Óra, perc, másodperc bájtjai A void setup() minden esetben csak egyetlen egyszer fut le, épp ezért ha bekapcsolásnál a "TEST" gombot nyomva tartjuk akkor fog a program beugrani a tesztmódba, amit fentebb már taglaltam. Azon felül a LED-ek és a szegmensek bájtjának inicializálása történik itt, valamint az I2C (Wire.begin()) kommunikációnak az elindítása. byte init_segm; // Test all the segments and leds when holding the "TEST" button during powering up (When the for cycle finishes it will return to the loop) if (digitalRead(pinTest) == HIGH) { int led = 0; int segm = 0; for (segm = 0; segm < 8; segm++) { digitalWrite(segment[segm], LOW); delay(test_delay); } for (led = 0; led < 4; led++) { digitalWrite(leds[led], HIGH); delay(test_delay); } } }
A void loop() minden ciklusban lefut, így ebbe helyeztem el két fontos alprogramot, melyek sorrendben updateTime(), valamint printTime(). Az updateTime() alprogramban az idő kerül kiolvasásra, és értelemszerűen a printTime() alprogramban pedig kijelzésre kerül az idő, mely kiolvasásra került. void loop() { Az updateTime() alprogramban BCD-ből DEC-be való konvertálás történik valamint az idő kiolvasása a DS3231-es RTC modulból és az idő felbontása másodpercekre, percre és órára. void updateTime() { A printTime() alporgramban történik a 24 órás formátum beállítása, valamint a LED-ek vezérlése mely az óráknál és a percek kijelzésekor villan fel a könnyebb leolvasás érdekében. Az órák (hh) és percek (mm) kijelzését követően egy 2 másodperces késleltetés következik. byte printTimeVar; // Hours 1 for (printTimeVar = 0; printTimeVar < 8; printTimeVar++) { // Hours 2 for (printTimeVar = 0; printTimeVar < 8; printTimeVar++) {
for (printTimeVar = 0; printTimeVar < 8; printTimeVar++) { // Minutes 2 for (printTimeVar = 0; printTimeVar < 8; printTimeVar++) { } A print7Digit() alprogramban egy bitmező került kialakításra a kijelző egyes szegmenseinek a vezérlésére. void print7Digit(byte number) { A program végén pedig decimálisból bináris kódba valamint bináris kódból decimálisba való alakítás történik byte DECTOBCD(byte val) { Ennyit a programról. Természetesen a cikkem végén közzéteszem az .ino fájlt ha valaki szeretné szerkeszteni, vagy csak tanulni belőle. A cikk még nem ért véget, lapozz! Értékeléshez bejelentkezés szükséges! |
Bejelentkezés
Hirdetés |