Агуулгын хүснэгт:

Arduino гүйлгэх текст цаг: 3 алхам
Arduino гүйлгэх текст цаг: 3 алхам

Видео: Arduino гүйлгэх текст цаг: 3 алхам

Видео: Arduino гүйлгэх текст цаг: 3 алхам
Видео: 10 привычек, чтобы стать счастливым 2024, Арваннэгдүгээр
Anonim
Arduino гүйлгэх текст цаг
Arduino гүйлгэх текст цаг

Энэхүү төслийн зорилго нь цагийг ярьж буй цагийг харуулдаг гүйлгэх текст цаг бүтээх явдал юм (жишээлбэл, "шөнө дунд байна").

Энэ бол хурдан төсөл юм - бид танд тоног төхөөрөмж, ноорогоо ашиглахад хангалттай хэмжээгээр өгөх болно, тэгээд та үүнийг хэрэгцээнд нийцүүлэн цааш нь авч явах боломжтой болно.

Алхам 1: Техник хангамж

Техник хангамж
Техник хангамж

Танд гурван үндсэн зүйл хэрэгтэй болно -

  • Arduino Uno нийцтэй самбар
  • DS1307 эсвэл DS3231 IC ашиглан бодит цагийн цагийн хэлхээ эсвэл модуль
  • мөн монохром P10 загварын LED дэлгэц

Та гадны цахилгаан хангамж хүсч магадгүй, гэхдээ бид үүнийг дараа нь авах болно.

Эхний үе шат бол таны цагийг тохируулах явдал юм. Хэрэв танд энэ талаар тусламж хэрэгтэй бол энд дарж хичээлийг үзнэ үү.

Одоогийн байдлаар та "цагаа хэрхэн тохируулах вэ?" Гэж бодож байна гэж найдаж байна.

Гэсэн асуултад хоёр хариулт байна. Хэрэв та DS3231 -ийг ашиглаж байгаа бол нарийвчлал маш сайн байгаа тул үүнийг ноорог дээр байрлуулна уу (доороос үзнэ үү).

Үгүй бол энгийн хэрэглэгчийн интерфэйсийг нэмж оруулаарай-хэд хэдэн товчлуур үүнийг хийж чадна. Эцэст нь та тоног төхөөрөмжийг DMD -ийн ар талд байрлуулах хэрэгтэй. Өөрийнхөө хэрэгцээг хангах хангалттай өргөн цар хүрээтэй, энгийн шийдэл нь хяналтын самбарыг тэгшлэх бөгөөд ингэснээр та USB залгуурт хялбархан хандаж, дараа нь Sugru дээр наалдуулж болно.

Цагийг асаахтай холбоотойгоор та Arduino -аас НЭГ LED дэлгэц ажиллуулж болох бөгөөд гэр дотор сайн ашиглах боломжтой. Хэрэв та DMD-ийг бүрэн ажиллуулахыг хүсч байвал нүдний торлог бүрхэвчийг шатаах гэрэлтүүлгийг 5V 4A тогтмол гүйдлийн тусдаа тэжээлийн хангамж ашиглах хэрэгтэй. Хэрэв та хоёр 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" оруулах мөр #тодорхойлох 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 автобусны байтыг секунд, минут, цаг, өдөрOfWeek, dayOfMonth, сар, жил хүртэл гал асаах; // хувьсагчдыг өөрчилж, цагийг тохируулахын тулд setDateDs1307-т тайлбар өгөхгүй // функцийг дахин тайлбарлаж, ноорогоо дахин хоёр дахь удаагаа байршуулна уу = 0; минут = 13; цаг = 23; dayOfWeek = 4; dayOfMonth = 19; сар = 5; жил = 13; // setDateDs1307 (секунд, минут, цаг, өдөрOfWeek, dayOfMonth, сар, жил); }

// ердийн RTC функцууд

// Ердийн аравтын бутархай тоог хоёртын кодчилсон аравтын байт болгон хөрвүүлэх decToBcd (byte val) {return ((val/10*16) + (val%10)); }

// Хоёртын кодчилсон аравтын бутархайг ердийн аравтын тоо болгон хөрвүүлэх

байт bcdToDec (byte 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 (hex) 00010000 (binary) хяналтын бүртгэл рүү илгээдэг - 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 цаг/орой *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 = эхлэх; boolean ret = худал; while (! ret) {if ((timer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); таймер = миллис (); }}}

void createTextTime (int hh, int mm)

// энэ нь бүх цагийн мэдээллийг нэг өгүүлбэр болгон нэгтгэдэг {finalString = ""; // онцгой тохиолдолд өгүүлбэрийг арчина (доор) finalString = finalString+"Энэ";

// одоо цаг нэмнэ үү

if (hh == 1 || hh == 13) {finalString = finalString+"one"; } if (hh == 2 || hh == 14) {finalString = finalString+"хоёр"; } if (hh == 3 || hh == 15) {finalString = finalString+"гурван"; } 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+"долоон"; } 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+"арван нэгэн"; }

// одоо минут нэмнэ үү

шилжүүлэгч (мм) {тохиолдол 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+"хорин"; завсарлага; тохиолдол 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+"үд дунд"; } // шөнө дунд уу? if (hh == 00 && mm == 0) {finalString = finalString+"шөнө дунд"; }

}

хоосон давталт ()

{// RTC байтаас секунд, минут, цаг, dayOfWeek, dayOfMonth, сар, жилээс цаг авах; getDateDs1307 (& секунд, & минут, & цаг, & dayOfWeek, & dayOfMonth, & сар, жил);

// цагийг өгүүлбэрийн мөр болгон хөрвүүлэх

createTextTime (цаг, минут);

// одоо текстийг DMD рүү илгээнэ үү

drawText (finalString); }

Энэхүү ноорог нь DS1307/3232 бодит цагийн IC-ээс цагийг тохируулах, авах ердийн функцтэй бөгөөд ердийн цагийн хуваарийн дагуу та цагийн мэдээллийг хүчингүй тохиргоонд хувьсагч руу оруулах боломжтой (), дараа нь setDateDs1307 () дээр тайлбар өгөхгүй байх, ноорог байршуулж, setDateDs1307 дээр дахин сэтгэгдэл бичээд дараа нь ноорогоо дахин нэг удаа байршуулна уу. Хэрэв та тоног төхөөрөмжид суурилсан хэрэглэгчийн интерфэйс нэмээгүй бол цагийг дахин тохируулахын тулд процедурыг давтана уу.

Алхам 3:

Цагийг void loop () дээр авсны дараа createTextTime () функцэд дамжуулагдана. Энэ функц нь "Энэ" -ээс эхэлж харуулах текст мөрийг үүсгэж, тухайн цаг хугацаанаас хамаарч ямар үгсийг дагахыг тодорхойлдог. Эцэст нь drawText () функц нь текстийг агуулсан мөрийг DMD рүү дамжуулж болох тэмдэгт хувьсагч болгон хувиргадаг.

Зөвлөмж болгож буй: