Përmbajtje:

Ora e tekstit me rrotullim Arduino: 3 hapa
Ora e tekstit me rrotullim Arduino: 3 hapa

Video: Ora e tekstit me rrotullim Arduino: 3 hapa

Video: Ora e tekstit me rrotullim Arduino: 3 hapa
Video: Lesson 02 Arduino IDE Software | Robojax Arduino Step By Step Course 2024, Nëntor
Anonim
Ora e tekstit me rrotullim Arduino
Ora e tekstit me rrotullim Arduino

Qëllimi i këtij projekti është të ndërtojë një orë teksti rrotulluese që shfaq kohën kur flitet (për shembull, "është mesnatë").

Ky është një projekt i shpejtë - ne ju japim mjaftueshëm për të vazhduar me harduerin dhe skicën, dhe më pas mund ta çoni më tej për t’iu përshtatur nevojave tuaja.

Hapi 1: Pajisje kompjuterike

Hardware
Hardware

Do t'ju duhen tre artikuj kryesorë -

  • një bord Arduino Uno-compatible
  • një qark orësh në kohë reale ose modul duke përdorur ose një IC DS1307 ose DS3231
  • dhe një ekran LED njëngjyrësh të stilit P10

Ju mund të dëshironi një furnizim me energji të jashtme, por ne do ta arrijmë atë më vonë.

Faza e parë është të përshtatni orën tuaj në kohë reale. Klikoni këtu për tutorialin nëse keni nevojë për ndihmë me këtë.

Tani shpresoj se po mendoni "si e caktoni kohën?".

Ka dy përgjigje për atë pyetje. Nëse jeni duke përdorur DS3231 thjesht vendoseni në skicë (shiko më poshtë) pasi saktësia është shumë e mirë, ju vetëm duhet të ngarkoni skicën me kohën e re dy herë në vit për të mbuluar kursimet e ditës.

Përndryshe shtoni një ndërfaqe të thjeshtë përdoruesi-disa butona mund ta bëjnë këtë. Më në fund ju vetëm duhet të vendosni harduerin në pjesën e pasme të DMD. Ka shumë hapësirë për të përmbushur nevojat tuaja, një zgjidhje e thjeshtë mund të jetë të rreshtoni bordin e kontrollit në mënyrë që të keni qasje në prizën USB me lehtësi - dhe më pas ta fikni me disa Sugru.

Në lidhje me fuqizimin e orës - mund të përdorni një ekran LED nga Arduino, dhe funksionon me një shkëlqim të mirë për përdorim të brendshëm. Nëse dëshironi që DMD të funksionojë plotësisht, shkëlqimi që digjet në retinë duhet të përdorni një furnizim me energji të veçantë 5V 4A DC. Nëse jeni duke përdorur dy DMD - kjo shkon në 8A, dhe kështu me radhë. Thjesht lidhni fuqinë e jashtme me një terminal të një DMD (lidhni DMD -të e dytë ose më shumë me këto terminale).

Nëse nuk dëshironi të copëtoni fundin e kabllit tuaj të furnizimit me energji, përdorni një dalje të prizës DC.

Hapi 2: Skica Arduino

Ju do të duhet të instaloni dy bibliotekat e mëposhtme Arduino - TimerOne dhe DMD. Pastaj ngarkoni skicën:

// për RTC #përfshini "Wire.h" #përcaktoni DS1307_I2C_ADDRESS 0x68 // RTC DS1307 është 0x68

// për ekran LED

#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // ju mund të keni më shumë se një DMD në një rreshti #përcakto DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);

Vargu finalString; // përdoret për të mbajtur fjalinë përfundimtare për t'u shfaqur në DMD

void ScanDMD () // e nevojshme për DMD

{dmd.scanDisplayBySPI (); }

void setup ()

{// për DMD Timer1.initialize (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (e vërtetë);

// për RTC

Wire.begin (); // ndez bajtin e autobusit I2C sekondë, minutë, orë, ditëOfWeek, dayOfMonth, muaj, vit; // ndryshoni variablat dhe komentoni setDateDs1307 për të vendosur kohën // pastaj ri-komentoni funksionin dhe ngarkoni skicën përsëri së dyti = 0; minutë = 13; orë = 23; dita e Javës = 4; dita e muajit = 19; muaji = 5; viti = 13; // setDateDs1307 (e dyta, minuta, ora, dita e Javës, dita e Muajit, muaji, viti); }

// funksionet e zakonshme të RTC

// Shndërroni numrat dhjetorë normalë në bajt dhjetor të koduar binar decToBcd (byte val) {return ((val/10*16) + (val%10)); }

// Shndërroni dhjetorin e koduar binar në numra dhjetorë normalë

byte bcdToDec (byte val) {return ((val/16*10) + (val%16)); }

void setDateDs1307 (bajt i dyti, // 0-59

minutë byte, // 0-59 orë bajt, // 1-23 ditë bajtOfWeek, // 1-7 ditë byteOmMest, // 1-28/29/muaj bajt, // 1-12 byte vit) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (e dyta)); // 0 në bit 7 fillon orën Wire.write (decToBcd (minutë)); Wire.write (decToBcd (orë)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (muaj)); Wire.write (decToBcd (viti)); Wire.write (00010000); // dërgon 0x10 (hex) 00010000 (binar) për të kontrolluar regjistrin - ndez valën katrore Wire.endTransmission (); }

// Merr datën dhe kohën nga ds1307

void getDateDs1307 (bajt *i dytë, bajt *minutë, bajt *orë, bajt *dayOfWeek, bajt *ditëOmMth, bajt *muaj, bajt *vit) {// Rivendos treguesin e regjistrit Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();

Tela. KërkohetNga (DS1307_I2C_ADDRESS, 7);

// Disa nga këto kanë nevojë për maska sepse pjesë të caktuara janë pjesë kontrolli

*e dyta = bcdToDec (Wire.read () & 0x7f); *minutë = bcdToDec (Wire.read ()); *orë = bcdToDec (Wire.read () & 0x3f); // Duhet të ndryshohet kjo nëse 12 orë paradite/pasdite *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *muaj = bcdToDec (Wire.read ()); *vit = bcdToDec (Wire.read ()); }

void drawText (String oldString)

{dmd.clearScreen (e vërtetë); 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); fillim i gjatë = millis (); kohëmatës i gjatë = fillimi; kohëmatësi i gjatë2 = fillimi; boolean ret = false; ndërsa (! ret) {nëse ((kohëmatësi+20) <milis ()) {ret = dmd.stepMarquee (-1, 0); kohëmatësi = milis (); }}}

void createTextTime (int hh, int mm)

// kjo grumbullon të gjitha të dhënat e kohës në tekst si një fjali {finalString = ""; // fshij fjalinë për raste të veçanta (më poshtë) finalString = finalString+"It's";

// tani shto orën

nëse (hh == 1 || hh == 13) {finalString = finalString+"një"; } if (hh == 2 || hh == 14) {finalString = finalString+"dy"; } if (hh == 3 || hh == 15) {finalString = finalString+"tre"; } nëse (hh == 4 || hh == 16) {finalString = finalString+"katër"; } if (hh == 5 || hh == 17) {finalString = finalString+"pesë"; } nëse (hh == 6 || hh == 18) {finalString = finalString+"gjashtë"; } if (hh == 7 || hh == 19) {finalString = finalString+"shtatë"; } if (hh == 8 || hh == 20) {finalString = finalString+"tetë"; } if (hh == 9 || hh == 21) {finalString = finalString+"nëntë"; } nëse (hh == 10 || hh == 22) {finalString = finalString+"dhjetë"; } if (hh == 11 || hh == 23) {finalString = finalString+"njëmbëdhjetë"; }

// tani shtoni minutat

kaloni (mm) {rasti 1: finalString = finalString+"oh one"; pushim; rasti 2: finalString = finalString+"oh dy"; pushim; rasti 3: finalString = finalString+"oh tre"; pushim; rasti 4: finalString = finalString+"oh katër"; pushim; rasti 5: finalString = finalString+"oh pesë"; pushim; rasti 6: finalString = finalString+"oh gjashtë"; pushim; rasti 7: finalString = finalString+"oh shtatë"; pushim; rasti 8: finalString = finalString+"oh tetë"; pushim; rasti 9: finalString = finalString+"oh nëntë"; pushim; rasti 10: finalString = finalString+"dhjetë"; pushim; rasti 11: finalString = finalString+"njëmbëdhjetë"; pushim; rasti 12: finalString = finalString+"dymbëdhjetë"; pushim; rasti 13: finalString = finalString+"trembëdhjetë"; pushim; rasti 14: finalString = finalString+"katërmbëdhjetë"; pushim; rasti 15: finalString = finalString+"pesëmbëdhjetë"; pushim; rasti 16: finalString = finalString+"sixteen"; pushim; rasti 17: finalString = finalString+"shtatëmbëdhjetë"; pushim; rasti 18: finalString = finalString+"tetëmbëdhjetë"; pushim; rasti 19: finalString = finalString+"nëntëmbëdhjetë"; pushim; rasti 20: finalString = finalString+"njëzet"; pushim; rasti 21: finalString = finalString+"njëzet e një"; pushim; rasti 22: finalString = finalString+"njëzet e dy"; pushim; rasti 23: finalString = finalString+"njëzet e tre"; pushim; rasti 24: finalString = finalString+"njëzet e katër"; pushim; rasti 25: finalString = finalString+"njëzet e pesë"; pushim; rasti 26: finalString = finalString+"njëzet e gjashtë"; pushim; rasti 27: finalString = finalString+"njëzet e shtatë"; pushim; rasti 28: finalString = finalString+"njëzet e tetë"; pushim; rasti 29: finalString = finalString+"njëzet e nëntë"; pushim; rasti 30: finalString = finalString+"tridhjetë"; pushim; rasti 31: finalString = finalString+"tridhjetë e një"; pushim; rasti 32: finalString = finalString+"tridhjetë e dy"; pushim; rasti 33: finalString = finalString+"tridhjetë e tre"; pushim; rasti 34: finalString = finalString+"tridhjetë e katër"; pushim; rasti 35: finalString = finalString+"tridhjetë e pesë"; pushim; rasti 36: finalString = finalString+"tridhjetë e gjashtë"; pushim; rasti 37: finalString = finalString+"tridhjetë e shtatë"; pushim; rasti 38: finalString = finalString+"tridhjetë e tetë"; pushim; rasti 39: finalString = finalString+"tridhjetë e nëntë"; pushim; rasti 40: finalString = finalString+"dyzet"; pushim; rasti 41: finalString = finalString+"dyzet e një"; pushim; rasti 42: finalString = finalString+"dyzet e dy"; pushim; rasti 43: finalString = finalString+"dyzet e tre"; pushim; rasti 44: finalString = finalString+"dyzet e katër"; pushim; rasti 45: finalString = finalString+"dyzet e pesë"; pushim; rasti 46: finalString = finalString+"dyzet e gjashtë"; pushim; rasti 47: finalString = finalString+"dyzet e shtatë"; pushim; rasti 48: finalString = finalString+"dyzet e tetë"; pushim; rasti 49: finalString = finalString+"dyzet e nëntë"; pushim; rasti 50: finalString = finalString+"pesëdhjetë"; pushim; rasti 51: finalString = finalString+"pesëdhjetë e një"; pushim; rast 52: finalString = finalString+"pesëdhjetë e dy"; pushim; rasti 53: finalString = finalString+"pesëdhjetë e tre"; pushim; rasti 54: finalString = finalString+"pesëdhjetë e katër"; pushim; rasti 55: finalString = finalString+"pesëdhjetë e pesë"; pushim; rasti 56: finalString = finalString+"pesëdhjetë e gjashtë"; pushim; rast 57: finalString = finalString+"pesëdhjetë e shtatë"; pushim; rast 58: finalString = finalString+"pesëdhjetë e tetë"; pushim; rasti 59: finalString = finalString+"pesëdhjetë e nëntë"; pushim; }

// mesditë?

nëse (hh == 12 && mm == 0) {finalString = finalString+"mesditë"; } // mesnate? nëse (hh == 00 && mm == 0) {finalString = finalString+"mesnatë"; }

}

lak void ()

{// merrni kohën nga bajti i RTC sekondës, minutës, orës, ditës së javës, ditës së muajit, muajit, vitit; getDateDs1307 (& e dyta, & minutë, & orë, & dayOfWeek, & dayOfMonth, & month, & year);

// shndërroni kohën në varg fjalie

createTextTime (orë, minutë);

// tani dërgoni tekstin në DMD

drawText (vargu përfundimtar); }

Skica ka funksionet e zakonshme për të vendosur dhe marrë kohën nga IC-të e orës në kohë reale DS1307/3232, dhe si zakonisht me të gjitha orët tona mund të futni informacionin e kohës në variablat në void setup (), pastaj të mos komentoni setDateDs1307 (), ngarkoni skicën, ri-komentoni setDateDs1307, pastaj ngarkoni skicën edhe një herë. Përsëriteni atë proces për të rivendosur kohën nëse nuk keni shtuar ndonjë ndërfaqe të përdoruesit të bazuar në harduer.

Hapi 3:

Pasi të merret koha në lakun e pavlefshëm (), i kalohet funksionit createTextTime (). Ky funksion krijon vargun e tekstit për tu shfaqur duke filluar me "“shtë", dhe më pas përcakton cilat fjalë të ndiqen në varësi të kohës aktuale. Së fundi funksioni drawText () konverton vargun që mban tekstin për t'u shfaqur në një ndryshore karakteri e cila mund të kalohet në DMD.

Recommended: