Мазмұны:

Arduino айналдыру мәтіндік сағаты: 3 қадам
Arduino айналдыру мәтіндік сағаты: 3 қадам

Бейне: Arduino айналдыру мәтіндік сағаты: 3 қадам

Бейне: Arduino айналдыру мәтіндік сағаты: 3 қадам
Бейне: Arduino Millis функциясы 3 мысалмен түсіндірілді 2024, Қараша
Anonim
Arduino айналдыратын мәтіндік сағат
Arduino айналдыратын мәтіндік сағат

Бұл жобаның мақсаты - айтылатын уақытты көрсететін айналмалы мәтінді сағат құру (мысалы, «түн ортасы»).

Бұл жылдам жоба - біз сізге аппараттық құралдар мен эскиздерді алуға жеткілікті мүмкіндік береміз, содан кейін оны сіздің қажеттіліктеріңізге сәйкес жалғастыра аласыз.

1 -қадам: Жабдық

Аппараттық құрал
Аппараттық құрал

Сізге үш негізгі элемент қажет -

  • Arduino Uno үйлесімді тақта
  • нақты уақыттағы сағат схемасы немесе DS1307 немесе DS3231 IC көмегімен модуль
  • және монохромды P10 стиліндегі жарықдиодты дисплей

Сізге сыртқы қуат көзі қажет болуы мүмкін, бірақ біз оны кейінірек аламыз.

Бірінші кезең-бұл сіздің нақты уақытқа сәйкес келу. Егер сізге көмек қажет болса, оқулық үшін мына жерді басыңыз.

Қазіргі уақытта сіз «уақытты қалай орнатасыз?» Деп ойлайсыз деп үміттенемін.

Бұл сұраққа екі жауап бар. Егер сіз DS3231 -ді қолдансаңыз, оны тек эскизге орнатыңыз (төменде қараңыз), дәлдігі өте жақсы, күндізгі уақытты үнемдеу үшін эскизді жылына екі рет жаңа уақытпен жүктеу қажет.

Әйтпесе, қарапайым пайдаланушы интерфейсін қосыңыз-бірнеше түйме жасай алады. Соңында сізге DMD артқы жағындағы жабдықты қою керек. Сіздің жеке қажеттіліктеріңізді қанағаттандыруға мүмкіндік бар, қарапайым шешім USB тақтасына оңай кіруге болатын басқару тақтасын туралау болуы мүмкін, содан кейін оны Sugru -мен жабыстырыңыз.

Сағатты қосуға келер болсақ, сіз Arduino -дан ONE LED дисплейін іске қоса аласыз, ол үй ішінде жақсы жарықтықта жұмыс істейді. Егер сіз DMD толық жұмыс жасайтынын қаласаңыз, торлы қабықпен жанатын жарық 5В 4А тұрақты ток көзін пайдалануыңыз қажет. Егер сіз екі DMD қолдансаңыз - бұл 8А -ға барады және т. Сыртқы қуатты бір DMD терминалына қосыңыз (екінші немесе одан да көп DMD осы терминалдарға қосыңыз).

Егер сіз қуат кабелінің ұшын кесуді қаламасаңыз, тұрақты ток розеткасын қолданыңыз.

2 -қадам: Arduino эскизі

Сізге келесі екі Arduino кітапханасын орнату қажет - TimerOne және DMD. Содан кейін эскизді жүктеңіз:

// RTC #үшін «Wire.h» қосылады #DS1307_I2C_ADDRESS 0x68 анықтаңыз // DS1307 RTC - 0x68

// жарықдиодты дисплей үшін

#«SPI.h» қосу «» DMD.h «қосу» «TimerOne.h» қосу «SystemFont5x7.h» қосу «» Arial_black_16.h «қосу #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 (byte val) {return ((val/10*16) + (val%10)); }

// Екілік кодталған ондық бөлшекті қалыпты ондық сандарға түрлендіру

байт bcdToDec (байт val) {қайтару ((val/16*10) + (val%16)); }

жарамсыз setDateDs1307 (байт секунд, // 0-59

байт минут, // 0-59 байт сағаты, // 1-23 байт күніOfWeek, // 1-7 байт күніOfMonth, // 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 күн мен уақытты алады

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 ()); }

void 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 (); ұзақ таймер = бастау; ұзақ таймер2 = бастау; логикалық ret = жалған; while (! ret) {if ((таймер+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); таймер = миллис (); }}}

жарамсыз createTextTime (инт сағ, инт мм)

// бұл барлық уақыттағы мәліметтерді мәтінге біріктіреді {finalString = «»; // ерекше жағдайларда сөйлемді сүртіңіз (төменде) finalString = finalString+«Бұл»;

// енді сағатты қосыңыз

if (hh == 1 || hh == 13) {finalString = finalString+«бір»; } if (hh == 2 || hh == 14) {finalString = finalString+«екі»; } if (hh == 3 || hh == 15) {finalString = finalString+«үш»; } if (hh == 4 || hh == 16) {finalString = finalString+«төрт»; } if (hh == 5 || hh == 17) {finalString = finalString+«бес»; } if (hh == 6 || hh == 18) {finalString = finalString+«six»; } if (hh == 7 || hh == 19) {finalString = finalString+«жеті»; } if (hh == 8 || hh == 20) {finalString = finalString+«сегіз»; } if (hh == 9 || hh == 21) {finalString = finalString+«тоғыз»; } if (hh == 10 || hh == 22) {finalString = finalString+«он»; } if (hh == 11 || hh == 23) {finalString = finalString+«он бір»; }

// енді минуттарды қосыңыз

қосқыш (мм) {1 -жағдай: finalString = finalString+«бір бір»; үзіліс; 2 -жағдай: finalString = finalString+«екі екі»; үзіліс; 3 -жағдай: finalString = finalString+«үш үш»; үзіліс; 4 -жағдай: finalString = finalString+«төрт төрт»; үзіліс; 5 -жағдай: finalString = finalString+«бес бес»; үзіліс; 6 -жағдай: finalString = finalString+«oh six»; үзіліс; 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+«жиырма»; үзіліс; 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+«елу тоғыз»; үзіліс; }

// түстен кейін?

if (hh == 12 && mm == 0) {finalString = finalString+«midday»; } // түн ортасы? if (hh == 00 && mm == 0) {finalString = finalString+«түн ортасы»; }

}

бос цикл ()

{// уақытты RTC байтынан секунд, минут, сағат, dayOfWeek, dayOfMonth, ай, жыл алу; getDateDs1307 (& екінші, & минут, & сағат, & dayOfWeek, & dayOfMonth, & ай, & жыл);

// уақытты сөйлем жолына түрлендіру

createTextTime (сағат, минут);

// енді мәтінді DMD -ге жіберіңіз

drawText (finalString); }

Эскизде DS1307/3232 нақты уақытты IC-ден уақытты орнатуға және шығаруға арналған әдеттегі функциялар бар, және әдеттегідей барлық сағаттарда уақытты айнымалыларға void setup () ішінде енгізуге болады, содан кейін setDateDs1307 () белгісін өшіріңіз, нобайды жүктеңіз, setDateDs1307-ге түсініктеме беріңіз, содан кейін эскизді тағы бір рет жүктеңіз. Егер сіз жабдыққа негізделген пайдаланушы интерфейсін қоспасаңыз, уақытты қайта орнату үшін осы процедураны қайталаңыз.

3 -қадам:

Уақыт void loop () ішінде шығарылғаннан кейін, createTextTime () функциясына беріледі. Бұл функция «Бұл» деп басталатын мәтін жолын жасайды, содан кейін ағымдағы уақытқа байланысты қандай сөздерді ұстану керектігін анықтайды. Соңында drawText () функциясы мәтінді ұстап тұратын жолды DMD -ге жіберуге болатын символдық айнымалыға түрлендіреді.

Ұсынылған: