Πίνακας περιεχομένων:

Ρολόι ακριβείας: 3 βήματα
Ρολόι ακριβείας: 3 βήματα

Βίντεο: Ρολόι ακριβείας: 3 βήματα

Βίντεο: Ρολόι ακριβείας: 3 βήματα
Βίντεο: ΤΟ ΚΑΛΥΤΕΡΟ ΟΙΚΟΝΟΜΙΚΟ ΡΟΛΟΙ? Redmi Watch 3 Greek Review 2024, Νοέμβριος
Anonim
Ρολόι ακριβείας
Ρολόι ακριβείας

Όλοι χρειαζόμαστε ρολόγια, οπότε γιατί να μην φτιάξετε το δικό σας σε αυτό το διδακτικό, θα σας δείξω πώς να φτιάξετε ένα ρολόι ακριβείας μόλις ρυθμίσετε θα παρακολουθεί αυτόματα την τρέχουσα ώρα στο παρασκήνιο όλων. Ενώ χρειάζεται μόνο πολύ λίγα εφόδια και μηδενικές συγκολλήσεις.

Προμήθειες

Πρώτον, θα χρειαστείτε ένα Arduino, αλλά οποιοδήποτε Arduino θα λειτουργήσει

Στη συνέχεια, θα χρειαστείτε μια σειρά από γενικά καλώδια βραχυκυκλωτήρων.

2 διακόπτες 12mm Sparkfun Pushbutton

Ένα παραδοσιακό Breadboard

και οθόνη LCD 1602 16 ακίδων

Βήμα 1: Καλωδίωση

Καλωδίωση
Καλωδίωση

Για να λειτουργήσει αυτό το ρολόι, πρέπει να το συνδέσετε με έναν πολύ συγκεκριμένο τρόπο, αλλιώς θα έχετε έναν σωρό τυχαίους αριθμούς στην οθόνη και όχι τον χρόνο.

Βήμα 2: Ο κώδικας

Δεδομένου ότι δεν χρησιμοποιούμε RTC, ο κώδικας θα είναι λίγο μακρύς, αλλά ευτυχώς έκανα όλη τη σκληρή δουλειά για εσάς και τον παρείχα εδώ.

Απλώς αντιγράψτε και επικολλήστε αυτό είτε στο Arduino IDE είτε στο web Editor.

#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);

// Digitalηφιακή ρύθμιση αντίστασης LCD int cs = 9; // ακίδα 9 για αντίθεση PWM const int contrast = 100; // προεπιλεγμένη αντίθεση

// η αρχική εμφάνιση ώρας είναι 12:59:45 μμ int h = 12; int m = 59; int s = 45; int σημαία = 1; //ΜΕΤΑ ΜΕΣΗΜΒΡΙΑΣ

// Κουμπιά ρύθμισης ώρας κουμπί int1; κουμπί int2;

// Ορισμός καρφιτσών για Κουμπιά ρύθμισης ώρας int hs = 0; // καρφίτσα 0 για Ρύθμιση ώρας int ms = 1; // καρφίτσα 1 για Ρύθμιση λεπτών

// Χρόνος λήξης οπίσθιου φωτισμού const int Time_light = 150; int bl_TO = Time_light; // Backlight Time-Out int bl = 10; // PIN οπίσθιου φωτισμού const int backlight = 120; // όχι περισσότερο από 7mA !!!

// Για ακριβή ανάγνωση ώρας, χρησιμοποιήστε το Arduino Real Time Clock και όχι απλώς καθυστερήστε () το 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); // και Button 2 analogWrite (cs, contrast); // Adjust Contrast VO analogWrite (bl, backlight); // Turn στο Backlight now = millis (); // διαβάστε την αρχική τιμή RTC}

void loop () {lcd.begin (16, 2); // κάθε δευτερόλεπτο // Ενημέρωση οθόνης LCD // Εκτύπωση ώρας σε ώρα, λεπτό, δευτ. + μμ/μμ lcd.setCursor (0, 0); lcd.print ("Time"); εάν (h <10) lcd.print ("0"); // πάντα 2 ψηφία lcd.print (h), lcd.print (":"); εάν (m <10) lcd.print ("0"); lcd.print (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.print (s);

if (σημαία == 0) lcd.print ("AM"); εάν (σημαία == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // για τη γραμμή 2 lcd.print ("Ρολόι ακριβείας");

// βελτιωμένη αντικατάσταση καθυστέρησης (1000) // Πολύ καλύτερη ακρίβεια, όχι περισσότερο εξαρτώμενη από τον χρόνο εκτέλεσης του βρόχου

για (int i = 0; i <5; i ++) // κάντε 5 φορές βρόχο 200ms, για ταχύτερη απόκριση κουμπιού {

while ((now-last_time) <200) // delay200ms {now = millis (); } // εσωτερικός βρόχος 200ms last_time = τώρα; // προετοιμασία για τον επόμενο βρόχο

// διαβάστε το κουμπί ρύθμισης κουμπιών1 = digitalRead (hs); // κουμπί ανάγνωσης κουμπιών2 = digitalRead (ms);

// Χρόνος λήξης οπίσθιου φωτισμού bl_TO--; if (bl_TO == 0) {analogWrite (bl, 0); // Backlight OFF bl_TO ++; } // Πατήστε οποιοδήποτε για να ενεργοποιήσετε το Backlight if (((button1 == 0) | (button2 == 0)) & (bl_TO == 1)) {bl_TO = Time_light; analogWrite (bl, οπίσθιος φωτισμός); // περιμένετε μέχρι να απελευθερωθεί το κουμπί ενώ ((button1 == 0) | (button2 == 0)) {button1 = digitalRead (hs); // κουμπιά ανάγνωσης κουμπί2 = digitalRead (ms); }} else // Κουμπί διεργασίας 1 ή κουμπί 2 όταν πατηθεί ενώ ο οπίσθιος φωτισμός είναι ενεργοποιημένος {if (button1 == 0) {h = h+1; bl_TO = Time_light; analogWrite (bl, οπίσθιος φωτισμός); }

εάν (κουμπί2 == 0) {s = 0; m = m+1; bl_TO = Time_light; analogWrite (bl, οπίσθιος φωτισμός); }

/* ---- διαχείριση δευτερολέπτων, λεπτών, ωρών π.μ./μ.μ. υπερχείλισης ----*/if (s == 60) {s = 0; m = m+1; } if (m == 60) {m = 0; h = h+1; } if (h == 13) {h = 1; σημαία = σημαία+1; εάν (σημαία == 2) σημαία = 0; }

if ((button1 == 0) | (button2 == 0)) // Ενημέρωση οθόνης αν πατηθεί το κουμπί ρύθμισης ώρας {// Ενημέρωση οθόνης LCD // Εκτύπωση ώρας σε ώρα, λεπτό, δευτ. + μμ/μμ lcd.setCursor (0, 0); lcd.print ("Time"); εάν (h <10) lcd.print ("0"); // πάντα 2 ψηφία lcd.print (h), lcd.print (":"); εάν (m <10) lcd.print ("0"); lcd.print (m); lcd.print (":"); if (s <10) lcd.print ("0"); lcd.print (s);

εάν (σημαία == 0) lcd.print ("ΠΜ"); εάν (σημαία == 1) lcd.print ("PM"); lcd.setCursor (0, 1); // για τη γραμμή 2 lcd.print ("Ρολόι ακριβείας"); }

} // τέλος αν αλλιώς} // τέλος για

// εξωτερικός βρόχος 1000ms

s = s+1; // αύξηση δευτ. καταμέτρηση // ---- διαχείριση δευτερολέπτων, λεπτών, ωρών π.μ./μ.μ. υπερχείλισης ---- εάν (s == 60) {s = 0; m = m+1; } if (m == 60) {m = 0; h = h+1; } if (h == 13) {h = 1; σημαία = σημαία+1; εάν (σημαία == 2) σημαία = 0; }

// Βρόχος τέλος}

Βήμα 3: Σχηματικό (Αυτό δεν είναι πραγματικά ένα βήμα)

Σχηματικό (Αυτό δεν είναι πραγματικά ένα βήμα)
Σχηματικό (Αυτό δεν είναι πραγματικά ένα βήμα)

Αν κάποιος που διαβάζει αυτό είναι τεχνολόγος εδώ είναι επίσης σχηματικός, μπορείτε να το δείτε τρελαμένος.

Απολαύστε και διασκεδάστε και κυρίως μείνετε φρέσκοι.

Συνιστάται: