Spisu treści:

Precyzyjny zegar: 3 kroki
Precyzyjny zegar: 3 kroki

Wideo: Precyzyjny zegar: 3 kroki

Wideo: Precyzyjny zegar: 3 kroki
Wideo: Часть 3. Соединил всю зубрёжку А2 в несколько больших кусков 2024, Listopad
Anonim
Precyzyjny zegar
Precyzyjny zegar

Wszyscy potrzebujemy zegarów, więc dlaczego nie stworzyć własnego w tym instruktażowym, pokażę ci, jak zrobić precyzyjny zegar po ustawieniu, automatycznie śledzi aktualny czas w tle wszystkiego. Chociaż potrzebuje tylko bardzo mało materiałów eksploatacyjnych i zerowego lutowania.

Kieszonkowe dzieci

Najpierw będziesz potrzebować Arduino, ale każde Arduino będzie działać

Następnie będziesz potrzebować asortymentu ogólnych przewodów połączeniowych.

2 12mm przełączniki przyciskowe Sparkfun

Tradycyjna deska do krojenia chleba

i 16-pinowy wyświetlacz LCD 1602

Krok 1: Okablowanie

Okablowanie
Okablowanie

Aby ten zegar działał, musisz go podłączyć w bardzo specyficzny sposób, w przeciwnym razie na ekranie pojawi się kilka losowych liczb, a nie czas.

Krok 2: Kodeks

Ponieważ nie używamy RTC, kod będzie trochę długi, ale na szczęście wykonałem dla ciebie całą ciężką pracę i dostarczyłem go tutaj.

Po prostu skopiuj i wklej to do Arduino IDE lub edytora internetowego.

#include "LiquidCrystal.h"

// Definiuje okablowanie LCD do pinów CYFROWYCH const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// ustawienie kontrastu cyfrowego LCD int cs=9;// pin 9 dla kontrastu PWM const int contrast = 100;// domyślny kontrast

// początkowy wyświetlany czas to 12:59:45 PM int h=12; intm=59; int s=45; int flaga=1; //PO POŁUDNIU

// Przyciski ustawiania czasu int button1; wewn przycisk2;

// Definicja pinów dla przycisków ustawiania czasu int hs=0;// pin 0 dla ustawiania godzin int ms=1;// pin 1 dla ustawiania minut

// Limit czasu podświetlenia const int Time_light=150; int bl_TO=Czas_podświetlenia;// Limit czasu podświetlenia int bl=10; // Pin podświetlenia const int backlight=120; // nie więcej niż 7mA !!!

// Aby uzyskać dokładny odczyt czasu, użyj Arduino Real Time Clock, a nie tylko delay() static uint32_t last_time, now = 0; // RTC

void setup() { lcd.begin(16, 2); pinMode(hs, INPUT_PULLUP);// unikaj zewnętrznych rezystorów Pullup dla przycisku 1 pinMode(ms, INPUT_PULLUP);// i przycisku 2 analogWrite(cs, kontrast);// Ustaw kontrast VO analogWrite(bl, podświetlenie);// Włącz wł. podświetlenie teraz=millis(); // odczytaj wartość początkową RTC }

void loop() { lcd.begin(16, 2);// co sekundę // Aktualizacja wyświetlacza LCD // Wydruk CZASU w godzinach, minutach, sekundach + AM/PM lcd.setCursor(0, 0); lcd.print("Czas"); if(h<10)lcd.print("0");// zawsze 2 cyfry lcd.print(h); lcd.print(":"); if(m<10)lcd.print("0"); lcd.print(m); lcd.print(":"); if(s<10)lcd.print("0"); lcd.print(y);

if(flaga==0) lcd.print("AM"); if(flaga==1) lcd.print("PM"); lcd.setCursor(0, 1);// dla wiersza 2 lcd.print("Zegar precyzyjny");

// poprawiono zastąpienie opóźnienia(1000) // Dużo lepsza dokładność, koniec z zależnością od czasu wykonania pętli

for (int i=0;i<5;i++)// wykonaj 5-krotną pętlę 200ms, dla szybszej odpowiedzi przycisku {

while ((teraz-ostatni_czas)<200) //delay200ms { now=millis(); } // wewnętrzna pętla 200ms last_time=now; // przygotuj się na następną pętlę

// przyciski odczytu ustawień button1=digitalRead(hs);// przyciski odczytu button2=digitalRead(ms);

//Czas podświetlenia bl_TO--; if(bl_TO==0) { analogWrite(bl, 0);// Podświetlenie wyłączone bl_TO++; } // Naciśnij dowolny, aby aktywować podświetlenie if(((button1==0)|(button2==0)) & (bl_TO==1)) { bl_TO=Time_light; analogZapis(bl, podświetlenie); // poczekaj, aż przycisk zostanie zwolniony ((przycisk1==0)|(przycisk2==0)) { button1=digitalRead(hs);// Read Buttons button2=digitalRead(ms); } } else // Przetwarzaj przycisk 1 lub przycisk 2 po naciśnięciu przy włączonym podświetleniu { if(button1==0){ h=h+1; bl_TO=Światło_czasu; analogZapis(bl, podświetlenie); }

if(przycisk2==0){ s=0; m=m+1; bl_TO=Światło_czasu; analogZapis(bl, podświetlenie); }

/* ---- zarządzaj sekundami, minutami, godzinami przepełnienie am/pm ----*/ if(s==60){ s=0; m=m+1; } jeśli(m==60) { m=0; h=h+1; } jeśli(h==13) {h=1; flaga=flaga+1; jeśli(flaga==2)flaga=0; }

if((button1==0)|(button2==0))// Aktualizuj wyświetlacz po naciśnięciu przycisku ustawiania czasu { // Aktualizuj wyświetlacz LCD // Drukuj CZAS w godz., min., sek. + AM/PM lcd.setCursor(0, 0); lcd.print("Czas"); if(h<10)lcd.print("0");// zawsze 2 cyfry lcd.print(h); lcd.print(":"); if(m<10)lcd.print("0"); lcd.print(m); lcd.print(":"); if(s<10)lcd.print("0"); lcd.print(y);

if(flaga==0) lcd.print("AM"); if(flaga==1) lcd.print("PM"); lcd.setCursor(0, 1);// dla wiersza 2 lcd.print("Zegar precyzyjny"); }

} // koniec jeśli inaczej }// koniec dla

// zewnętrzna pętla 1000ms

s=s+1; //przyrost sek. liczenie // ---- zarządzaj sekundami, minutami, godzinami przepełnienie am/pm ---- if(s==60){ s=0; m=m+1; } jeśli(m==60) { m=0; h=h+1; } jeśli(h==13) {h=1; flaga=flaga+1; jeśli(flaga==2)flaga=0; }

// Koniec pętli }

Krok 3: Schemat (to naprawdę nie jest krok)

Schemat (to naprawdę nie jest krok)
Schemat (to naprawdę nie jest krok)

Jeśli ktoś, kto to czyta, jest nerdem technicznym, tutaj jest również schematem, na który możesz patrzeć, jak szaleje.

Ciesz się i baw, a przede wszystkim bądź świeży.

Zalecana: