Мазмуну:
Video: Arduino Текст Сааты: 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
Бул долбоордун максаты - убакытты сүйлөө убактысын чагылдырган жылдыруучу текст саатын куруу (мисалы, "түн ортосу").
Бул тез долбоор - биз сизге аппараттык жана эскиз менен иштөө үчүн жетиштүү беребиз, андан кийин аны муктаждыктарыңызга ылайыкташтырып алсаңыз болот.
1 -кадам: Аппараттык
Сизге үч негизги нерсе керек болот -
- An Arduino Uno менен шайкеш келген такта
- DS1307 же DS3231 ICди колдонгон реалдуу убакыт режиминдеги схема же модуль
- жана монохромдуу P10 стилиндеги LED дисплей
Сиз тышкы электр менен камсыздоону каалашыңыз мүмкүн, бирок биз кийинчерээк ага жетебиз.
Биринчи этап-бул реалдуу убакыт режимине туура келүү. Эгер жардам керек болсо, үйрөткүч үчүн бул жерди басыңыз.
Азырынча сиз "убакытты кантип белгилейсиз?" Деп ойлоп жатасыз деп үмүттөнөм.
Бул суроого эки жооп бар. Эгерде сиз DS3231ди колдонуп жатсаңыз, аны жөн гана эскизге орнотуңуз (төмөндө караңыз), анткени тактык абдан жакшы, күндүзгү убакытты жабуу үчүн эскизди жылына эки жолу жаңы убакыт менен гана жүктөө керек.
Болбосо, жөнөкөй колдонуучу интерфейсин кошуңуз-муну бир нече баскыч жасай алат. Акыр -аягы, сиз жабдыкты DMDдин арт жагына коюшуңуз керек. Өз муктаждыктарыңызды канааттандыруу үчүн көптөгөн мүмкүнчүлүктөр бар, жөнөкөйлөтүү жолу - бул USB -розеткасына оңой кирүү үчүн башкаруу тактасын тегиздөө, анан аны Sugru менен жабыштыруу.
Саатты иштетүү боюнча - сиз Arduinoдон ONE LED дисплейин иштете аласыз жана ал үй ичинде колдонуу үчүн жакшы жарыкта иштейт. Эгерде сиз DMDдин толук иштешин кааласаңыз, торчо күйгүзүүчү жаркыроо үчүн өзүнчө 5V 4A DC электр булагын колдонуу керек. Эгерде сиз эки DMD колдонуп жатсаңыз - бул 8Ага барат, ж.б. Жөн эле тышкы кубатты бир DMD терминалына туташтырыңыз (экинчи же андан көп DMDлерди бул терминалдарга туташтырыңыз).
Эгерде сиз электр менен камсыздоо кабелинин учун кесүүнү каалабасаңыз, анда DC розеткасын колдонуңуз.
2 -кадам: Arduino эскизи
Сиз төмөнкү эки Arduino китепканасын орнотушуңуз керек - TimerOne жана DMD. Андан кийин эскизди жүктөңүз:
// RTC #үчүн "Wire.h" кирет #DS1307_I2C_ADDRESS аныктоо 0x68 // DS1307 RTC 0x68
// LED дисплейи үчүн
#кошуу "SPI.h" #кошуу "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // сизде бирден ашык DMD болушу мүмкүн катар #define DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
String finalString; // DMDде көрсөтүү үчүн акыркы сүйлөмдү кармоо үчүн колдонулат
void ScanDMD () // DMD үчүн талап кылынат
{dmd.scanDisplayBySPI (); }
жараксыз орнотуу ()
{// DMD Timer1.initialize үчүн (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (чыныгы);
// RTC үчүн
Wire.begin (); // I2C автобус байтын экинчи, мүнөт, саат, dayOfWeek, dayOfMonth, ай, жыл; // өзгөрмөлөрдү өзгөртүп, убакытты белгилөө үчүн setDateDs1307ге комментарий бербеңиз // андан кийин функцияны кайра комментарийлеп, эскизди кайра экинчи секундга жүктөңүз = 0; мүнөт = 13; саат = 23; dayOfWeek = 4; dayOfMonth = 19; ай = 5; жыл = 13; // setDateDs1307 (экинчи, мүнөт, саат, dayOfWeek, dayOfMonth, ай, жыл); }
// кадимки RTC функциялары
// Кадимки ондук сандарды бинардык коддуу ондукка айландыруу decToBcd (байт val) {return ((val/10*16) + (val%10)); }
// бинардык коддуу ондукту кадимки ондук сандарга айландыруу
байт bcdToDec (байт val) {кайтаруу ((val/16*10) + (val%16)); }
жараксыз setDateDs1307 (байт секунд, // 0-59
байт мүнөт, // 0-59 байт саат, // 1-23 байт dayOfWeek, // 1-7 байт dayOfMonth, // 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 (hex) 00010000 (бинардык) реестрди жөнөтөт - Wire.endTransmission чарчы толкунду күйгүзөт; }
// Күндү жана убакытты ds1307ден алат
void getDateDs1307 (байт *секунд, байт *мүнөт, байт *саат, байт *dayOfWeek, байт *dayOfMonth, байт *ай, байт *жыл) {// Реестр көрсөткүчүн кайра коюу Wire.beginTransmission (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:00/pm *dayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *ай = bcdToDec (Wire.read ()); *жыл = bcdToDec (Wire.read ()); }
жараксыз DrawText (String 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); узак баштоо = millis (); узак таймер = баштоо; long timer2 = баштоо; логикалык ret = false; while (! ret) {if ((timer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); таймер = миллис (); }}}
жараксыз createTextTime (int hh, int mm)
// бул бардык убакыттагы маалыматтарды текстке бир сүйлөм катары бириктирет {finalString = ""; // өзгөчө учурлар үчүн сүйлөмдү өчүрүү (төмөндө) finalString = finalString+"Бул";
// азыр саатты кошуу
if (hh == 1 || hh == 13) {finalString = finalString+"one"; } if (hh == 2 || hh == 14) {finalString = finalString+"two"; } if (hh == 3 || hh == 15) {finalString = finalString+"three"; } if (hh == 4 || hh == 16) {finalString = finalString+"four"; } if (hh == 5 || hh == 17) {finalString = finalString+"беш"; } if (hh == 6 || hh == 18) {finalString = finalString+"six"; } if (hh == 7 || hh == 19) {finalString = finalString+"seven"; } if (hh == 8 || hh == 20) {finalString = finalString+"сегиз"; } if (hh == 9 || hh == 21) {finalString = finalString+"тогуз"; } if (hh == 10 || hh == 22) {finalString = finalString+"ten"; } if (hh == 11 || hh == 23) {finalString = finalString+"eleven"; }
// азыр мүнөттөрдү кошуңуз
которуу (мм) {1 -абал: finalString = finalString+"бирөө"; тыныгуу; 2 -жагдай: finalString = finalString+"эки эки"; тыныгуу; 3 -жагдай: finalString = finalString+"үч үч"; тыныгуу; 4 -жагдай: finalString = finalString+"о төрт"; тыныгуу; 5 -жагдай: finalString = finalString+"о беш"; тыныгуу; 6 -жагдай: finalString = finalString+"оо алты"; тыныгуу; 7 -жагдай: finalString = finalString+"о жети"; тыныгуу; 8 -жагдай: finalString = finalString+"сегиз"; тыныгуу; 9 -жагдай: finalString = finalString+"о тогуз"; тыныгуу; 10 -жагдай: finalString = finalString+"он"; тыныгуу; учурда 11: finalString = finalString+"он бир"; тыныгуу; учурда 12: finalString = finalString+"он эки"; тыныгуу; учурда 13: finalString = finalString+"он үч"; тыныгуу; 14 -жагдай: finalString = finalString+"он төрт"; тыныгуу; 15 -жагдай: finalString = finalString+"он беш"; тыныгуу; учурда 16: finalString = finalString+"он алты"; тыныгуу; учурда 17: finalString = finalString+"он жети"; тыныгуу; учурда 18: finalString = finalString+"он сегиз"; тыныгуу; учурда 19: finalString = finalString+"он тогуз"; тыныгуу; учурда 20: finalString = finalString+"жыйырма"; тыныгуу; Case 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+"отуз төрт"; тыныгуу; Case 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+"элүү беш"; тыныгуу; Case 56: finalString = finalString+"элүү алты"; тыныгуу; 57 -жагдай: finalString = finalString+"элүү жети"; тыныгуу; 58 -жагдай: finalString = finalString+"элүү сегиз"; тыныгуу; 59 -жагдай: finalString = finalString+"элүү тогуз"; тыныгуу; }
// түштө?
if (hh == 12 && mm == 0) {finalString = finalString+"чак түш"; } // түн ортосу? if (hh == 00 && mm == 0) {finalString = finalString+"midnight"; }
}
боштук цикл ()
{// убакытты RTC байтынан секунд, мүнөт, саат, dayOfWeek, dayOfMonth, ай, жыл алуу; getDateDs1307 (& экинчи, & мүнөт, & саат, & dayOfWeek, & dayOfMonth, & ай, & жыл);
// убакытты сүйлөмдүн сабына айландырыңыз
createTextTime (саат, мүнөт);
// азыр текстти DMDге жөнөтүңүз
drawText (finalString); }
Эскизде DS1307/3232 реалдуу убакыт сааттарынан убакытты белгилөө жана алуу үчүн кадимки функциялар бар, жана адаттагыдай эле, биздин бардык сааттарыбызда убакыт маалыматын өзгөрмөлөргө void setup (), андан кийин setDateDs1307 (), эскизди жүктөп, setDateDs1307ге кайра комментарий бериңиз, андан кийин эскизди дагы бир жолу жүктөңүз. Эгерде сиз жабдыкка негизделген колдонуучу интерфейсин кошпосоңуз, убакытты кайра коюу үчүн ошол процессти кайталаңыз.
3 -кадам:
Убакыт void loop () ичинде алынгандан кийин, createTextTime () функциясына өткөрүлөт. Бул функция "Бул" менен башталып, көрсөтүлө турган текст сабын түзөт, андан кийин учурдагы убакытка жараша кайсы сөздөр ээрчиш керектигин аныктайт. Акыры drawText () функциясы текстти кармап турган сапты DMDге өткөрүлө турган символдордун өзгөрмөсүнө айландырат.
Сунушталууда:
Сөз үчүн текст ARMbasic Powered UChip жана башка ARMbasic Powered SBCлерди чыкылдатыңыз: 3 кадам
Сөз үчүн текст ARMbasic Powered UChip жана башка ARMbasic Powered SBCлерди чыкылдатыңыз: Киришүү: Жакшы күн. Менин атым Тод. Мен аэрокосмостук жана коргонуу тармагындагы профессионалмын, ал дагы жүрөгүндө бир аз геик.Илхам: BBS, 8-биттик микроконтроллерлер, Kaypro/Commodore/Tandy/TI-994A жеке компьютерлер доорунан башталат, качан R
Сиздин Arduino ESP долбооруңуздан SMS текст кабарларын кантип жөнөтүү керек: 6 кадам
Сиздин Arduino ESP долбооруңуздан SMS текст билдирүүлөрүн кантип жөнөтүү керек: Бул көрсөтмө ESP8266 түзмөгүн жана WiFi байланышын колдонуу аркылуу сиздин arduino долбооруңуздан SMS текст билдирүүлөрүн кантип жөнөтүүнү көрсөтөт. Эмнеге SMSти колдоносуз? билдирүүлөр. * SMS билдирүүлөрү дагы
Photoshopто жаркыраган текст үйрөткүчү: 16 кадам
Photoshopто жылтыр тексттин үйрөткүчү: Орто графикалык дизайнер жана мультимедия генералы болгондуктан, жылтыр тексттин шрифти дизайн талабы менен кеңири таралган. Бул көрсөтмөдө мен жаркыраган текст шрифтине график катары жетүү үчүн кадамдарды көрсөтөм
Gixie Сааты: Эң сонун Glow Tube Сааты: 4 кадам
Gixie Сааты: Эң сонун Glow Tube Сааты: Мага Nixie Tube абдан жагат, бирок ал өтө кымбат, мен аны көтөрө албайм. Ошентип, мен бул Gixie Саатын түзүүгө жарым жыл сарптадым. Gixie Сааты акрил жарыгын жасоо үчүн ws2812 жарыктандыруу аркылуу ишке ашат
Текст эскертүүлөрү бар Arduino эшик сигнализациясы: 14 кадам (сүрөттөр менен)
Arduino Door Alarm with Text Alerts: Бул эшиктин абалын аныктоо үчүн магниттик камыш которгучун колдонгон Arduino негизделген эшик ойготкучу жана үн сигналын жана текст билдирүүсүнө негизделген сигналды камтыйт