Съдържание:

Прецизен часовник: 3 стъпки
Прецизен часовник: 3 стъпки

Видео: Прецизен часовник: 3 стъпки

Видео: Прецизен часовник: 3 стъпки
Видео: Този часовник ще погуби всички останали! 2024, Юли
Anonim
Прецизен часовник
Прецизен часовник

Всички имаме нужда от часовници, така че защо да не си направите сами в тази инструкция, ще ви покажа как да направите часовник Precision, след като зададете, автоматично ще следи текущото време на фона на всичко. Докато се нуждаят само от много малко консумативи и нулеви спойки.

Консумативи

Първо, ще ви трябва Arduino, но всеки Arduino ще работи

След това ще ви е необходим асортимент от обикновени джъмперни проводници.

2 12 -милиметрови превключвателя Sparkfun

Традиционна дъска

и LCD 1602 16 -пинов дисплей

Стъпка 1: Окабеляване

Електрически инсталации
Електрически инсталации

За да работи този часовник, трябва да го свържете по много специфичен начин, иначе ще получите куп случайни числа на екрана, а не времето.

Стъпка 2: Кодът

Тъй като не използваме RTC, кодът ще бъде малко дълъг, но за щастие свърших цялата упорита работа за вас и го предоставих тук.

Просто копирайте и поставете това или в IDE на Arduino, или в уеб редактора.

#include "LiquidCrystal.h"

// Това определя LCD окабеляването към DIGITALpins const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

// Настройка на цифров LCD Constrast int cs = 9; // щифт 9 за контраст PWM const int контраст = 100; // контраст по подразбиране

// начален дисплей на часа е 12:59:45 PM int h = 12; int m = 59; int s = 45; int флаг = 1; // PM

// Бутони за задаване на време int button1; бутон int2;

// Дефиниция на щифтове за бутони за задаване на време int hs = 0; // щифт 0 за часове Настройка int ms = 1; // щифт 1 за настройка на минути

// Backlight Time Out const int Time_light = 150; int bl_TO = Time_light; // Време за изчакване на подсветката int bl = 10; // Подсветка щифт const int подсветка = 120; // не повече от 7mA !!!

// За точно отчитане на времето използвайте Arduino часовник в реално време, а не просто забавяне () static uint32_t last_time, now = 0; // RTC

void setup () {lcd.begin (16, 2); pinMode (hs, INPUT_PULLUP); // избягвайте външни Pullup резистори за Button 1 pinMode (ms, INPUT_PULLUP); // и бутон 2 analogWrite (cs, контраст); // Регулирайте контраста VO analogWrite (bl, подсветка); // Завъртете на подсветка сега = millis (); // чете първоначалната стойност на RTC}

void loop () {lcd.begin (16, 2); // всяка секунда // Актуализиране на LCD дисплея // Време за печат в час, мин, сек + AM/PM lcd.setCursor (0, 0); lcd.print ("Време"); if (h <10) lcd.print ("0"); // винаги 2 цифри lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); lcd.принт (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.принт (и);

if (флаг == 0) lcd.print ("AM"); if (флаг == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // за ред 2 lcd.print ("Прецизен часовник");

// подобрена подмяна на забавяне (1000) // Много по -добра точност, без повече зависимост от времето за изпълнение на цикъла

for (int i = 0; i <5; i ++) // направете 5 времеви цикъл от 200 ms, за по -бърз отговор на бутона {

while ((now-last_time) <200) // забавяне200ms {now = millis (); } // вътрешен цикъл от 200 ms last_time = now; // подготвя се за следващия цикъл

// четене на бутоните за настройка button1 = digitalRead (hs); // бутони за четене button2 = digitalRead (ms);

// Време за изчакване на подсветката bl_TO--; if (bl_TO == 0) {analogWrite (bl, 0); // Подсветката е изключена bl_TO ++; } // Натиснете произволно, за да активирате подсветката, ако (((button1 == 0) | (button2 == 0)) & (bl_TO == 1)) {bl_TO = Time_light; analogWrite (bl, подсветка); // изчакайте, докато Button бъде освободен, докато ((button1 == 0) | (button2 == 0)) {button1 = digitalRead (hs); // Button Button Button2 = digitalRead (ms); }} else // Обработвайте бутон 1 или бутон 2, когато натиснете, докато подсветката е включена {if (button1 == 0) {h = h+1; bl_TO = Time_light; analogWrite (bl, подсветка); }

ако (button2 == 0) {s = 0; m = m+1; bl_TO = Time_light; analogWrite (bl, подсветка); }

/* ---- управление на секунди, минути, часове am/pm преливане ----*/if (s == 60) {s = 0; m = m+1; } ако (m == 60) {m = 0; h = h+1; } ако (h == 13) {h = 1; флаг = флаг+1; if (флаг == 2) флаг = 0; }

if ((button1 == 0) | (button2 == 0)) // Актуализиране на дисплея, ако е натиснат бутона за задаване на време {// Актуализиране на LCD дисплея // Печат на ВРЕМЕ в час, мин, сек + AM/PM lcd.setCursor (0, 0); lcd.print ("Време"); if (h <10) lcd.print ("0"); // винаги 2 цифри lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); lcd.принт (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.принт (и);

if (флаг == 0) lcd.print ("AM"); if (флаг == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // за ред 2 lcd.print ("Прецизен часовник"); }

} // край ако иначе} // край за

// външен цикъл от 1000ms

s = s+1; // прирастване сек. броене // ---- управление на секунди, минути, часове am/pm преливане ---- if (s == 60) {s = 0; m = m+1; } ако (m == 60) {m = 0; h = h+1; } ако (h == 13) {h = 1; флаг = флаг+1; if (флаг == 2) флаг = 0; }

// Край на цикъла}

Стъпка 3: Схематично (Това всъщност не е стъпка)

Схематично (това всъщност не е стъпка)
Схематично (това всъщност не е стъпка)

Ако някой, който чете това, е технологичен глупак, тук има и схема, можете да го погледнете полудял.

Насладете се и се забавлявайте и най -вече останете свежи.

Препоръчано: