Cuprins:

Ceas de precizie: 3 pași
Ceas de precizie: 3 pași
Anonim
Ceas de precizie
Ceas de precizie

Cu toții avem nevoie de ceasuri, așa că de ce să nu-ți creăm propriul în acest instructabil, îți voi arăta cum să faci un ceas de precizie odată ce ai setat, va ține automat evidența orei curente în fundalul tuturor. Deși are nevoie doar de foarte puține consumabile și zero lipiri.

Provizii

În primul rând, veți avea nevoie de un Arduino, dar orice Arduino va funcționa

Apoi, veți avea nevoie de un sortiment de fire jumper generice.

2 comutatoare cu buton Sparkfun de 12 mm

Un panou tradițional

și un ecran LCD 1602 cu 16 pini

Pasul 1: Cablare

Cablare
Cablare

Pentru ca acest ceas să funcționeze, trebuie să conectați acest lucru într-un mod foarte specific, altfel veți primi o grămadă de numere aleatorii pe ecran, mai degrabă decât ora.

Pasul 2: Codul

Deoarece nu folosim un RTC, codul va fi puțin lung, dar, din fericire, am făcut toată munca grea pentru dvs. și l-am furnizat aici.

Doar copiați și lipiți acest lucru fie în IDE Arduino, fie în editorul web.

#include „LiquidCrystal.h”

// Aceasta definește cablarea LCD la DIGITALpins const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

// Setare digitală LCD Constrast int cs = 9; // pinul 9 pentru contrast PWM const int contrast = 100; // contrast implicit

// afișarea timpului inițial este 12:59:45 PM int h = 12; int m = 59; int s = 45; int flag = 1; //P. M

// Butoane Setare oră buton int1; buton int2;

// Definirea pinilor pentru butoanele setate de timp int hs = 0; // pinul 0 pentru setarea orelor int ms = 1; // pinul 1 pentru setarea minutelor

// Backlight Time Out const int Time_light = 150; int bl_TO = Time_light; // Backlight Time-Out int bl = 10; // Backlight pin const int backlight = 120; // nu mai mult de 7mA !!!

// Pentru citirea exactă a timpului, utilizați Arduino Real Time Clock și nu doar delay () static uint32_t last_time, now = 0; // RTC

void setup () {lcd.begin (16, 2); pinMode (hs, INPUT_PULLUP); // evitați rezistențele externe Pullup pentru Butonul 1 pinMode (ms, INPUT_PULLUP); // și Butonul 2 analogWrite (cs, contrast); // Reglați contrastul VO analogWrite (bl, lumină de fundal); // Rotiți on Backlight now = millis (); // citiți valoarea inițială RTC}

bucla void () {lcd.begin (16, 2); // la fiecare secundă // Actualizați afișajul LCD // Imprimați TIMP în oră, Min, Sec + AM / PM lcd.setCursor (0, 0); lcd.print („Ora”); if (h <10) lcd.print ("0"); // întotdeauna 2 cifre lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); imprimare lcd (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.print (s);

if (flag == 0) lcd.print ("AM"); if (flag == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // pentru Linia 2 lcd.print ("Ceas de precizie");

// îmbunătățirea înlocuirii întârzierii (1000) // Precizie mult mai bună, nu mai dependentă de timpul de execuție a buclei

for (int i = 0; i <5; i ++) // faceți o buclă de 5 ori 200ms, pentru un răspuns mai rapid al butonului {

while ((now-last_time) <200) // delay200ms {now = millis (); } // bucla interioară de 200 ms last_time = now; // pregătește-te pentru următoarea buclă

// citiți butonul Setare butoane1 = citire digitală (hs); // Buton citire buton2 = citire digitală (ms);

// Timp de iluminare de fundal bl_TO--; if (bl_TO == 0) {analogWrite (bl, 0); // Lumina de fundal OFF bl_TO ++; } // Apăsați pe oricare pentru a activa Lumina de fundal dacă (((butonul1 == 0) | (butonul2 == 0)) & (bl_TO == 1)) {bl_TO = Ora_lumina; analogWrite (bl, lumină de fundal); // așteptați până când butonul este eliberat în timp ce ((buton1 == 0) | (buton2 == 0)) {buton1 = citire digitală (hs); // Butoane citire buton2 = citire digitală (ms); }} else // Procesează butonul 1 sau butonul 2 când este apăsat în timp ce iluminarea de fundal este activată {if (butonul1 == 0) {h = h + 1; bl_TO = Time_light; analogWrite (bl, lumină de fundal); }

if (buton2 == 0) {s = 0; m = m + 1; bl_TO = Time_light; analogWrite (bl, lumină de fundal); }

/ * ---- gestionează depășirea secunde, minute, ore am / pm ---- * / if (s == 60) {s = 0; m = m + 1; } if (m == 60) {m = 0; h = h + 1; } if (h == 13) {h = 1; steag = steag + 1; if (flag == 2) flag = 0; }

if ((buton1 == 0) | (buton2 == 0)) // Actualizați afișajul dacă butonul setat de timp este apăsat {// Actualizați afișajul LCD // Imprimați TIMP în oră, Min, Sec + AM / PM lcd.setCursor (0, 0); lcd.print („Ora”); if (h <10) lcd.print ("0"); // întotdeauna 2 cifre lcd.print (h); lcd.print (":"); if (m <10) lcd.print ("0"); imprimare lcd (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.print (s);

if (flag == 0) lcd.print ("AM"); if (flag == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // pentru Linia 2 lcd.print ("Ceas de precizie"); }

} // terminați dacă altfel} // terminați pentru

// buclă exterioară de 1000 ms

s = s + 1; // increment sec. numărare // ---- gestionează depășirea secunde, minute, ore am / pm ---- if (s == 60) {s = 0; m = m + 1; } if (m == 60) {m = 0; h = h + 1; } if (h == 13) {h = 1; steag = steag + 1; if (flag == 2) flag = 0; }

// sfârșitul buclei}

Pasul 3: Schematic (Acesta nu este cu adevărat un pas)

Schematic (Acesta nu este cu adevărat un pas)
Schematic (Acesta nu este cu adevărat un pas)

Dacă cineva care citește acest lucru este un tocilar de tehnologie, aici este, de asemenea, o schemă, o puteți privi înnebunind.

Bucurați-vă și distrați-vă și, mai ales, rămâneți proaspăt.

Recomandat: