Sisukord:

Arduino keritav tekstikell: 3 sammu
Arduino keritav tekstikell: 3 sammu

Video: Arduino keritav tekstikell: 3 sammu

Video: Arduino keritav tekstikell: 3 sammu
Video: Уроки Ардуино #0 - что такое Arduino, куда подключаются датчики и как питать Ардуино 2024, November
Anonim
Arduino keritav tekstikell
Arduino keritav tekstikell

Selle projekti eesmärk on luua keriv tekstikell, mis kuvab kõne ajal kellaaega (näiteks „on kesköö”).

See on kiire projekt - me anname teile piisavalt riistvara ja visandiga alustamiseks ning seejärel saate seda vastavalt oma vajadustele edasi viia.

Samm: riistvara

Riistvara
Riistvara

Te vajate kolme peamist asja -

  • Arduino Uno-ühildumatu plaat
  • reaalajas kellaahel või moodul, mis kasutab kas DS1307 või DS3231 IC
  • ja ühevärviline P10-stiilis LED-ekraan

Võib -olla soovite välist toiteallikat, kuid me jõuame selleni hiljem.

Esimene etapp on teie reaalajas kella sobitamine. Juhendi saamiseks klõpsake siin, kui vajate selles osas abi.

Nüüdseks loodan, et mõtlete: "kuidas te aega seadistate?".

Sellele küsimusele on kaks vastust. Kui kasutate DS3231 -d, määrake see lihtsalt visandisse (vt allpool), kuna täpsus on väga hea, peate eskiisi uue ajaga üles laadima ainult kaks korda aastas, et katta suveaeg.

Vastasel korral lisage lihtne kasutajaliides-paar nuppu saab sellega hakkama. Lõpuks peate lihtsalt riistvara DMD tagaküljele panema. Teie vajaduste rahuldamiseks on palju võimalusi, lihtne lahendus võib olla juhtpaneeli joondamine, nii et pääsete hõlpsalt juurde USB -pesale - ja seejärel kleepige see mõne Sugruga alla.

Seoses kella sisselülitamisega - saate Arduino'st käivitada ÜHE LED -ekraani ja see töötab siseruumides hea heledusega. Kui soovite, et DMD töötaks täieliku, võrkkesta põletava heledusega, peate kasutama eraldi 5V 4A alalisvoolu toiteallikat. Kui kasutate kahte DMD -d - see läheb 8A -ni jne. Lihtsalt ühendage väline toide ühe DMD klemmiga (ühendage teine või mitu DMD -d nende klemmidega).

Kui te ei soovi toitekaabli otsa tükeldada, kasutage alalisvoolu pistikupesa.

Samm: Arduino visand

Peate installima järgmised kaks Arduino raamatukogu - TimerOne ja DMD. Seejärel laadige üles visand:

// RTC jaoks #lisage "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // DS1307 RTC on 0x68

// LED -ekraani jaoks

#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // teil võib olla rohkem kui üks DMD rida #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);

String finalString; // kasutatakse DMD -s kuvamiseks viimase lause hoidmiseks

void ScanDMD () // DMD jaoks vajalik

{dmd.scanDisplayBySPI (); }

tühine seadistus ()

{// DMD Timer1.initialize (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (tõene);

// RTC jaoks

Wire.begin (); // käivitada I2C bussi bait sekund, minut, tund, dayOfWeek, dayOfMonth, kuu, aasta; // muutujate muutmine ja kellaaja määramiseks setDateDs1307 kommentaaride tühistamine // seejärel funktsiooni uuesti kommenteerimine ja visandi uuesti üleslaadimine second = 0; minut = 13; tund = 23; nädala nädal = 4; dayOfMonth = 19; kuu = 5; aasta = 13; // setDateDs1307 (teine, minut, tund, päev, nädal, päev, kuu, aasta); }

// tavalised RTC funktsioonid

// Teisenda tavalised kümnendnumbrid kahekomponentseteks kümnendbaitideks decToBcd (bait val) {return ((val/10*16) + (val%10)); }

// Teisenda binaarselt kodeeritud kümnendarv tavalisteks kümnendarvudeks

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

void setDateDs1307 (bait sekund, // 0-59

bait minut, // 0-59 bait tund, // 1-23 bait dayOfWeek, // 1-7 bait dayOfMonth, // 1-28/29/byte month, // 1-12 byte year) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (teine)); // 0 kuni bitti 7 käivitab kella Wire.write (decToBcd (minut)); Wire.write (decToBcd (tund)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (kuu)); Wire.write (decToBcd (aasta)); Wire.write (00010000); // saadab 0x10 (hex) 00010000 (binaar) registrile - lülitab sisse ruutlaine Wire.endTransmission (); }

// Leiab kuupäeva ja kellaaja ds1307 -st

void getDateDs1307 (bait *sekund, bait *minut, bait *tund, bait *dayOfWeek, bait *dayOfMonth, bait *kuu, bait *aasta) {// lähtestage registri osuti Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();

Wire.requestFrom (DS1307_I2C_ADDRESS, 7);

// Mõned neist vajavad maske, sest teatud bitid on juhtbittid

*teine = bcdToDec (Wire.read () & 0x7f); *minut = bcdToDec (Wire.read ()); *tund = bcdToDec (Wire.read () & 0x3f); // Seda on vaja muuta, kui kell 12:00/pm *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *kuu = bcdToDec (Wire.read ()); *aasta = bcdToDec (Wire.read ()); }

void drawText (String oldString)

{dmd.clearScreen (tõsi); 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); pikk algus = millis (); pikk taimer = algus; pikk taimer2 = algus; boolean ret = vale; while (! ret) {if ((taimer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); taimer = millis (); }}}

void createTextTime (int hh, int mm)

// see koondab kogu aja andmed üheks lauseks tekstiks {finalString = ""; // pühi lause välja erijuhtudel (allpool) finalString = finalString+"See";

// lisage nüüd tund

if (hh == 1 || hh == 13) {finalString = finalString+"üks"; } kui (hh == 2 || hh == 14) {finalString = finalString+"kaks"; } kui (hh == 3 || hh == 15) {finalString = finalString+"kolm"; } kui (hh == 4 || hh == 16) {finalString = finalString+"neli"; } kui (hh == 5 || hh == 17) {finalString = finalString+"viis"; } kui (hh == 6 || hh == 18) {finalString = finalString+"kuus"; } kui (hh == 7 || hh == 19) {finalString = finalString+"seitse"; } kui (hh == 8 || hh == 20) {finalString = finalString+"kaheksa"; } kui (hh == 9 || hh == 21) {finalString = finalString+"üheksa"; } kui (hh == 10 || hh == 22) {finalString = finalString+"kümme"; } kui (hh == 11 || hh == 23) {finalString = finalString+"üksteist"; }

// lisage nüüd minutid

lüliti (mm) {juhtum 1: finalString = finalString+"oh one"; murda; juhtum 2: finalString = finalString+"oh two"; murda; juhtum 3: finalString = finalString+"oh three"; murda; juhtum 4: finalString = finalString+"oh four"; murda; juhtum 5: finalString = finalString+"oh five"; murda; juhtum 6: finalString = finalString+"oh six"; murda; juhtum 7: finalString = finalString+"oh seitse"; murda; juhtum 8: finalString = finalString+"oh kaheksa"; murda; juhtum 9: finalString = finalString+"oh nine"; murda; juhtum 10: finalString = finalString+"kümme"; murda; juhtum 11: finalString = finalString+"üksteist"; murda; juhtum 12: finalString = finalString+"kaksteist"; murda; juhtum 13: finalString = finalString+"kolmteist"; murda; juhtum 14: finalString = finalString+"neliteist"; murda; juhtum 15: finalString = finalString+"viisteist"; murda; juhtum 16: finalString = finalString+"kuusteist"; murda; juhtum 17: finalString = finalString+"seitseteist"; murda; juhtum 18: finalString = finalString+"kaheksateist"; murda; juhtum 19: finalString = finalString+"üheksateist"; murda; juhtum 20: finalString = finalString+"kakskümmend"; murda; juhtum 21: finalString = finalString+"kakskümmend üks"; murda; juhtum 22: finalString = finalString+"kakskümmend kaks"; murda; juhtum 23: finalString = finalString+"kakskümmend kolm"; murda; juhtum 24: finalString = finalString+"kakskümmend neli"; murda; juhtum 25: finalString = finalString+"kakskümmend viis"; murda; juhtum 26: finalString = finalString+"kakskümmend kuus"; murda; juhtum 27: finalString = finalString+"kakskümmend seitse"; murda; juhtum 28: finalString = finalString+"kakskümmend kaheksa"; murda; juhtum 29: finalString = finalString+"kakskümmend üheksa"; murda; juhtum 30: finalString = finalString+"kolmkümmend"; murda; juhtum 31: finalString = finalString+"kolmkümmend üks"; murda; juhtum 32: finalString = finalString+"kolmkümmend kaks"; murda; juhtum 33: finalString = finalString+"kolmkümmend kolm"; murda; juhtum 34: finalString = finalString+"kolmkümmend neli"; murda; juhtum 35: finalString = finalString+"kolmkümmend viis"; murda; juhtum 36: finalString = finalString+"kolmkümmend kuus"; murda; juhtum 37: finalString = finalString+"kolmkümmend seitse"; murda; juhtum 38: finalString = finalString+"kolmkümmend kaheksa"; murda; juhtum 39: finalString = finalString+"kolmkümmend üheksa"; murda; juhtum 40: finalString = finalString+"nelikümmend"; murda; juhtum 41: finalString = finalString+"nelikümmend üks"; murda; juhtum 42: finalString = finalString+"nelikümmend kaks"; murda; juhtum 43: finalString = finalString+"nelikümmend kolm"; murda; juhtum 44: finalString = finalString+"nelikümmend neli"; murda; juhtum 45: finalString = finalString+"nelikümmend viis"; murda; juhtum 46: finalString = finalString+"nelikümmend kuus"; murda; juhtum 47: finalString = finalString+"nelikümmend seitse"; murda; juhtum 48: finalString = finalString+"nelikümmend kaheksa"; murda; juhtum 49: finalString = finalString+"nelikümmend üheksa"; murda; juhtum 50: finalString = finalString+"viiskümmend"; murda; juhtum 51: finalString = finalString+"viiskümmend üks"; murda; juhtum 52: finalString = finalString+"viiskümmend kaks"; murda; juhtum 53: finalString = finalString+"viiskümmend kolm"; murda; juhtum 54: finalString = finalString+"viiskümmend neli"; murda; juhtum 55: finalString = finalString+"viiskümmend viis"; murda; juhtum 56: finalString = finalString+"viiskümmend kuus"; murda; juhtum 57: finalString = finalString+"viiskümmend seitse"; murda; juhtum 58: finalString = finalString+"viiskümmend kaheksa"; murda; juhtum 59: finalString = finalString+"viiskümmend üheksa"; murda; }

// keskpäeval?

if (hh == 12 && mm == 0) {finalString = finalString+"keskpäev"; } // kesköö? if (hh == 00 && mm == 0) {finalString = finalString+"kesköö"; }

}

tühine tsükkel ()

{// saada aega RTC baidist sekund, minut, tund, dayOfWeek, dayOfMonth, kuu, aasta; getDateDs1307 (& sekund, & minut, & tund, & dayOfWeek, & dayOfMonth, & kuu, & aasta);

// teisendada aeg lausetringiks

createTextTime (tund, minut);

// saatke tekst nüüd DMD -le

drawText (finalString); }

Visandil on tavapärased funktsioonid aja seadmiseks ja toomiseks reaalajas kella IC-delt DS1307/3232 ning nagu tavaliselt kõigi meie kellade puhul, saate sisestada ajateabe muutujatesse tühjas seadistuses (), seejärel uncomment setDateDs1307 (), laadige eskiis üles, kommenteerige uuesti setDateDs1307, seejärel laadige visand uuesti üles. Kui te ei lisanud ühtegi riistvarapõhist kasutajaliidest, korrake seda protsessi aja seadmiseks.

3. samm:

Kui aeg on void loopist () alla laaditud, edastatakse see funktsioonile createTextTime (). See funktsioon loob kuvatava tekstistringi, alustades sõnaga „See“, ja seejärel määrab olenevalt kellaajast, milliseid sõnu järgida. Lõpuks teisendab funktsioon drawText () teksti hoidva stringi kuvamiseks tähemärgimuutujaks, mille saab edastada DMD -le.

Soovitan: