Mündəricat:
Video: Arduino Kaydırma Mətn Saatı: 3 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Bu layihənin məqsədi, vaxtın necə danışıldığını göstərən bir mətn saatı qurmaqdır (məsələn, "gecə yarısıdır").
Bu sürətli bir layihədir - biz sizə aparat və eskizlə davam etmək üçün kifayət qədər şey veririk və sonra ehtiyaclarınıza uyğun olaraq daha da irəli apara bilərsiniz.
Addım 1: Avadanlıq
Üç əsas maddəyə ehtiyacınız olacaq -
- Arduino Uno ilə uyğun bir lövhə
- bir DS1307 və ya DS3231 IC istifadə edərək real vaxt saatı dövrə və ya modul
- və monoxrom P10 tipli LED displey
Xarici bir enerji təchizatı istəyə bilərsiniz, amma bunu daha sonra əldə edəcəyik.
Birinci mərhələ, real vaxt saatınıza uyğunlaşmaqdır. Bunun üçün yardıma ehtiyacınız varsa, təlimat üçün bura vurun.
İndiyə qədər "vaxtı necə təyin edirsən?" Deyə düşünürsən.
Bu sualın iki cavabı var. DS3231 -dən istifadə edirsinizsə, dəqiqliyi çox yaxşı olduğu üçün onu eskizdə yerləşdirin (aşağıya baxın), gün işığına qənaət etmək üçün ildə iki dəfə eskizi yeni vaxtla yükləməlisiniz.
Əks təqdirdə sadə bir istifadəçi interfeysi əlavə edin-bir neçə düymə bunu edə bilər. Nəhayət, cihazı DMD -nin arxasına qoymalısınız. Öz ehtiyaclarınızı ödəmək üçün bir çox sahə var, sadə bir həll, idarəetmə lövhəsini hizalamaq ola bilər, beləliklə USB soketinə asanlıqla daxil ola bilərsiniz və sonra onu bir az Sugru ilə yapışdırın.
Saatın gücünə gəldikdə - Arduinodan BİR LED ekranı işlədə bilərsiniz və daxili istifadə üçün yaxşı bir parlaqlıqda işləyir. DMD-nin tam işləməsini istəyirsinizsə, retinanı yandıran parlaqlıq üçün ayrıca 5V 4A DC enerji təchizatı istifadə etməlisiniz. İki DMD istifadə edirsinizsə - bu 8A -ya gedir və s. Sadəcə xarici gücü bir DMD terminalına qoşun (ikinci və ya daha çox DMD -ni bu terminallara qoşun).
Elektrik təchizatı kabelinizin ucunu kəsmək istəmirsinizsə, bir DC prizindən istifadə edin.
Addım 2: Arduino Sketch
Aşağıdakı iki Arduino kitabxanasını - TimerOne və DMD qurmalısınız. Sonra eskizi yükləyin:
// RTC #üçün "Wire.h" daxil edin #DS1307_I2C_ADDRESS 0x68 təyin edin // DS1307 RTC 0x68 -dir
// LED ekran üçün
#"SPI.h" daxil edin "" DMD.h "daxil edin" "TimerOne.h" daxil edin "" SystemFont5x7.h "daxil edin" "Arial_black_16.h" daxil edin #DISPLAYS_ACROSS 1 müəyyən edin // birdən çox DMD -ə sahib ola bilərsiniz sıra #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
String finalString; // DMD -də göstərmək üçün son cümləni saxlamaq üçün istifadə olunur
void ScanDMD () // DMD üçün tələb olunur
{dmd.scanDisplayBySPI (); }
boş quraşdırma ()
{// DMD Timer1.initialize üçün (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (doğru);
// RTC üçün
Wire.begin (); // I2C avtobus baytını saniyə, dəqiqə, saat, dayOfWeek, dayOfMonth, ay, il yandırın; // dəyişənləri dəyişdirin və vaxtı təyin etmək üçün setDateDs1307-ə şərh yazmayın // sonra funksiyanı yenidən şərh edin və eskizi yenidən ikinci dəfə yükləyin = 0; dəqiqə = 13; saat = 23; dayOfWeek = 4; dayOfMonth = 19; ay = 5; il = 13; // setDateDs1307 (saniyə, dəqiqə, saat, dayOfWeek, dayOfMonth, ay, il); }
// adi RTC funksiyaları
// Normal ondalık ədədlərini ikili kodlu onlu baytlara çevir decToBcd (byte val) {return ((val/10*16) + (val%10)); }
// İkili kodlu onluğu normal onluq ədədlərə çevirin
bayt bcdToDec (bayt dəyər) {qaytar ((val/16*10) + (dəyər%16)); }
boşluq setDateDs1307 (bayt saniyə, // 0-59
bayt dəqiqə, // 0-59 bayt saat, // 1-23 bayt günOfWeek, // 1-7 bayt günOfMonth, // 1-28/29/bayt ay, // 1-12 bayt il) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (ikinci)); // 0 -dan bit 7 -ə qədər Wire.write (decToBcd (dəqiqə)) saatı başlayır; Wire.write (decToBcd (saat)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (ay)); Wire.write (decToBcd (il)); Wire.write (00010000); // nəzarət reyestrinə 0x10 (hex) 00010000 (ikili) göndərir - Wire.endTransmission () kvadrat dalğasını işə salır; }
// Tarix və saatı ds1307 -dən alır
void getDateDs1307 (bayt *saniyə, bayt *dəqiqə, bayt *saat, bayt *dayOfWeek, bayt *dayOfMonth, bayt *ay, bayt *il) {// Wire.beginTransmission qeyd qeydini sıfırlayın (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Bunlardan bir neçəsinə maskalar lazımdır, çünki müəyyən bitlər nəzarət bitidir
*saniyə = bcdToDec (Wire.read () & 0x7f); *dəqiqə = bcdToDec (Wire.read ()); *saat = bcdToDec (Wire.read () & 0x3f); // Saat 12/am *dayOfWeek = bcdToDec (Wire.read ()) olduqda bunu dəyişdirmək lazımdır; *dayOfMonth = bcdToDec (Wire.read ()); *ay = bcdToDec (Wire.read ()); *il = bcdToDec (Wire.read ()); }
void drawText (oldString String)
{dmd.clearScreen (doğru); 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); uzun başlanğıc = millis (); uzun taymer = başlanğıc; uzun timer2 = başlanğıc; boolean ret = yalan; while (! ret) {if ((timer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); taymer = milis (); }}}
boşluq createTextTime (int ss, int mm)
// bu, bütün vaxt məlumatlarını mətnə bir cümlə kimi yığır {finalString = ""; // xüsusi hallar üçün cümləni silin (aşağıda) finalString = finalString+"Bu";
// indi saatı əlavə edin
əgər (hh == 1 || hh == 13) {finalString = finalString+"bir"; } if (hh == 2 || hh == 14) {finalString = finalString+"iki"; } if (hh == 3 || hh == 15) {finalString = finalString+"üç"; } if (hh == 4 || hh == 16) {finalString = finalString+"four"; } if (hh == 5 || hh == 17) {finalString = finalString+"beş"; } if (hh == 6 || hh == 18) {finalString = finalString+"altı"; } if (hh == 7 || hh == 19) {finalString = finalString+"yeddi"; } if (hh == 8 || hh == 20) {finalString = finalString+"səkkiz"; } if (hh == 9 || hh == 21) {finalString = finalString+"dokuz"; } if (hh == 10 || hh == 22) {finalString = finalString+"on"; } if (hh == 11 || hh == 23) {finalString = finalString+"on bir"; }
// indi dəqiqə əlavə edin
keçid (mm) {hal 1: finalString = finalString+"oh one"; fasilə; hal 2: finalString = finalString+"oh iki"; fasilə; hal 3: finalString = finalString+"oh üç"; fasilə; hal 4: finalString = finalString+"oh dörd"; fasilə; hal 5: finalString = finalString+"beş beş"; fasilə; hal 6: finalString = finalString+"oh altı"; fasilə; hal 7: finalString = finalString+"oh yeddi"; fasilə; hal 8: finalString = finalString+"oh səkkiz"; fasilə; hal 9: finalString = finalString+"oh doqquz"; fasilə; hal 10: finalString = finalString+"on"; fasilə; hal 11: finalString = finalString+"on bir"; fasilə; hal 12: finalString = finalString+"on iki"; fasilə; hal 13: finalString = finalString+"on üç"; fasilə; hal 14: finalString = finalString+"on dörd"; fasilə; hal 15: finalString = finalString+"on beş"; fasilə; hal 16: finalString = finalString+"on altı"; fasilə; hal 17: finalString = finalString+"on yeddi"; fasilə; hal 18: finalString = finalString+"on səkkiz"; fasilə; hal 19: finalString = finalString+"on doqquz"; fasilə; hal 20: finalString = finalString+"iyirmi"; fasilə; hal 21: finalString = finalString+"iyirmi bir"; fasilə; hal 22: finalString = finalString+"iyirmi iki"; fasilə; hal 23: finalString = finalString+"iyirmi üç"; fasilə; hal 24: finalString = finalString+"iyirmi dörd"; fasilə; hal 25: finalString = finalString+"iyirmi beş"; fasilə; hal 26: finalString = finalString+"iyirmi altı"; fasilə; hal 27: finalString = finalString+"iyirmi yeddi"; fasilə; hal 28: finalString = finalString+"iyirmi səkkiz"; fasilə; hal 29: finalString = finalString+"iyirmi doqquz"; fasilə; hal 30: finalString = finalString+"otuz"; fasilə; hal 31: finalString = finalString+"otuz bir"; fasilə; hal 32: finalString = finalString+"otuz iki"; fasilə; hal 33: finalString = finalString+"otuz üç"; fasilə; hal 34: finalString = finalString+"otuz dörd"; fasilə; hal 35: finalString = finalString+"otuz beş"; fasilə; hal 36: finalString = finalString+"otuz altı"; fasilə; hal 37: finalString = finalString+"otuz yeddi"; fasilə; hal 38: finalString = finalString+"otuz səkkiz"; fasilə; hal 39: finalString = finalString+"otuz doqquz"; fasilə; hal 40: finalString = finalString+"qırx"; fasilə; hal 41: finalString = finalString+"qırx bir"; fasilə; hal 42: finalString = finalString+"qırx iki"; fasilə; hal 43: finalString = finalString+"qırx üç"; fasilə; hal 44: finalString = finalString+"qırx dörd"; fasilə; hal 45: finalString = finalString+"qırx beş"; fasilə; hal 46: finalString = finalString+"qırx altı"; fasilə; iş 47: finalString = finalString+"qırx yeddi"; fasilə; hal 48: finalString = finalString+"qırx səkkiz"; fasilə; hal 49: finalString = finalString+"qırx doqquz"; fasilə; hal 50: finalString = finalString+"əlli"; fasilə; hal 51: finalString = finalString+"əlli bir"; fasilə; hal 52: finalString = finalString+"əlli iki"; fasilə; hal 53: finalString = finalString+"əlli üç"; fasilə; hal 54: finalString = finalString+"əlli dörd"; fasilə; hal 55: finalString = finalString+"əlli beş"; fasilə; hal 56: finalString = finalString+"əlli altı"; fasilə; hal 57: finalString = finalString+"əlli yeddi"; fasilə; hal 58: finalString = finalString+"əlli səkkiz"; fasilə; iş 59: finalString = finalString+"əlli doqquz"; fasilə; }
// günorta?
if (hh == 12 && mm == 0) {finalString = finalString+"midday"; } // gecə yarısı? if (hh == 00 && mm == 0) {finalString = finalString+"gecə yarısı"; }
}
boşluq döngəsi ()
{// vaxtı RTC baytından saniyə, dəqiqə, saat, dayOfWeek, dayOfMonth, ay, il əldə edin; getDateDs1307 (& ikinci, & dəqiqə, & saat, & dayOfWeek, & dayOfMonth, & ay, & il);
// vaxtı cümlə sətirinə çevirin
createTextTime (saat, dəqiqə);
// indi mətni DMD -yə göndərin
drawText (finalString); }
Eskiz, DS1307/3232 real vaxt saat IC-lərindən vaxtı təyin etmək və almaq üçün adi funksiyalara malikdir və bütün saatlarla olduğu kimi, vaxt məlumatlarını boşluq parametrlərində dəyişənlərə daxil edə bilərsiniz (), sonra setDateDs1307 (), eskizi yükləyin, setDateDs1307-ni yenidən şərh edin, sonra eskizi bir daha yükləyin. Hər hansı bir hardware əsaslı istifadəçi interfeysi əlavə etməmisinizsə, vaxtı yenidən təyin etmək üçün bu prosesi təkrarlayın.
Addım 3:
Void loop () -da vaxt alındıqdan sonra createTextTime () funksiyasına ötürülür. Bu funksiya "Bu" ilə başlayaraq göstəriləcək mətn simvolunu yaradır və sonra cari vaxtdan asılı olaraq hansı sözlərin təqib olunacağını təyin edir. Nəhayət drawText () funksiyası mətni tutan sətri DMD -ə ötürülə bilən bir xarakter dəyişəninə çevirir.
Tövsiyə:
Kaydırma Mətn Ekranı (A -dan Z -yə Kılavuz): 25 addım (şəkillərlə)
Mətn Göstəricisi (A -dan Z -yə Kılavuz): Bu təlimatlı / videoda Arduino ilə mətn ekranını necə sürüşdürmək barədə addım -addım təlimatlar verəcəyəm. Arduino üçün kod hazırlamağı izah etməyəcəyəm, sizə mövcud kodu necə istifadə edəcəyinizi göstərəcəyəm. Nə və harada əməkdaşlıq etmək lazımdır
Təqaüd Saatı / Sayma / Dn Saatı: 4 Adım (Şəkillərlə)
Təqaüd Saatı / Sayma / Dn Saatı: Çekmecede bu 8x8 LED nöqtə matrisli ekranlardan bir neçəsi vardı və onlarla nə edəcəyimi düşünürdüm. Digər təlimatlardan ilhamlanaraq, gələcək bir tarixə/saata qədər saymaq üçün geri sayma/yuxarı göstərici qurmaq fikrinə sahib oldum və əgər hədəf vaxt
İnternet Saatı: NTP Protokolu ilə ESP8266 NodeMCU istifadə edərək OLED ilə Tarixi və Saatı Göstərin: 6 Addım
İnternet Saatı: NTP Protokolu ilə ESP8266 NodeMCU istifadə edərək OLED ilə Tarixi və Saatı Göstərin: Salam uşaqlar, bu təlimatlarda internetdən vaxt alacaq bir internet saatı quracağıq, bu layihənin işləməsi üçün heç bir RTC lazım olmayacaq, yalnız işləyən internet bağlantısı Və bu layihə üçün bir esp8266 ehtiyacınız olacaq
Heç bir RTC olmadan ESP8266 Şəbəkə Saatı - Nodemcu NTP Saatı RTC yoxdur - İNTERNET SAAT PROJESİ: 4 addım
Heç bir RTC olmadan ESP8266 Şəbəkə Saatı | Nodemcu NTP Saatı RTC yoxdur | İNTERNET SAAT PROJESİ: Layihədə RTC olmadan bir saat layihəsi olacaq, wifi istifadə edərək internetdən vaxt alacaq və st7735 ekranında göstərəcək
Gixie Saatı: Ən Gözəl Glow Boru Saatı: 4 addım
Gixie Saatı: Ən Gözəl Glow Tube Saatı: Nixie Tube -ni çox bəyənirəm, amma çox bahadır, buna imkanım yoxdur. Bu Gixie Saatı yaratmaq üçün yarım il sərf etdim. Gixie Saatı akril işığı etmək üçün ws2812 işıqlandırması ilə əldə edilir. RGB borusunu daha incə etmək üçün əlimdən gələni edirəm