Съдържание:
Видео: Прецизен часовник: 3 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:50
Всички имаме нужда от часовници, така че защо да не си направите сами в тази инструкция, ще ви покажа как да направите часовник 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: Схематично (Това всъщност не е стъпка)
Ако някой, който чете това, е технологичен глупак, тук има и схема, можете да го погледнете полудял.
Насладете се и се забавлявайте и най -вече останете свежи.
Препоръчано:
Waveshare E-ink дисплей Прецизен волтметър (0-90v DC) с Arduino Nano: 3 стъпки
Waveshare E-ink дисплей Прецизен волтметър (0-90v DC) с Arduino Nano: В тази инструкция използвам 2,9-инчов дисплей Waveshare E-Paper с Arduino Nano, разделител на напрежение и ADS1115 за показване на прецизни напрежения до 90 волта DC на дисплея на електронната хартия. Тази инструкция комбинира тези два предишни проекта:- Ardui
Прецизен и точен измервателен уред Arduino (0-90V DC): 3 стъпки
Arduino Precision & Accurate Volt Meter (0-90V DC): В тази инструкция аз построих волтметър за измерване на високи напрежения DC (0-90v) с относителна прецизност и точност, използвайки Arduino Nano. Тестовите измервания, които направих, бяха достатъчно точни, най -вече в рамките на 0,3v от действителното напрежение, измерено с
Arduino Nano - MPL3115A2 Прецизен сензор за висотомер Сензор: 4 стъпки
Arduino Nano - MPL3115A2 Прецизен сензор за висотомер Сензор: MPL3115A2 използва MEMS сензор за налягане с I2C интерфейс за предоставяне на точни данни за налягане/надморска височина и температура. Изходите на сензора са цифровизирани от 24-битов ADC с висока разделителна способност. Вътрешната обработка премахва компенсационните задачи от
Raspberry Pi - MPL3115A2 Прецизен сензор за висотомер Python Урок: 4 стъпки
Raspberry Pi - MPL3115A2 Прецизен сензор за висотомер на Python Урок: MPL3115A2 използва MEMS сензор за налягане с I2C интерфейс за предоставяне на точни данни за налягане/надморска височина и температура. Изходите на сензора са цифровизирани от 24-битов ADC с висока разделителна способност. Вътрешната обработка премахва компенсационните задачи от
ESP8266 Мрежов часовник без RTC - Nodemcu NTP Часовник Няма RTC - ИНТЕРНЕТЕН ЧАСОВНИК ПРОЕКТ: 4 стъпки
ESP8266 Мрежов часовник без RTC | Nodemcu NTP Часовник Няма RTC | ИНТЕРНЕТЕН ЧАСОВНИК ПРОЕКТ: В проекта ще се прави часовник проект без RTC, ще отнеме време от интернет с помощта на wifi и ще го покаже на дисплея st7735