Tartalomjegyzék:

Arduino görgető szöveges óra: 3 lépés
Arduino görgető szöveges óra: 3 lépés

Videó: Arduino görgető szöveges óra: 3 lépés

Videó: Arduino görgető szöveges óra: 3 lépés
Videó: How measure DC Voltage and Current and build Energy meter with LCD Display | Lesson 104 2024, Július
Anonim
Arduino görgető szöveg óra
Arduino görgető szöveg óra

Ennek a projektnek az a célja, hogy felépítsen egy görgethető szöveges órát, amely megjeleníti az időt beszéd közben (például „éjfél van”).

Ez egy gyors projekt - eleget adunk a hardver és a vázlat elindításához, majd továbbviheti igényeinek megfelelően.

1. lépés: Hardver

Hardver
Hardver

Három fő elemre lesz szüksége -

  • egy Arduino Uno-kompatibilis tábla
  • valós idejű óraáramkör vagy modul DS1307 vagy DS3231 IC használatával
  • és monokróm P10 stílusú LED kijelző

Lehet, hogy külső tápegységet szeretne, de erre később térünk rá.

Az első lépés az, hogy illeszkedjen a valós idejű órájához. Kattintson ide az oktatóanyagért, ha segítségre van szüksége.

Remélem, most arra gondol, hogy „hogyan állítsa be az időt?”.

Erre a kérdésre két válasz van. Ha a DS3231 készüléket használja, csak állítsa be a vázlatba (lásd alább), mivel a pontosság nagyon jó, a nyári időszámítás érdekében csak évente kétszer kell feltöltenie a vázlatot az új idővel.

Ellenkező esetben adjon hozzá egy egyszerű felhasználói felületet-néhány gomb megteheti. Végül csak a hardvert kell elhelyezni a DMD hátoldalán. Rengeteg lehetőség van a saját igényeinek kielégítésére, egyszerű megoldás lehet a vezérlőpult összehangolása, hogy könnyedén hozzáférhessen az USB -aljzathoz - majd rögzítse néhány Sugru -val.

Ami az óra áramellátását illeti - futtathat ONE LED kijelzőt az Arduino -ból, és jó fényerővel működik beltéri használatra. Ha azt szeretné, hogy a DMD teljes, retina égető fényerővel működjön, akkor külön 5V 4A DC tápegységet kell használnia. Ha két DMD -t használ - ez 8A -ra megy, és így tovább. Egyszerűen csatlakoztassa a külső tápellátást egy DMD terminálhoz (csatlakoztassa a második vagy több DMD -t ezekhez a terminálokhoz).

Ha nem szeretné elvágni a tápkábel végét, használjon egyenáramú aljzatot.

2. lépés: Az Arduino vázlat

Telepítenie kell a következő két Arduino könyvtárat - a TimerOne és a DMD. Ezután töltse fel a vázlatot:

// RTC esetén #tartalmazza a "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // a DS1307 RTC 0x68

// LED kijelzőhöz

#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // több DMD is lehet egy sor #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);

Karakterlánc finalString; // a DMD -n megjelenítendő utolsó mondat megtartására szolgál

void ScanDMD () // szükséges a DMD -hez

{dmd.scanDisplayBySPI (); }

üres beállítás ()

{// DMD Timer1.initialize (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (igaz);

// az RTC számára

Wire.begin (); // az I2C busz bájtjának felgyújtása másodperc, perc, óra, dayOfWeek, dayOfMonth, month, year; // módosítsa a változókat, és vegye ki a setDateDs1307 megjegyzését az idő beállításához // majd írja le újra a függvényt, és töltse fel újra a vázlatot second = 0; perc = 13; óra = 23; dayOfWeek = 4; dayOfMonth = 19; hónap = 5; év = 13; // setDateDs1307 (másodperc, perc, óra, nap, hét, nap, hónap, év, hónap); }

// szokásos RTC funkciók

// A normál tizedes számok konvertálása binárisan kódolt decimális bájtra decToBcd (byte val) {return ((val/10*16) + (val%10)); }

// Konvertálja a binárisan kódolt tizedest normál tizedes számokká

bájt bcdToDec (bájt val) {return ((val/16*10) + (val%16)); }

void setDateDs1307 (második bájt, // 0-59

bájt perc, // 0-59 bájt óra, // 1-23 bájt napHét, // 1-7 bájtnapHónap, // 1-28/29/bájt hónap, // 1-12 bájt év) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Vezeték.írás (0); Wire.write (decToBcd (második)); // 0 -tól 7 -es bitig elindítja az órát Wire.write (decToBcd (perc)); Wire.write (decToBcd (óra)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (hónap)); Wire.write (decToBcd (év)); Wire.write (00010000); // 0x10 (hexadecimális) 00010000 (bináris) értéket küld a vezérlőregiszterhez - bekapcsolja a négyzethullámot Wire.endTransmission (); }

// Lekéri a dátumot és az időt a ds1307 -ből

void getDateDs1307 (bájt *másodperc, bájt *perc, bájt *óra, bájt *napOfWeek, bájt *napHónap, bájt *hónap, bájt *év) {// A regisztermutató visszaállítása Wire.beginTransmission (DS1307_I2C_ADDRESS); Vezeték.írás (0); Wire.endTransmission ();

Wire.requestFrom (DS1307_I2C_ADDRESS, 7);

// Ezek közül néhánynak maszkra van szüksége, mert bizonyos bitek vezérlőbitek

*second = bcdToDec (Wire.read () & 0x7f); *perc = bcdToDec (Wire.read ()); *óra = bcdToDec (Wire.read () & 0x3f); // Ezen változtatni kell, ha 12 óra am/pm *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *hónap = bcdToDec (Wire.read ()); *év = bcdToDec (Wire.read ()); }

void drawText (String oldString)

{dmd.clearScreen (igaz); dmd.selectFont (Arial_Black_16); char newString [256]; int sLength = oldString.length (); oldString.toCharArray (newString, sLength+1); dmd.drawMarquee (newString, sLength, (32*DISPLAYS_ACROSS) -1, 0); hosszú kezdés = millis (); hosszú időzítő = indítás; hosszú időzítő2 = indítás; logikai ret = hamis; while (! ret) {if ((timer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); időzítő = millis (); }}}

void createTextTime (int ó, int mm)

// ez minden mondatot szöveggé tömörít egy mondatként {finalString = ""; // törölje ki a mondatot különleges esetekben (alább) finalString = finalString+"Ez";

// most add hozzá az órát

if (hh == 1 || hh == 13) {finalString = finalString+"egy"; } if (hh == 2 || hh == 14) {finalString = finalString+"kettő"; } if (hh == 3 || hh == 15) {finalString = finalString+"three"; } if (hh == 4 || hh == 16) {finalString = finalString+"négy"; } if (hh == 5 || hh == 17) {finalString = finalString+"öt"; } if (hh == 6 || hh == 18) {finalString = finalString+"hat"; } if (hh == 7 || hh == 19) {finalString = finalString+"hét"; } if (hh == 8 || hh == 20) {finalString = finalString+"nyolcas"; } if (hh == 9 || hh == 21) {finalString = finalString+"nine"; } if (hh == 10 || hh == 22) {finalString = finalString+"tíz"; } if (hh == 11 || hh == 23) {finalString = finalString+"tizenegy"; }

// most add hozzá a jegyzőkönyvet

kapcsoló (mm) {1. eset: finalString = finalString+"oh one"; szünet; 2. eset: finalString = finalString+"oh two"; szünet; 3. eset: finalString = finalString+"oh three"; szünet; 4. eset: finalString = finalString+"ó négy"; szünet; 5. eset: finalString = finalString+"ó öt"; szünet; 6. eset: finalString = finalString+"oh six"; szünet; 7. eset: finalString = finalString+"oh seven"; szünet; 8. eset: finalString = finalString+"oh eight"; szünet; 9. eset: finalString = finalString+"ó kilenc"; szünet; 10. eset: finalString = finalString+"tíz"; szünet; 11. eset: finalString = finalString+"tizenegy"; szünet; 12. eset: finalString = finalString+"tizenkét"; szünet; 13. eset: finalString = finalString+"thirteen"; szünet; 14. eset: finalString = finalString+"tizennégy"; szünet; 15. eset: finalString = finalString+"tizenöt"; szünet; 16. eset: finalString = finalString+"tizenhat"; szünet; 17. eset: finalString = finalString+"tizenhét"; szünet; 18. eset: finalString = finalString+"tizennyolc"; szünet; 19. eset: finalString = finalString+"tizenkilenc"; szünet; 20. eset: finalString = finalString+"húsz"; szünet; 21. eset: finalString = finalString+"huszonegy"; szünet; 22. eset: finalString = finalString+"huszonkettő"; szünet; 23. eset: finalString = finalString+"huszonhárom"; szünet; 24. eset: finalString = finalString+"huszonnégy"; szünet; 25. eset: finalString = finalString+"huszonöt"; szünet; 26. eset: finalString = finalString+"huszonhat"; szünet; 27. eset: finalString = finalString+"huszonhét"; szünet; 28. eset: finalString = finalString+"huszonnyolc"; szünet; 29. eset: finalString = finalString+"huszonkilenc"; szünet; 30. eset: finalString = finalString+"harminc"; szünet; 31. eset: finalString = finalString+"harmincegy"; szünet; 32. eset: finalString = finalString+"harminckettő"; szünet; 33. eset: finalString = finalString+"harminchárom"; szünet; 34. eset: finalString = finalString+"harmincnégy"; szünet; 35. eset: finalString = finalString+"harmincöt"; szünet; 36. eset: finalString = finalString+"harminchat"; szünet; 37. eset: finalString = finalString+"harminchét"; szünet; 38. eset: finalString = finalString+"harmincnyolc"; szünet; 39. eset: finalString = finalString+"harminckilenc"; szünet; 40. eset: finalString = finalString+"negyven"; szünet; 41. eset: finalString = finalString+"negyvenegy"; szünet; 42. eset: finalString = finalString+"negyvenkettő"; szünet; 43. eset: finalString = finalString+"negyvenhárom"; szünet; 44. eset: finalString = finalString+"negyvennégy"; szünet; 45. eset: finalString = finalString+"negyvenöt"; szünet; 46. eset: finalString = finalString+"negyvenhat"; szünet; 47. eset: finalString = finalString+"negyvenhét"; szünet; 48. eset: finalString = finalString+"negyvennyolc"; szünet; 49. eset: finalString = finalString+"negyvenkilenc"; szünet; 50. eset: finalString = finalString+"ötven"; szünet; 51. eset: finalString = finalString+"ötvenegy"; szünet; 52. eset: finalString = finalString+"ötvenkettő"; szünet; 53. eset: finalString = finalString+"ötvenhárom"; szünet; 54. eset: finalString = finalString+"ötvennégy"; szünet; 55. eset: finalString = finalString+"ötvenöt"; szünet; 56. eset: finalString = finalString+"ötvenhat"; szünet; 57. eset: finalString = finalString+"ötvenhét"; szünet; 58. eset: finalString = finalString+"ötvennyolc"; szünet; 59. eset: finalString = finalString+"ötvenkilenc"; szünet; }

// délben?

if (óó == 12 && mm == 0) {finalString = finalString+"dél"; } // éjfél? if (óó == 00 && mm == 0) {finalString = finalString+"éjfél"; }

}

üres hurok ()

{// az idő lekérése az RTC bájtból másodperc, perc, óra, dayOfWeek, dayOfMonth, hónap, év; getDateDs1307 (& másodperc, & perc, & óra, & dayOfWeek, & dayOfMonth, & hónap, & év);

// konvertálja az időt egy mondat karakterlánccá

createTextTime (óra, perc);

// most küldje el a szöveget a DMD -nek

drawText (finalString); }

A vázlat a szokásos funkciókkal rendelkezik az idő beállításához és lekéréséhez a DS1307/3232 valós idejű óra IC-kből, és szokás szerint minden órajelünkkel megadhatja az időinformációt a void setup (), majd a setDateDs1307 (), töltse fel a vázlatot, és írja be újra a setDateDs1307 megjegyzést, majd töltse fel még egyszer a vázlatot. Ismételje meg ezt a folyamatot az idő újbóli beállításához, ha nem adott hozzá hardver alapú felhasználói felületet.

3. lépés:

Miután az időt lekérte a void loop () -ban, azt a createTextTime () függvénynek adják át. Ez a funkció létrehozza a megjelenítendő szöveges karakterláncot az „Ez” betűvel kezdődően, majd az aktuális idő függvényében meghatározza, hogy mely szavakat kell követni. Végül a drawText () függvény a szöveget tartalmazó karakterláncot karakterváltozóvá alakítja, amelyet át lehet adni a DMD -nek.

Ajánlott: