Arduino klocka projekt för Ahmed (2 / 8 steg)
Steg 2: Lägga till några utdata - 7 Segment Display
Ser gång klickar bort på seriekonsoll är cool, men hey, du har redan en exakt digital klocka ner i hörnet av din datorskärm. Vi behöver några verkliga produktionen, så jag kommer att lägga en 7-segment display. Adafruit och SparkFun har ett antal olika alternativ, men jag kommer att använda Adafruit's I2C en (https://www.adafruit.com/products/881).
Både skärmen och modulen RTC (steg 5) har programvara bibliotek som måste installeras för att ge oss möjlighet att enkelt programmera dem. Bibliotek abstrakta all kod som lågaktivt hårdvara så kan vi bara fokusera på uppgiften.
Vi är så småningom kommer att behöva tre bibliotek, så kan installera dem alla nu. Börja med display biblioteket anvisningarna på https://learn.adafruit.com/adafruit-led-backpack/0... och installera biblioteken från:
- https://github.com/adafruit/Adafruit-LED-Backpack-...
- https://github.com/adafruit/Adafruit-gfx-Library
Också, med hjälp av instruktioner från https://learn.adafruit.com/ds1307-real-time-clock-... installera biblioteket från:
Wire displayen upp per instruktionerna och diagram, och testa den med hjälp av bibliotekets exempel "sevenseg". När du är nöjd det fungerar, vi är redo för några klocka kod:
#include "Wire.h" < br > #include "RTClib.h"
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
Adafruit_7segment matrix = Adafruit_7segment();
tid variabler
lång lastMillis;
int timmar = 0;
int minuter = 0;
int sekunder = 0;
void setup() {
Serial.BEGIN(9600); Öppen kanal till seriekonsoll
Serial.println ("Arduino klocka steg 2");
Matrix.BEGIN(0x70); Start-Visa
}
void loop() {
lång curMillis = millis(); få aktuella räknare i millisekunder
om (curMillis > (lastMillis + 1000)) {/ / om en sekund har passerat:
lastMillis = lastMillis + 1000;
sekunder = sekunder + 1. Increment sekunder
om (sekunder > 59) {
sekunder = 0;
minuter = minuter + 1. Increment minuter
om (minuter > 59) {
minuter = 0;
timmar = timmar + 1. Increment timmar
om (timmar > 23) {
timmar = 0;
}
}
}
Visa tid på seriekonsoll
om (timmar < 10) {
Serial.Print(""); pad timmar
}
Serial.Print(hours);
Serial.Print(":");
om (minuter < 10) {
Serial.Print("0"); pad minuter}
}
Serial.Print(Minutes);
Serial.Print(":");
om (sekunder < 10) {
Serial.Print("0"); pad sekunder
}
Serial.println(seconds);
Avbrottstid i enskilda siffror för visning
int h1 = timmar / 10;
int h2 = timmar - h1 * 10;
int m1 = minuter / 10;
int m2 = minuter - m1 * 10;
int s1 = sekunder / 10;
int s2 = sekunder - s1 * 10;
Skicka data som ska visas
om (h1) {
matrix.writeDigitNum (0, h1, falsk); }
annat {
matrix.writeDigitRaw (0, 0); tomt i stället för noll
}
matrix.writeDigitNum (1, h2, falsk);
matrix.drawColon (sekunder % 2). på om andra är udda
matrix.writeDigitNum (3, m1, falsk);
matrix.writeDigitNum (4, m2, falsk);
matrix.writeDisplay();
}
}
Beroende på din starttid, kan du bara se "0 00". Ganska tråkigt. Om du vill se lite nummer flytta, försök ersätta i de andra siffrorna (s1, s2) minuter siffror (m1, m2) för siffror # 3 & 4.
Också, de flesta digitala klockor ge uppgift om sekunder passerar genom blinkande kolon mellan timmar och minuter. Du kan göra det med en modulo test på sekunder att blinka på om det är udda, bort om det är ens. Prova att lägga till:
matrix.drawColon (sekunder % 2). < br >
RTC biblioteket tillgängligt (även utan den faktiska modul), kan vi använda några knep för att få den tiden skissen var sparas och ställa in tiden.
Får ladda upp datum tid < br > DateTime uploadDateTime = DateTime (__DATE__, __TIME__);
int timmar = uploadDateTime.hour();
int minuter = uploadDateTime.minute();
int sekunder = uploadDateTime.second();
Nu bör du ha en anständig visning av aktuell tid tills du återställer eller makt-cykel i styrelsen. Bara ladda upp skissen för att ställa in rätt tid igen!
Tid att utforska:
- Hur skulle du göra klockan springa snabbare eller långsammare?
- Kan du göra det köra baklänges?
- Hur kan du Visa AM/PM istället för 24 timmar?