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

Энгийн, практик Arduino секундомер: 4 алхам
Энгийн, практик Arduino секундомер: 4 алхам
Anonim
Энгийн, практик Arduino секундомер
Энгийн, практик Arduino секундомер

Arduino секундомерыг интернетээс хайна уу. Хэрэв та энд байгаа бол та үүнийг л хийсэн байх. Хувийн туршлагаас харахад интернет дээрх аливаа секундомер нь хэтэрхий төвөгтэй (кодын хувьд, эхлэгчдэд зориулсан), эсвэл хэтэрхий хялбаршуулсан, практик биш, зүгээр л дахин тохируулалгүйгээр хэдэн секунд тоолсоор байдаг гэж би хэлж чадна.

Та ч бас тэгж бодож байна, тийм үү? За яахав дээ. Би үүнийг хийсэн, үүнээс гадна би миллис () функцээс шууд оруулдаг. Төгсгөлгүй тооны шугам (49 хоног хүртэл, эсвэл бусад). Хамгийн сайхан хэсэг? Энэ бол зөвхөн нэг мөр юм.

Дахин тохируулах нь секунд хэмжигчийн хамгийн хэцүү хэсэг юм. Дунд шатны програмистуудын хувьд хэрэв та хараахан амжаагүй байгаа бол үүнийг үргэлжлүүлээд секунд, минут, цагийг хамт хийж үзээрэй. Та миний ярьж байгаа зүйлийг ойлгох болно.

Анхлан суралцагчдын хувьд үргэлжлүүлэн уншиж, миний оюун ухааны авьяасыг гайхаарай.

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

Алхам 1: Шийдэл

Шийдэл
Шийдэл

Тиймээс асуудал бол дахин тохируулах явдал юм. Бидний хүсч буй зүйл бол дараалсан тоонуудын төгсгөлгүй гаралтаас (миллис () - үндсэндээ миллисекунд буюу үнэндээ 1.024 миллисекунд, гэхдээ хамаагүй) тоонуудын тасралтгүй, давтагдах мөчлөг юм.

Оюун санаанд орж ирэх хамгийн эхний зүйл бол time1 -time2, хоцролт гэх мэт ялгааг ашиглах явдал юм. Үүнийг март. Ачаалахад дор хаяж зургаан мөр код, if илэрхийлэл шаардлагатай.

Тиймээс үүнийг хэрхэн яаж хийхийг эндээс үзнэ үү. Бидэнд хязгаар бий (59). Бид 0 -ээс 59 хүртэлх бүх зүйлийг дахин дахин давтахыг хүсч байна. Яаж?

Хэрэв бид миллис функцийн үлдэгдлийг 59 -д хуваасан бол яах вэ? Бинго!

Тиймээс ийм байх ёстой:

(60 [хязгаар нь 59] + миллис () / 1000 [1000 миллисекунд бол секунд] % 60

За, тайлбарлая. (%) эсвэл модуль нь үндсэндээ (+) шиг үлдэгдлийг олдог оператор юм. 9 % 2 = 1 шиг.

Тиймээс:

  • үлдэгдэл (60 + 0) % 60 = 0
  • үлдэгдэл (60 + 1) % 60 = 1
  • үлдэгдэл (60 + 58) % 60 = 58
  • үлдэгдэл (60 + 59) % 60 = 59
  • үлдэгдэл (60 + 60) % 60 = 60
  • үлдэгдэл (60 + 61) % 60 = 1

Хараач!

Одоо хэсгүүдийн хувьд.

Алхам 2: эд ангиуд

Эд ангиуд
Эд ангиуд

Тийм ч их биш

  1. Ямар ч ардуино
  2. Аливаа дэлгэц (би 0.96 инчийн OLED ашигладаг байсан, гэхдээ та өөрт байгаа бүх зүйлээ ашиглаж болно, зүгээр л дэлгэцийнхээ дэлгэцийн функцэд зөв хувьсагчийг оруулаарай.)

Ингээд л болоо.

Алхам 3: Код

Явцгаая. Үүнийг маш тодорхой тайлбарласан тул ямар ч асуудал гарах ёсгүй. 0.96 OLED -ийн номын сангууд болон init нь кодонд байна. Хэрэв өөр бол үүнийг өөрийн дэлгэцээр солино уу.

// 0.96 OLED сангууд

#оруулах

#оруулах

#оруулах

#оруулах

// 0.96 OLED Init

#OLED_RESET -ийг тодорхойлох 4

Adafruit_SSD1306 дэлгэц (OLED_RESET);

int секунд;

int минут;

int цаг;

хүчингүй тохиргоо () {

// Бусад 0.96 инчийн OLED Init

display.begin (SSD1306_SWITCHCAPVCC, 0x3C);

display.clearDisplay (); display.setTextSize (2); display.setTextColor (ЦАГААН); }

void loop () {

секунд = (60 + миллис () / 1000) % 60;

минут = (60 + миллис () / 60000) % 60; цаг = (25 + миллис () / 3600000) % 25;

display.clearDisplay ();

display.setCursor (0, 22); // дэлгэцийг дахин тохируулснаас хойш хэдэн цагийн турш хэвлэх.хэвлэх (цаг); display.print ("h:");

// дахин тохируулснаас хойш хэдэн минутын минут хэвлэх

дэлгэц.хэвлэх (минут);

display.print ("m:");

// дэлгэцийг дахин тохируулснаас хойшхи секундын тоог хэвлэх.хэвлэх (секунд); display.print ("s");

display.setCursor (0, 0);

display.print ("Секундомер"); display.drawLine (0, 18, 128, 18, ЦАГААН); display.display ();

}

Алхам 4: Төгсгөлийн төгсгөл …

Төгсгөлийг дуусгаж байна …
Төгсгөлийг дуусгаж байна …

Ингээд л боллоо! Одоо очоод хүссэн зүйлээ хий. Өндөг хийх эсвэл хөршүүдээ авах.

Баяртай, Ааруш

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