Мазмуну:

Жөнөкөй, практикалык Arduino секундомери: 4 кадам
Жөнөкөй, практикалык Arduino секундомери: 4 кадам

Video: Жөнөкөй, практикалык Arduino секундомери: 4 кадам

Video: Жөнөкөй, практикалык Arduino секундомери: 4 кадам
Video: Робототехника Arduino комплектиси 2024, Ноябрь
Anonim
Жөнөкөй, практикалык Arduino секундомери
Жөнөкөй, практикалык Arduino секундомери

Интернеттен Arduino секундомерин издеңиз. Балким сиз жөн эле кылгандырсыз, эгер сиз бул жерде болсоңуз. Жеке тажрыйбамдан улам, мен сизге айта алам, интернеттеги секундомер өтө эле татаал (коддо, башталгычтар үчүн), же өтө жөнөкөйлөштүрүлгөн жана практикалык эмес, жөн эле секундасын баштапкы абалга келтирбестен.

Сиз да ошондой ойлойсуз, ээ? Жакшы, эмне деп ойлойсуң. Мен муну жасадым, жана дагы, мен миллис () функциясынан түздөн-түз киргизем- чексиз сандардын линиясы (49 күнгө чейин же башка). Эң жакшы бөлүгү? Бул бир гана сызык.

Баштапкы абалга келтирүү - бул секундомердин эң оор бөлүгү. Орто, программисттер үчүн, эгер сизде жок болсо, улантыңыз жана муну өзүңүз секунда, мүнөт жана саат менен бирге жасоого аракет кылыңыз. Мен айтып жатканымды түшүнөсүң.

Жаңы баштагандар үчүн окугула жана менин акылымдын генийине көңүл бургула.

Тамаша, бирок мен тапкан чечим абдан тыкан. Мына бул эмне:

1 -кадам: Чечим

Чечим
Чечим

Ошентип, көйгөй баштапкы абалга келүүдө. Биз каалаган нерсе - үзгүлтүксүз, кайталануучу цикл, ырааттуу сандардын чексиз чыгарылышынан (миллис () - негизинен миллисекунддарды, же чындыгында 1.024 миллисекунддарды эсептейт, бирок баары бир).

Акылга келген биринчи нерсе, убакыт1 -убакыт2 жана кечигүү сыяктуу айырмачылыкты колдонуу. Муну унут. Жүктөө үчүн кеминде алты сап код жана if оператору талап кылынат.

Ошентип, муну кантип жасоо керек. Бизде чек бар (59). Биз 0дон 59га чейинки нерселердин кайталанышын каалайбыз. Кантип?

Эмне … биз миллис функциясынын калган бөлүгүн 59га бөлүп алсак… Bingo!

Ошентип, мындай болушу керек:

(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 seconds;

int мүнөт;

int hours;

жараксыз орнотуу () {

// Дагы 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 -кадам: Акыркы бүтүрүү…

Акыркы бүтүрүү…
Акыркы бүтүрүү…

Ошентип, бүттү! Эми муну менен эмнени кааласаң ошону кыл. Бир аз жумуртка бөлүңүз же коңшуңузду ээлеп алыңыз.

Салам, Аруш

Сунушталууда: