Sommario:

Orologio di precisione: 3 passi
Orologio di precisione: 3 passi

Video: Orologio di precisione: 3 passi

Video: Orologio di precisione: 3 passi
Video: L'orologio che in battaglia c'è stato per davvero ... 2024, Luglio
Anonim
Orologio di precisione
Orologio di precisione

Abbiamo tutti bisogno di orologi, quindi perché non crearne uno tuo in questo tutorial ti mostrerò come creare un orologio di precisione una volta impostato che terrà automaticamente traccia dell'ora corrente sullo sfondo di tutto. Pur necessitando solo di pochissime forniture e zero saldature.

Forniture

Innanzitutto, avrai bisogno di un Arduino, ma qualsiasi Arduino funzionerà

Successivamente, avrai bisogno di un assortimento di cavi per ponticelli generici.

2 interruttori a pulsante Sparkfun da 12 mm

Un tagliere tradizionale

e un display LCD 1602 a 16 pin

Passaggio 1: cablaggio

Cablaggio
Cablaggio

Affinché questo orologio funzioni, devi collegarlo in un modo molto specifico, altrimenti otterrai una serie di numeri casuali sullo schermo anziché l'ora.

Passaggio 2: il codice

Dato che non stiamo usando un RTC, il codice sarà un po' lungo, ma per fortuna ho fatto tutto il duro lavoro per te e l'ho fornito qui.

Basta copiare e incollare questo nell'IDE di Arduino o nell'editor web.

#include "LiquidCrystal.h"

// Questo definisce il cablaggio LCD ai DIGITALpins const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LCD a cristalli liquidi (rs, en, d4, d5, d6, d7);

// Impostazione contrasto LCD digitale int cs=9;// pin 9 per contrasto PWM const int contrasto = 100;// contrasto predefinito

// la visualizzazione dell'ora iniziale è 12:59:45 PM int h=12; intm=59; int s=45; int flag=1; //pomeriggio

// Pulsanti per l'impostazione dell'ora int button1; int pulsante2;

// Definizione dei pin per i pulsanti di impostazione dell'ora int hs=0;// pin 0 per l'impostazione delle ore int ms=1;// pin 1 per l'impostazione dei minuti

// Timeout retroilluminazione const int Time_light=150; int bl_TO=Time_light;// Timeout retroilluminazione int bl=10; // Pin retroilluminazione const int backlight=120; // non più di 7mA !!!

// Per una lettura accurata dell'ora, usa Arduino Real Time Clock e non solo delay() static uint32_t last_time, now = 0; // RTC

void setup() { lcd.begin(16, 2); pinMode(hs, INPUT_PULLUP);// evita le resistenze Pullup esterne per il pulsante 1 pinMode(ms, INPUT_PULLUP);// e il pulsante 2 analogWrite(cs, contrast);// Regola il contrasto VO analogWrite(bl, backlight); // Ruota su Retroilluminazione ora=millis(); // legge il valore iniziale dell'RTC }

void loop() { lcd.begin(16, 2);// ogni secondo // Aggiorna display LCD // Stampa TEMPO in ore, minuti, secondi + AM/PM lcd.setCursor(0, 0); lcd.print("Ora"); if(h<10)lcd.print("0");// sempre 2 cifre lcd.print(h); lcd.print(:"); if(m<10)lcd.print("0"); lcd.print(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);// per la riga 2 lcd.print("Orologio di precisione");

// migliore sostituzione del ritardo (1000) // precisione molto migliore, non più dipendente dal tempo di esecuzione del ciclo

for (int i=0;i<5;i++)// crea un ciclo di 5 volte da 200 ms, per una risposta del pulsante più rapida {

while ((now-last_time)<200) //delay200ms { now=millis(); } // ciclo interno di 200 ms last_time=now; // prepara per il prossimo ciclo

// leggi i pulsanti di impostazione button1=digitalRead(hs); // Leggi i pulsanti button2=digitalRead(ms);

//Time out retroilluminazione bl_TO--; if(bl_TO==0) { analogWrite(bl, 0); // Retroilluminazione OFF bl_TO++; } // Premi uno qualsiasi per attivare la retroilluminazione if(((button1==0)|(button2==0)) & (bl_TO==1)) { bl_TO=Time_light; analogWrite(bl, retroilluminazione); // attende il rilascio del pulsante while ((button1==0)|(button2==0)) { button1=digitalRead(hs);// Leggi pulsanti button2=digitalRead(ms); } } else // Elabora il pulsante 1 o il pulsante 2 quando viene premuto mentre la retroilluminazione è attiva { if(button1==0){ h=h+1; bl_TO=Time_light; analogWrite(bl, retroilluminazione); }

if(pulsante2==0){ s=0; m=m+1; bl_TO=Time_light; analogWrite(bl, retroilluminazione); }

/* ---- gestisci secondi, minuti, ore am/pm overflow ----*/ if(s==60){ s=0; m=m+1; } if(m==60) { m=0; h=h+1; } if(h==13) { h=1; bandiera=bandiera+1; if(flag==2)flag=0; }

if((button1==0)|(button2==0))// Aggiorna il display se viene premuto il pulsante di impostazione dell'ora { // Aggiorna il display LCD // Stampa l'ORA in ore, minuti, secondi + AM/PM lcd.setCursor(0, 0); lcd.print("Ora"); if(h<10)lcd.print("0");// sempre 2 cifre lcd.print(h); lcd.print(:"); if(m<10)lcd.print("0"); lcd.print(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);// per la riga 2 lcd.print("Orologio di precisione"); }

} // termina se altrimenti } // termina per

// loop esterno da 1000 ms

s=s+1; //incremento sec. conteggio // ---- gestisci secondi, minuti, ore am/pm overflow ---- if(s==60){ s=0; m=m+1; } if(m==60) { m=0; h=h+1; } if(h==13) { h=1; bandiera=bandiera+1; if(flag==2)flag=0; }

// Fine del ciclo }

Passaggio 3: schematico (questo non è proprio un passaggio)

Schema (questo non è proprio un passaggio)
Schema (questo non è proprio un passaggio)

Se qualcuno che legge questo è un nerd tecnologico, ecco anche uno schema, puoi guardarlo impazzire.

Divertiti e divertiti e soprattutto rimani fresco.

Consigliato: