Tartalomjegyzék:

Precíziós óra: 3 lépés
Precíziós óra: 3 lépés

Videó: Precíziós óra: 3 lépés

Videó: Precíziós óra: 3 lépés
Videó: Йога для начинающих дома с Алиной Anandee #3. Здоровое гибкое тело за 40 минут. Продвинутый уровень. 2024, Július
Anonim
Precíziós óra
Precíziós óra

Mindannyiunknak szüksége van órákra, ezért miért ne készítse el sajátját ebben az oktatóanyagban. Megmutatom, hogyan kell precíziós órát készíteni, miután beállította, automatikusan nyomon követi az aktuális időt a háttérben. Miközben szintén csak nagyon kevés kellékre és nulla forrasztásra van szükség.

Kellékek

Először is szüksége lesz egy Arduino -ra, de bármelyik Arduino működni fog

Ezután szükség lesz egy sor általános jumper vezetékre.

2 12 mm -es Sparkfun nyomógombos kapcsoló

Hagyományos kenyérlap

és egy 1660 -as LCD 1602 kijelző

1. lépés: Kábelezés

Vezeték
Vezeték

Annak érdekében, hogy ez az óra működjön, ezt nagyon specifikus módon kell bekötni, különben egy csomó véletlenszerű szám jelenik meg a képernyőn, nem pedig az idő.

2. lépés: A kód

Mivel nem RTC -t használunk, a kód egy kicsit hosszú lesz, de szerencsére minden kemény munkát elvégeztem érted, és itt megadtam.

Csak másolja és illessze be ezt az Arduino IDE -be vagy a webszerkesztőbe.

#include "LiquidCrystal.h"

// Ez határozza meg az LCD kábelezését a DIGITALpins const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

// Digitális LCD -kontraszt beállítás int cs = 9; // 9 -es tű a kontraszthoz PWM const int kontraszt = 100; // alapértelmezett kontraszt

// a kezdeti idő kijelzése 12:59:45 PM int h = 12; int m = 59; int s = 45; int zászló = 1; //DÉLUTÁN

// Időbeállító gombok int gomb1; int gomb2;

// Tű definíció az időbeállítási gombokhoz int hs = 0; // pin 0 for Oours Setting int ms = 1; // pin 1 for perc

// Háttérfény időkorlátja konst int int Time_light = 150; int bl_TO = Időfény; // Háttérvilágítás időtúllépése int bl = 10; // Háttérfény pin konst int int háttérvilágítás = 120; // nem több, mint 7mA !!!

// A pontos időolvasáshoz használja az Arduino valós idejű órát, és ne csak a delay () static uint32_t last_time, now = 0; // RTC

void setup () {lcd.begin (16, 2); pinMode (hs, INPUT_PULLUP); // kerülje a külső Pullup ellenállásokat az 1. gombhoz PinMode (ms, INPUT_PULLUP); // és a Button 2 analogWrite (cs, kontraszt); // Állítsa be a kontraszt VO analogWrite (bl, háttérvilágítás); // Turn a Háttérvilágítás most = millis (); // olvassa el az RTC kezdeti értékét}

void loop () {lcd.begin (16, 2); // minden másodpercben // LCD kijelző frissítése // IDŐ nyomtatása órában, percben, másodpercben + AM/PM lcd.setCursor (0, 0); lcd.print ("Idő"); if (h <10) lcd.print ("0"); // mindig 2 számjegy lcd.print (h); lcd.print (":"); ha (m <10) lcd.print ("0"); lcd.print (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.nyomat (ok);

if (zászló == 0) lcd.print ("AM"); if (zászló == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // 2. sor lcd.print ("Precíziós óra");

// továbbfejlesztett késleltetés (1000) // Sokkal jobb pontosság, nem függ a ciklus végrehajtási idejétől

for (int i = 0; i <5; i ++) // készítsen 5 alkalommal 200 ms -os ciklust, a gyorsabb válaszért {

while ((most-utolsó_idő) <200) // delay200ms {most = millis (); } // belső 200 ms ciklus last_time = now; // készülj fel a következő körre

// Beállítás gombok olvasása gomb1 = digitalRead (hs); // Gombok olvasása gomb2 = digitalRead (ms);

// Háttérvilágítás időtúllépése bl_TO--; if (bl_TO == 0) {analogWrite (bl, 0); // Háttérvilágítás KI bl_TO ++; } // Nyomja meg bármelyiket a Háttérvilágítás aktiválásához, ha ((((gomb1 == 0) | (gomb2 == 0)) & (bl_TO == 1)) {bl_TO = Időfény; analogWrite (bl, háttérvilágítás); // várjon, amíg a gombot elengedik, miközben ((gomb1 == 0) | (gomb2 == 0)) {gomb1 = digitalRead (hs); // gombok olvasása gomb2 = digitalRead (ms); }} else // Az 1. gomb vagy a 2. gomb feldolgozása, ha megérinti, miközben a háttérvilágítás be van kapcsolva {if (button1 == 0) {h = h+1; bl_TO = Időfény; analogWrite (bl, háttérvilágítás); }

ha (gomb2 == 0) {s = 0; m = m+1; bl_TO = Időfény; analogWrite (bl, háttérvilágítás); }

/* ---- kezelje a másodperceket, perceket, órákat am/pm túlcsordulás ----*/if (s == 60) {s = 0; m = m+1; } ha (m == 60) {m = 0; h = h+1; } ha (h == 13) {h = 1; zászló = zászló+1; if (zászló == 2) zászló = 0; }

if ((gomb1 == 0) | (gomb2 == 0)) // Kijelző frissítése, ha megnyomja az időbeállító gombot {// LCD kijelző frissítése // IDŐ nyomtatása órában, percben, másodpercben + AM/PM lcd.setCursor (0, 0); lcd.print ("Idő"); if (h <10) lcd.print ("0"); // mindig 2 számjegy lcd.print (h); lcd.print (":"); ha (m <10) lcd.print ("0"); lcd.print (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.nyomat (ok);

if (zászló == 0) lcd.print ("AM"); if (zászló == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // 2. sor lcd.print ("Precíziós óra"); }

} // end if else} // end for

// külső 1000 ms -os hurok

s = s+1; // növekmény mp. számlálás // ---- másodpercek, percek, órák kezelése am/pm túlcsordulás ---- if (s == 60) {s = 0; m = m+1; } ha (m == 60) {m = 0; h = h+1; } ha (h == 13) {h = 1; zászló = zászló+1; if (zászló == 2) zászló = 0; }

// Hurok vége}

3. lépés: Vázlatos (ez nem igazán lépés)

Vázlatos (ez nem igazán lépés)
Vázlatos (ez nem igazán lépés)

Ha valaki, aki ezt olvassa, technikai nerd, itt is van egy sematikus nézegetheti, hogy megőrül.

Élvezze és érezze jól magát, és legfőképpen friss maradjon.

Ajánlott: