Sadržaj:

Precizni sat: 3 koraka
Precizni sat: 3 koraka
Anonim
Precizni sat
Precizni sat

Svima su nam potrebni satovi pa zašto ne napravite sami u ovom uputstvu, pokazat ću vam kako napraviti precizni sat nakon što postavite, automatski će pratiti trenutno vrijeme u pozadini svega. Iako je potrebno samo vrlo malo zaliha i nula lemljenja.

Pribor

Prvo, trebat će vam Arduino, ali svaki Arduino će raditi

Zatim će vam trebati niz općenitih žica za kratkospojnike.

2 12mm prekidača Sparkfun

Tradicionalni Breadboard

i LCD 1602 16 pinski zaslon

Korak 1: Ožičenje

Ožičenje
Ožičenje

Da bi ovaj sat radio, morate ovo povezati na vrlo specifičan način, inače ćete na ekranu dobiti hrpu slučajnih brojeva, a ne vrijeme.

Korak 2: Kôd

Budući da ne koristimo RTC, kôd će biti malo dugačak, ali na sreću obavio sam sav težak posao za vas i pružio ga ovdje.

Samo kopirajte i zalijepite ovo u Arduino IDE ili web uređivač.

#include "LiquidCrystal.h"

// Ovo definira ožičenje LCD -a na DIGITAL -ove pinove const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LCD tekući kristal (rs, en, d4, d5, d6, d7);

// Postavka ograničenja digitalnog LCD -a int cs = 9; // pin 9 za kontrast PWM const int kontrast = 100; // zadani kontrast

// početni prikaz vremena je 12:59:45 PM int h = 12; int m = 59; int s = 45; int zastavica = 1; // PM

// Gumbi za podešavanje vremena int button1; int gumb2;

// Definicija pinova za tipke za postavljanje vremena int hs = 0; // pin 0 za sate Postavljanje int ms = 1; // pin 1 za postavljanje minuta

// Backlight Time Out const int Time_light = 150; int bl_TO = Time_light; // Pozadinsko osvjetljenje Time-Out int bl = 10; // Pozadinsko osvjetljenje pin const int pozadinsko osvjetljenje = 120; // ne više od 7mA !!!

// Za točno očitavanje vremena koristite Arduino sat u stvarnom vremenu, a ne samo delay () static uint32_t last_time, now = 0; // RTC

void setup () {lcd.begin (16, 2); pinMode (hs, INPUT_PULLUP); // izbjegavajte vanjske Pullup otpornike za gumb 1 pinMode (ms, INPUT_PULLUP); // i gumb 2 analogWrite (cs, kontrast); // Prilagodite kontrast VO analogWrite (bl, pozadinsko osvjetljenje); // Uključite na pozadinskom osvjetljenju sada = millis (); // čitanje početne vrijednosti RTC -a}

void loop () {lcd.begin (16, 2); // svake sekunde // Ažuriranje LCD zaslona // TIME ispisa u satima, min, sek + AM/PM lcd.setCursor (0, 0); lcd.print ("Vrijeme"); if (h <10) lcd.print ("0"); // uvijek 2 znamenke lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); lcd.tisak (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.tisak (i);

if (flag == 0) lcd.print ("AM"); if (flag == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // za redak 2 lcd.print ("Precizni sat");

// poboljšana zamjena odgode (1000) // Mnogo bolja točnost, ne ovisi više o vremenu izvođenja petlje

for (int i = 0; i <5; i ++) // napravi 5 puta 200ms petlju, za brži odgovor gumba {

while ((now-last_time) <200) // delay200ms {now = millis (); } // unutarnja petlja od 200 ms last_time = now; // priprema za sljedeću petlju

// čitanje gumba za postavljanje gumb1 = digitalRead (hs); // gumb gumba za čitanje gumb2 = digitalRead (ms);

// Istek pozadinskog osvjetljenja bl_TO--; if (bl_TO == 0) {analogWrite (bl, 0); // Pozadinsko osvjetljenje ISKLJUČENO bl_TO ++; } // Pritisnite bilo koje za aktiviranje pozadinskog osvjetljenja if (((button1 == 0) | (button2 == 0)) & (bl_TO == 1)) {bl_TO = Time_light; analogWrite (bl, pozadinsko osvjetljenje); // čekamo dok se gumb ne otpusti while ((button1 == 0) | (button2 == 0)) {button1 = digitalRead (hs); // Gumbi za čitanje button2 = digitalRead (ms); }} else // Gumb za obradu 1 ili gumb 2 kada se pritisne dok je pozadinsko osvjetljenje uključeno {if (button1 == 0) {h = h+1; bl_TO = Vremensko svjetlo; analogWrite (bl, pozadinsko osvjetljenje); }

if (button2 == 0) {s = 0; m = m+1; bl_TO = Vremensko svjetlo; analogWrite (bl, pozadinsko osvjetljenje); }

/* ---- upravljati sekundama, minutama, satima am/pm overflow ----*/if (s == 60) {s = 0; m = m+1; } if (m == 60) {m = 0; h = h+1; } if (h == 13) {h = 1; zastava = zastava+1; if (flag == 2) flag = 0; }

if ((button1 == 0) | (button2 == 0)) // Ažuriranje prikaza ako je pritisnuta tipka za postavljanje vremena {// Ažuriranje LCD zaslona // TIME ispisa u satima, min, sek + AM/PM lcd.setCursor (0, 0); lcd.print ("Vrijeme"); if (h <10) lcd.print ("0"); // uvijek 2 znamenke lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); lcd.tisak (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.tisak (i);

if (flag == 0) lcd.print ("AM"); if (flag == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // za redak 2 lcd.print ("Precizni sat"); }

} // završi ako je drugačije} // završi za

// vanjska petlja 1000ms

s = s+1; // prirast sec. brojanje // ---- upravljanje sekundama, minutama, satima am/pm overflow ---- if (s == 60) {s = 0; m = m+1; } if (m == 60) {m = 0; h = h+1; } if (h == 13) {h = 1; zastava = zastava+1; if (flag == 2) flag = 0; }

// kraj petlje}

Korak 3: Shema (ovo zapravo nije korak)

Shema (ovo zapravo nije korak)
Shema (ovo zapravo nije korak)

Ako netko čita ovo je tehnološki štreber, ovdje je i shema koju možete pogledati poludjeti.

Uživajte i zabavite se, a prije svega ostanite svježi.

Preporučeni: