Satura rādītājs:

Arduino ritināšanas teksta pulkstenis: 3 soļi
Arduino ritināšanas teksta pulkstenis: 3 soļi

Video: Arduino ritināšanas teksta pulkstenis: 3 soļi

Video: Arduino ritināšanas teksta pulkstenis: 3 soļi
Video: GSM/GPRS Shield, модуль A6 для Arduino/Piranha 2024, Jūlijs
Anonim
Arduino ritināšanas teksta pulkstenis
Arduino ritināšanas teksta pulkstenis

Šī projekta mērķis ir izveidot ritinošu teksta pulksteni, kas parāda laiku, kad tas tiek runāts (piemēram, “ir pusnakts”).

Šis ir ātrs projekts - mēs jums dodam pietiekami daudz, lai sāktu darbu ar aparatūru un skicēm, un tad jūs varat to virzīt tālāk atbilstoši savām vajadzībām.

1. darbība. Aparatūra

Aparatūra
Aparatūra

Jums būs nepieciešami trīs galvenie priekšmeti -

  • ar Arduino Uno saderīga tāfele
  • reālā laika pulksteņa ķēde vai modulis, izmantojot DS1307 vai DS3231 IC
  • un vienkrāsains P10 stila LED displejs

Jūs varētu vēlēties ārēju barošanas avotu, bet mēs pie tā nonāksim vēlāk.

Pirmais posms ir pielāgot jūsu reālā laika pulksteni. Noklikšķiniet šeit, lai iegūtu apmācību, ja jums nepieciešama palīdzība šajā jautājumā.

Tagad es ceru, ka jūs domājat: “Kā noteikt laiku?”.

Uz šo jautājumu ir divas atbildes. Ja izmantojat DS3231, vienkārši iestatiet to skicē (skatiet zemāk), jo precizitāte ir ļoti laba, jums ir nepieciešams augšupielādēt skici ar jauno laiku divas reizes gadā, lai segtu vasaras laiku.

Pretējā gadījumā pievienojiet vienkāršu lietotāja interfeisu-pāris pogas to varētu izdarīt. Visbeidzot, jums vienkārši jāievieto aparatūra DMD aizmugurē. Ir daudz iespēju, lai apmierinātu savas vajadzības, vienkāršs risinājums varētu būt vadības paneļa izlīdzināšana, lai jūs varētu viegli piekļūt USB ligzdai - un pēc tam pielīmējiet to ar dažiem Sugru.

Kas attiecas uz pulksteņa barošanu - no Arduino varat darbināt VIENU LED displeju, un tas darbojas labā spilgtumā lietošanai iekštelpās. Ja vēlaties, lai DMD darbotos ar pilnu, tīklenes degšanas spilgtumu, jāizmanto atsevišķs 5V 4A līdzstrāvas avots. Ja izmantojat divus DMD - tas ir līdz 8A utt. Vienkārši pievienojiet ārējo barošanu vienam DMD terminālim (pievienojiet šiem termināļiem otro vai vairākus DMD).

Ja nevēlaties sasmalcināt strāvas padeves kabeļa galu, izmantojiet līdzstrāvas kontaktligzdas sadalītāju.

2. solis: Arduino skice

Jums būs jāinstalē šādas divas Arduino bibliotēkas - TimerOne un DMD. Pēc tam augšupielādējiet skici:

// RTC #ietver "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // DS1307 RTC ir 0x68

// LED displejam

#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // jums varētu būt vairāk nekā viens DMD rinda #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);

String finalString; // izmanto, lai turētu pēdējo teikumu, lai to parādītu DMD

void ScanDMD () // nepieciešams DMD

{dmd.scanDisplayBySPI (); }

anulēts iestatījums ()

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

// RTC

Wire.begin (); // aizdedzināt I2C autobusa baitu sekunde, minūte, stunda, diena, Nedēļa, diena, mēnesis, mēnesis, gads; // mainiet mainīgos un noņemiet komentārus setDateDs1307, lai iestatītu laiku // pēc tam atkārtoti komentējiet funkciju un augšupielādējiet skici vēlreiz second = 0; minūte = 13; stunda = 23; dayOfWeek = 4; dayOfMonth = 19; mēnesis = 5; gads = 13; // setDateDs1307 (sekunde, minūte, stunda, diena, Nedēļa, diena, mēnesis, mēnesis, gads); }

// parastās RTC funkcijas

// Pārvērst parastos decimāldaļskaitļus par bināriem kodētiem decimālajiem baitiem decToBcd (baitu val) {return ((val/10*16) + (val%10)); }

// Pārvērst bināro kodēto decimāldaļu par parastajiem decimāldaļskaitļiem

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

void setDateDs1307 (baits otrais, // 0-59

baitu minūte, // 0-59 baitu stunda, // 1-23 baitu diena nedēļā, // 1-7 baitu diena mēnesī, // 1-28/29/baitu mēnesis, // 1-12 baitu gads) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (otrais)); // no 0 līdz 7. bitam sākas pulkstenis Wire.write (decToBcd (minūte)); Wire.write (decToBcd (stunda)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (mēnesis)); Wire.write (decToBcd (gads)); Wire.write (00010000); // nosūta 0x10 (hex) 00010000 (bināro) uz reģistru - ieslēdz kvadrātveida vilni Wire.endTransmission (); }

// Iegūst datumu un laiku no ds1307

void getDateDs1307 (baits *sekunde, baits *minūte, baits *stunda, baits *dayOfWeek, baits *dayOfMonth, baits *mēnesis, baits *gads) {// Atiestatīt reģistra rādītāju Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();

Wire.requestFrom (DS1307_I2C_ADDRESS, 7);

// Dažiem no tiem ir vajadzīgas maskas, jo daži biti ir kontroles biti

*otrais = bcdToDec (Wire.read () & 0x7f); *minūte = bcdToDec (Wire.read ()); *stunda = bcdToDec (Wire.read () & 0x3f); // Nepieciešams to mainīt, ja 12 h/pm *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *mēnesis = bcdToDec (Wire.read ()); *gads = bcdToDec (Wire.read ()); }

void drawText (String oldString)

{dmd.clearScreen (true); 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); garš sākums = milis (); ilgs taimeris = sākums; ilgs taimeris2 = sākums; Būla ret = nepatiess; while (! ret) {if ((taimeris+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); taimeris = milis (); }}}

void createTextTime (int hh, int mm)

// tas visu laiku apkopo datus tekstā kā vienu teikumu {finalString = ""; // noslaukiet teikumu īpašiem gadījumiem (zemāk) finalString = finalString+"It's";

// tagad pievienojiet stundu

ja (hh == 1 || hh == 13) {finalString = finalString+"viens"; } ja (hh == 2 || hh == 14) {finalString = finalString+"divi"; } ja (hh == 3 || hh == 15) {finalString = finalString+"trīs"; } ja (hh == 4 || hh == 16) {finalString = finalString+"četri"; } ja (hh == 5 || hh == 17) {finalString = finalString+"pieci"; } ja (hh == 6 || hh == 18) {finalString = finalString+"seši"; } ja (hh == 7 || hh == 19) {finalString = finalString+"septiņi"; } ja (hh == 8 || hh == 20) {finalString = finalString+"astoņi"; } ja (hh == 9 || hh == 21) {finalString = finalString+"deviņi"; } ja (hh == 10 || hh == 22) {finalString = finalString+"desmit"; } ja (hh == 11 || hh == 23) {finalString = finalString+"vienpadsmit"; }

// tagad pievienojiet minūtes

slēdzis (mm) {1. gadījums: finalString = finalString+"oh one"; pārtraukums; 2. gadījums: finalString = finalString+"oh two"; pārtraukums; 3. gadījums: finalString = finalString+"ak trīs"; pārtraukums; 4. gadījums: finalString = finalString+"ak četri"; pārtraukums; 5. gadījums: finalString = finalString+"ak pieci"; pārtraukums; 6. gadījums: finalString = finalString+"oh six"; pārtraukums; 7. gadījums: finalString = finalString+"ak septiņi"; pārtraukums; 8. gadījums: finalString = finalString+"oh astoņi"; pārtraukums; 9. gadījums: finalString = finalString+"ak deviņi"; pārtraukums; 10. gadījums: finalString = finalString+"desmit"; pārtraukums; 11. gadījums: finalString = finalString+"vienpadsmit"; pārtraukums; 12. gadījums: finalString = finalString+"divpadsmit"; pārtraukums; 13. gadījums: finalString = finalString+"thirteen"; pārtraukums; 14. gadījums: finalString = finalString+"četrpadsmit"; pārtraukums; 15. gadījums: finalString = finalString+"piecpadsmit"; pārtraukums; 16. gadījums: finalString = finalString+"sešpadsmit"; pārtraukums; 17. gadījums: finalString = finalString+"septiņpadsmit"; pārtraukums; 18. gadījums: finalString = finalString+"astoņpadsmit"; pārtraukums; 19. gadījums: finalString = finalString+"deviņpadsmit"; pārtraukums; 20. gadījums: finalString = finalString+"divdesmit"; pārtraukums; 21. gadījums: finalString = finalString+"divdesmit viens"; pārtraukums; 22. gadījums: finalString = finalString+"divdesmit divi"; pārtraukums; 23. gadījums: finalString = finalString+"divdesmit trīs"; pārtraukums; 24. gadījums: finalString = finalString+"divdesmit četri"; pārtraukums; 25. gadījums: finalString = finalString+"divdesmit pieci"; pārtraukums; 26. gadījums: finalString = finalString+"divdesmit seši"; pārtraukums; 27. gadījums: finalString = finalString+"divdesmit septiņi"; pārtraukums; 28. gadījums: finalString = finalString+"divdesmit astoņi"; pārtraukums; 29. gadījums: finalString = finalString+"divdesmit deviņi"; pārtraukums; gadījums 30: finalString = finalString+"trīsdesmit"; pārtraukums; 31. gadījums: finalString = finalString+"trīsdesmit viens"; pārtraukums; 32. gadījums: finalString = finalString+"trīsdesmit divi"; pārtraukums; 33. gadījums: finalString = finalString+"trīsdesmit trīs"; pārtraukums; 34. gadījums: finalString = finalString+"trīsdesmit četri"; pārtraukums; 35. gadījums: finalString = finalString+"trīsdesmit pieci"; pārtraukums; 36. gadījums: finalString = finalString+"trīsdesmit seši"; pārtraukums; 37. gadījums: finalString = finalString+"trīsdesmit septiņi"; pārtraukums; 38. gadījums: finalString = finalString+"trīsdesmit astoņi"; pārtraukums; 39. gadījums: finalString = finalString+"trīsdesmit deviņi"; pārtraukums; 40. gadījums: finalString = finalString+"četrdesmit"; pārtraukums; 41. gadījums: finalString = finalString+"četrdesmit viens"; pārtraukums; 42. gadījums: finalString = finalString+"četrdesmit divi"; pārtraukums; 43. gadījums: finalString = finalString+"četrdesmit trīs"; pārtraukums; 44. gadījums: finalString = finalString+"četrdesmit četri"; pārtraukums; 45. gadījums: finalString = finalString+"četrdesmit pieci"; pārtraukums; 46. gadījums: finalString = finalString+"četrdesmit seši"; pārtraukums; 47. gadījums: finalString = finalString+"četrdesmit septiņi"; pārtraukums; 48. gadījums: finalString = finalString+"četrdesmit astoņi"; pārtraukums; 49. gadījums: finalString = finalString+"četrdesmit deviņi"; pārtraukums; 50. gadījums: finalString = finalString+"piecdesmit"; pārtraukums; 51. gadījums: finalString = finalString+"piecdesmit viens"; pārtraukums; 52. gadījums: finalString = finalString+"piecdesmit divi"; pārtraukums; 53. gadījums: finalString = finalString+"piecdesmit trīs"; pārtraukums; 54. gadījums: finalString = finalString+"piecdesmit četri"; pārtraukums; 55. gadījums: finalString = finalString+"piecdesmit pieci"; pārtraukums; 56. gadījums: finalString = finalString+"piecdesmit seši"; pārtraukums; 57. gadījums: finalString = finalString+"piecdesmit septiņi"; pārtraukums; 58. gadījums: finalString = finalString+"piecdesmit astoņi"; pārtraukums; 59. gadījums: finalString = finalString+"piecdesmit deviņi"; pārtraukums; }

// pusdienlaiks?

if (hh == 12 && mm == 0) {finalString = finalString+"pusdienlaiks"; } // pusnakts? ja (hh == 00 && mm == 0) {finalString = finalString+"pusnakts"; }

}

tukša cilpa ()

{// iegūt laiku no RTC baita sekunde, minūte, stunda, dayOfWeek, dayOfMonth, mēnesis, gads; getDateDs1307 (& otrais, & minūti, & stunda, & dayOfWeek, & dayOfMonth, & mēnesis, & gads);

// pārvērst laiku teikuma virknē

createTextTime (stunda, minūte);

// tagad nosūtiet tekstu uz DMD

drawText (finalString); }

Skicei ir parastās funkcijas laika iestatīšanai un izgūšanai no DS1307/3232 reāllaika pulksteņa IC, un, kā parasti ar visiem mūsu pulksteņiem, jūs varat ievadīt laika informāciju mainīgajos mainīgajos iestatījumos (), pēc tam atcelt komentārus setDateDs1307 (), augšupielādējiet skici, atkārtoti komentējiet setDateDs1307, pēc tam augšupielādējiet skici vēlreiz. Atkārtojiet šo procesu, lai no jauna iestatītu laiku, ja neesat pievienojis uz aparatūru balstītu lietotāja interfeisu.

3. darbība:

Kad laiks ir izgūts void loop (), tas tiek nodots funkcijai createTextTime (). Šī funkcija izveido parādāmo teksta virkni, sākot ar “It's”, un pēc tam nosaka, kuriem vārdiem sekot atkarībā no pašreizējā laika. Visbeidzot, funkcija drawText () pārvērš tekstu saturošo virkni par rakstzīmju mainīgo, ko var nodot DMD.

Ieteicams: