ዝርዝር ሁኔታ:

አርዱዲኖ ማሸብለል የጽሑፍ ሰዓት - 3 ደረጃዎች
አርዱዲኖ ማሸብለል የጽሑፍ ሰዓት - 3 ደረጃዎች

ቪዲዮ: አርዱዲኖ ማሸብለል የጽሑፍ ሰዓት - 3 ደረጃዎች

ቪዲዮ: አርዱዲኖ ማሸብለል የጽሑፍ ሰዓት - 3 ደረጃዎች
ቪዲዮ: RAMPS 1.6 - A4988/DRV8825 configuration 2024, ሀምሌ
Anonim
አርዱዲኖ ማሸብለል የጽሑፍ ሰዓት
አርዱዲኖ ማሸብለል የጽሑፍ ሰዓት

የዚህ ፕሮጀክት ዓላማ እንደ ተናገረው ጊዜ (ለምሳሌ “እኩለ ሌሊት ነው”) የሚያሳይ የማሸብለል የጽሑፍ ሰዓት መገንባት ነው።

ይህ ፈጣን ፕሮጀክት ነው - ከሃርድዌር እና ንድፍ ጋር ለመሄድ በቂ እንሰጥዎታለን ፣ ከዚያ ፍላጎቶችዎን ለማሟላት የበለጠ ሊወስዱት ይችላሉ።

ደረጃ 1 - ሃርድዌር

ሃርድዌር
ሃርድዌር

ሶስት ዋና ዋና ዕቃዎች ያስፈልጉዎታል-

  • አርዱዲኖ ዩኖ ተስማሚ ቦርድ
  • DS1307 ወይም DS3231 IC ን በመጠቀም በእውነተኛ ሰዓት የሰዓት ወረዳ ወይም ሞዱል
  • እና monochrome P10- ቅጥ LED ማሳያ

የውጭ የኃይል አቅርቦት ይፈልጉ ይሆናል ፣ ግን በኋላ ላይ እናገኛለን።

የመጀመሪያው ደረጃ ከእውነተኛ ሰዓት ሰዓትዎ ጋር መጣጣም ነው። በዚህ ላይ እገዛ ከፈለጉ ለትምህርቱ እዚህ ጠቅ ያድርጉ።

አሁን “ጊዜውን እንዴት ያዘጋጃሉ?” ብለው እያሰቡ እንደሆነ ተስፋ አደርጋለሁ።

ለዚህ ጥያቄ ሁለት መልሶች አሉ። DS3231 ን እየተጠቀሙ ከሆነ ትክክለኛው ትክክለኛነት በጣም ጥሩ ስለሆነ በስዕሉ ውስጥ ያዋቅሩት (ከዚህ በታች ይመልከቱ) ፣ የቀን ብርሃን ቁጠባን ለመሸፈን በዓመት ሁለት ጊዜ በአዲሱ ጊዜ ብቻ ንድፉን መስቀል ያስፈልግዎታል።

አለበለዚያ ቀለል ያለ የተጠቃሚ-በይነገጽ ያክሉ-ሁለት ቁልፎች ሊያደርጉት ይችላሉ። በመጨረሻም ሃርድዌርዎን በዲኤምዲ ጀርባ ላይ ማስቀመጥ ያስፈልግዎታል። የራስዎን ፍላጎቶች ለማሟላት ብዙ ወሰን አለ ፣ ቀለል ያለ መፍትሔ የዩኤስቢ ሶኬቱን በቀላሉ መድረስ እንዲችሉ የቁጥጥር ሰሌዳውን ማቀናጀት ሊሆን ይችላል - እና ከዚያ ከአንዳንድ ሱጉሩ ጋር ያያይዙት።

የሰዓት ኃይልን በተመለከተ - ከአርዱዲኖ አንድ የ LED ማሳያ ማሄድ ይችላሉ ፣ እና ለቤት ውስጥ አገልግሎት በጥሩ ብሩህነት ላይ ይሠራል። ዲኤምዲው ሙሉ በሙሉ እንዲሠራ ከፈለጉ ሬቲና የሚቃጠል ብሩህነት የተለየ 5V 4A ዲሲ የኃይል አቅርቦት መጠቀም ያስፈልግዎታል። ሁለት ዲኤምዲዎችን የሚጠቀሙ ከሆነ - ያ ወደ 8 ሀ ይሄዳል ፣ ወዘተ። በቀላሉ የውጭውን ኃይል ከአንድ የዲኤምዲ ተርሚናሎች (ሁለተኛውን ወይም ከዚያ በላይ ዲኤምዲዎችን ከእነዚህ ተርሚናሎች ጋር ያገናኙ)።

የኃይል አቅርቦት ገመድዎን መጨረሻ ለመቁረጥ የማይፈልጉ ከሆነ የዲሲ ሶኬት መሰንጠቂያ ይጠቀሙ።

ደረጃ 2 - አርዱዲኖ ንድፍ

የሚከተሉትን ሁለት የአርዱዲኖ ቤተመፃሕፍት - TimerOne እና DMD ን መጫን ያስፈልግዎታል። ከዚያ ንድፉን ይስቀሉ

// ለ RTC #"Wire.h" #define DS1307_I2C_ADDRESS 0x68/ DS1307 RTC 0x68 ን ያካትታል

// ለ LED ማሳያ

#"SPI.h" " #ዲኤምዲኤች" ን #TimerOne.h " #አካትት" SystemFont5x7.h " # #" Arial_black_16.h " #መግለፅ DISPLAYS_ACROSS 1 // በአንድ ውስጥ ከአንድ በላይ ዲኤምዲ ሊኖርዎት ይችላል ረድፍ #መለየት DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS ፣ DISPLAYS_DOWN);

ሕብረቁምፊ finalString; // በዲኤምዲ ላይ ለማሳየት የመጨረሻውን ዓረፍተ ነገር ለመያዝ ያገለግላል

ባዶነት ScanDMD () // ለዲኤምዲ ያስፈልጋል

{dmd.scanDisplayBySPI (); }

ባዶነት ማዋቀር ()

{// ለዲኤምዲ ሰዓት ቆጣሪ 1.ኢኒታይላይዜሽን (5000); ሰዓት ቆጣሪ 1. አታሚ ኢንተርስተር (ScanDMD) dmd.clearScreen (እውነት);

// ለ RTC

Wire.begin (); // I2C አውቶቡስ ባይት ሰከንድ ፣ ደቂቃ ፣ ሰዓት ፣ ቀን ኦፍዌክ ፣ ቀን ወር ፣ ወር ፣ ዓመት ያቃጥሉ ፤ // ተለዋዋጮችን ይለውጡ እና ሰዓቱን ለማዘጋጀት setDateDs1307 // ከዚያ ተግባሩን እንደገና አስተያየት ይስጡ እና ንድፉን እንደገና ሰከንድ ሁለተኛ = 0; ደቂቃ = 13; ሰዓት = 23; dayOfWeek = 4; dayOfMonth = 19; ወር = 5; ዓመት = 13; // setDateDs1307 (ሁለተኛ ፣ ደቂቃ ፣ ሰዓት ፣ dayOfWeek ፣ dayOfMonth ፣ ወር ፣ ዓመት); }

// የተለመዱ የ RTC ተግባራት

// መደበኛ የአስርዮሽ ቁጥሮችን ወደ ሁለትዮሽ ኮድ አስርዮሽ ባይት decToBcd (ባይት ቫል) ይለውጡ (መመለስ ((val/10*16) + (val%10)); }

// የሁለትዮሽ ኮድ ያለው አስርዮሽ ወደ መደበኛ የአስርዮሽ ቁጥሮች ይለውጡ

ባይት bcdToDec (ባይት ቫል) {መመለስ ((val/16*10) + (val%16)); }

ባዶነት setDateDs1307 (ባይት ሰከንድ ፣ // 0-59

ባይት ደቂቃ ፣ // 0-59 ባይት ሰዓት ፣ // 1-23 ባይት ቀንOfWeek ፣ // 1-7 ባይት ቀን ከወራት ፣ // 1-28/29/ባይት ወር ፣ // 1-12 ባይት ዓመት) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (ሁለተኛ)); // 0 ወደ ቢት 7 ሰዓቱን ይጀምራል Wire.write (decToBcd (ደቂቃ)); Wire.write (decToBcd (ሰዓት)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (ወር)); Wire.write (decToBcd (ዓመት)); Wire.write (00010000); // ምዝገባን ለመቆጣጠር 0x10 (ሄክስ) 00010000 (ሁለትዮሽ) ይልካል - የካሬ ሞገድ Wire.endTransmission () ያበራል ፤ }

// ቀኑን እና ሰዓቱን ከ ds1307 ያገኛል

ባዶ getDateDs1307 (ባይት *ሰከንድ ፣ ባይት *ደቂቃ ፣ ባይት *ሰዓት ፣ ባይት *dayOfWeek ፣ ባይት *dayOfMonth ፣ ባይት *ወር ፣ ባይት *ዓመት) {// የመመዝገቢያ ጠቋሚውን Wire.begin ማስተላለፊያ (DS1307_I2C_ADDRESS) ዳግም ያስጀምሩ ፤ Wire.write (0); Wire.endTransmission ();

Wire.requestFrom (DS1307_I2C_ADDRESS ፣ 7) ፤

// ከእነዚህ ውስጥ ጥቂቶቹ ጭምብሎች ያስፈልጋሉ ምክንያቱም የተወሰኑ ቁርጥራጮች የቁጥጥር ቢቶች ናቸው

*ሁለተኛ = bcdToDec (Wire.read () & 0x7f); *ደቂቃ = bcdToDec (Wire.read ()); *ሰዓት = bcdToDec (Wire.read () & 0x3f); // 12 ሰዓት ጥዋት/ከሰዓት *ቀንOfWeek = bcdToDec (Wire.read ()) ከሆነ ይህንን መለወጥ ያስፈልጋል ፤ *dayOfMonth = bcdToDec (Wire.read ()); *ወር = bcdToDec (Wire.read ()); *ዓመት = bcdToDec (Wire.read ()); }

ባዶነት ስዕል ጽሑፍ (ሕብረቁምፊ oldString)

{dmd.clearScreen (እውነት); 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); ረጅም ጅምር = ሚሊስ (); ረጅም ሰዓት ቆጣሪ = ጀምር; ረጅም ሰዓት ቆጣሪ 2 = ጀምር; ቡሊያን ረጥ = ሐሰት; ሳለ (! ret) {{((ሰዓት ቆጣሪ+20) <ሚሊስ ()) {ret = dmd.stepMarquee (-1, 0); ሰዓት ቆጣሪ = ሚሊስ (); }}}

ባዶነት ፈጠራ ጽሑፍ ጊዜ (int hh ፣ int mm)

// ይህ የሁሉንም ጊዜ ውሂብ ወደ ጽሑፍ እንደ አንድ ዓረፍተ ነገር ያጠቃልላል {finalString = ""; // ልዩ ጉዳዮችን (ከዚህ በታች) ዓረፍተ ነገሩን ያጥፉ finalString = finalString+“ነው”;

// አሁን ሰዓቱን ይጨምሩ

ከሆነ (hh == 1 || hh == 13) {finalString = finalString+"one"; } ከሆነ (hh == 2 || hh == 14) {finalString = finalString+"two"; } ከሆነ (hh == 3 || hh == 15) {finalString = finalString+"three"; } ከሆነ (hh == 4 || hh == 16) {finalString = finalString+"four"; } ከሆነ (hh == 5 || hh == 17) {finalString = finalString+"five"; } ከሆነ (hh == 6 || hh == 18) {finalString = finalString+"six"; } ከሆነ (hh == 7 || hh == 19) {finalString = finalString+"ሰባት"; } ከሆነ (hh == 8 || hh == 20) {finalString = finalString+"ስምንት"; } ከሆነ (hh == 9 || hh == 21) {finalString = finalString+"nine"; } ከሆነ (hh == 10 || hh == 22) {finalString = finalString+"ten"; } ከሆነ (hh == 11 || hh == 23) {finalString = finalString+"11" }

// አሁን ደቂቃዎቹን ያክሉ

መቀየሪያ (ሚሜ) {ጉዳይ 1: finalString = finalString+"oh one"; ሰበር; ጉዳይ 2: finalString = finalString+"oh two"; ሰበር; ጉዳይ 3: finalString = finalString+"oh three"; ሰበር; ጉዳይ 4: finalString = finalString+"oh four"; ሰበር; ጉዳይ 5: finalString = finalString+"oh five"; ሰበር; ጉዳይ 6: finalString = finalString+"oh six"; ሰበር; ጉዳይ 7: finalString = finalString+"oh ሰባት"; ሰበር; ጉዳይ 8: finalString = finalString+"ኦ ስምንት"; ሰበር; ጉዳይ 9: finalString = finalString+"oh nine"; ሰበር; ጉዳይ 10: finalString = finalString+"ten"; ሰበር; ጉዳይ 11: finalString = finalString+"አስራ አንድ"; ሰበር; ጉዳይ 12: finalString = finalString+"አስራ ሁለት"; ሰበር; ጉዳይ 13: finalString = finalString+"አስራ ሦስት"; ሰበር; ጉዳይ 14: finalString = finalString+“fourteen”; ሰበር; ጉዳይ 15: finalString = finalString+"አስራ አምስት"; ሰበር; ጉዳይ 16: finalString = finalString+"አስራ ስድስት"; ሰበር; ጉዳይ 17: finalString = finalString+"አስራ ሰባት"; ሰበር; ጉዳይ 18: finalString = finalString+"አስራ ስምንት"; ሰበር; ጉዳይ 19: finalString = finalString+“አሥራ ዘጠኝ”; ሰበር; ጉዳይ 20: finalString = finalString+"ሃያ"; ሰበር; ጉዳይ 21: finalString = finalString+"ሃያ አንድ"; ሰበር; ጉዳይ 22: finalString = finalString+"ሃያ ሁለት"; ሰበር; ጉዳይ 23: finalString = finalString+"ሃያ ሦስት"; ሰበር; ጉዳይ 24: finalString = finalString+"ሃያ አራት"; ሰበር; ጉዳይ 25: finalString = finalString+"ሃያ አምስት"; ሰበር; ጉዳይ 26: finalString = finalString+"ሃያ ስድስት"; ሰበር; ጉዳይ 27: finalString = finalString+"ሃያ ሰባት"; ሰበር; ጉዳይ 28: finalString = finalString+"ሃያ ስምንት"; ሰበር; ጉዳይ 29: finalString = finalString+"ሃያ ዘጠኝ"; ሰበር; ጉዳይ 30: finalString = finalString+"ሠላሳ"; ሰበር; ጉዳይ 31: finalString = finalString+"ሠላሳ አንድ"; ሰበር; ጉዳይ 32: finalString = finalString+"ሠላሳ ሁለት"; ሰበር; ጉዳይ 33: finalString = finalString+"ሠላሳ ሦስት"; ሰበር; ጉዳይ 34: finalString = finalString+"ሠላሳ አራት"; ሰበር; ጉዳይ 35: finalString = finalString+"ሠላሳ አምስት"; ሰበር; ጉዳይ 36: finalString = finalString+"ሠላሳ ስድስት"; ሰበር; ጉዳይ 37: finalString = finalString+"ሠላሳ ሰባት"; ሰበር; ጉዳይ 38: finalString = finalString+"ሠላሳ ስምንት"; ሰበር; ጉዳይ 39: finalString = finalString+"ሠላሳ ዘጠኝ"; ሰበር; ጉዳይ 40: finalString = finalString+"አርባ"; ሰበር; ጉዳይ 41: finalString = finalString+“አርባ አንድ”; ሰበር; ጉዳይ 42: finalString = finalString+"አርባ ሁለት"; ሰበር; ጉዳይ 43: finalString = finalString+"አርባ ሦስት"; ሰበር; ጉዳይ 44: finalString = finalString+"አርባ አራት"; ሰበር; ጉዳይ 45: finalString = finalString+"አርባ አምስት"; ሰበር; ጉዳይ 46: finalString = finalString+"አርባ ስድስት"; ሰበር; ጉዳይ 47: finalString = finalString+"አርባ ሰባት"; ሰበር; ጉዳይ 48: finalString = finalString+"አርባ ስምንት"; ሰበር; ጉዳይ 49: finalString = finalString+"አርባ ዘጠኝ"; ሰበር; ጉዳይ 50: finalString = finalString+“አምሳ”; ሰበር; ጉዳይ 51: finalString = finalString+“ሃምሳ አንድ”; ሰበር; ጉዳይ 52: finalString = finalString+"ሃምሳ ሁለት"; ሰበር; ጉዳይ 53: finalString = finalString+"ሃምሳ ሦስት"; ሰበር; ጉዳይ 54: finalString = finalString+"ሃምሳ አራት"; ሰበር; ጉዳይ 55: finalString = finalString+“አምሳ አምስት”; ሰበር; ጉዳይ 56: finalString = finalString+"ሃምሳ ስድስት"; ሰበር; ጉዳይ 57: finalString = finalString+“አምሳ ሰባት”; ሰበር; ጉዳይ 58: finalString = finalString+"ሃምሳ ስምንት"; ሰበር; ጉዳይ 59: finalString = finalString+"አምሳ ዘጠኝ"; ሰበር; }

// እኩለ ቀን?

ከሆነ (hh == 12 && mm == 0) {finalString = finalString+"እኩለ ቀን"; } // እኩለ ሌሊት? ከሆነ (hh == 00 && mm == 0) {finalString = finalString+"እኩለ ሌሊት"; }

}

ባዶነት loop ()

{// ጊዜውን ከ RTC ባይት ሰከንድ ፣ ደቂቃ ፣ ሰዓት ፣ dayOfWeek ፣ dayOfMonth ፣ ወር ፣ ዓመት ያግኙ። getDateDs1307 (& ሁለተኛ ፣ እና ደቂቃ ፣ እና ሰዓት ፣ እና dayOfWeek ፣ እና dayOfMonth ፣ እና ወር ፣ እና ዓመት);

// ጊዜውን ወደ ዓረፍተ -ነገር ሕብረቁምፊ ይለውጡት

TextTime (ሰዓት ፣ ደቂቃ);

// አሁን ጽሑፉን ለዲኤምዲ ይላኩ

drawText (finalString); }

ንድፉ ጊዜውን ከ DS1307/3232 የእውነተኛ ሰዓት አይሲዎች ለማቀናበር እና ለማምጣት የተለመዱ ተግባራት አሉት ፣ እና እንደተለመደው በሁሉም የእኛ ሰዓቶች ውስጥ የጊዜ መረጃን ወደ ተለዋዋጮች በባዶ ማዋቀር () ውስጥ ማስገባት ይችላሉ ፣ ከዚያ የማይመች setDateDs1307 () ፣ ንድፉን ይስቀሉ ፣ እንደገና አስተያየት ይስጡ setDateDs1307 ፣ ከዚያ እንደገና ንድፉን ይስቀሉ። ማንኛውንም በሃርድዌር ላይ የተመሠረተ የተጠቃሚ በይነገጽ ካላከሉ ጊዜውን እንደገና ለማዘጋጀት ያንን ሂደት ይድገሙት።

ደረጃ 3

ጊዜው ባዶ በሆነ ሉፕ () ውስጥ ከተመለሰ ፣ ወደ ተግባር createTextTime () ይተላለፋል። ይህ ተግባር በ “እሱ” በመጀመር ለማሳየት የጽሑፍ ሕብረቁምፊን ይፈጥራል ፣ እና አሁን ባለው ጊዜ ላይ በመመርኮዝ የትኞቹን ቃላት መከተል እንዳለባቸው ይወስናል። በመጨረሻም ተግባር drawText () ጽሑፉን የያዘውን ሕብረቁምፊ ወደ ዲኤምዲ ሊተላለፍ ወደሚችል የቁምፊ ተለዋዋጭ ይለውጣል።

የሚመከር: