Nixie bargraph klockan (6 / 6 steg)
Steg 6: Arduino skiss - klocka
Adafruit prydnadssak analog mätare klocka
Datum- och tidsfunktioner använder en DS1307 RTC ansluten via I2C och TinyWireM lib
Hämta dessa bibliotek från Adafruit's Github databasen och / / installera i katalogen Arduino bibliotek
#include < TinyWireM.h >
#include < TinyRTClib.h >
För debug, avkommentera följetong koden, använda en FTDI vän med sin RX pin ansluten till stift 3
Du behöver en terminal program (som freeware PuTTY för Windows) inställd på den
USB-porten på FTDI vän på 9600 baud. Avkommentera ut följetong kommandon för att se vad som händer / /
#define HOUR_PIN 1 / / timme display via PWM på prydnadssak GPIO #1
#define MINUTE_PIN 4 / / minut display via PWM på prydnadssak GPIO #4 (via Timer 1 samtal)
SendOnlySoftwareSerial Serial(3); Seriell överföring på prydnadssak Pin 3
RTC_DS1307 rtc; Ställ in realtidsklockan
Ogiltiga inställningar () {
pinMode (HOUR_PIN, OUTPUT); definiera PWM mätaren pins som utgångar
pinMode (MINUTE_PIN, OUTPUT);
PWM4_init(); Ställa in timer 1 arbeta PWM prydnadssak stift 4
TinyWireM.begin(); Börja I2C
RTC.BEGIN(); Börja DS1307 Realtidsklocka
Serial.BEGIN(9600); Börja Serial Monitor på 9600 baud
om (! rtc.isrunning()) {
Serial.println ("RTC körs inte!");
följande rad anger RTC till datum & tid denna skiss sammanställdes
RTC.ADJUST (DateTime (__DATE__, __TIME__));
}
}
Ogiltig loop () {
uint8_t hourvalue, minutevalue;
uint8_t hourvoltage, minutevoltage;
DateTime nu = rtc.now(); Få info RTC
hourvalue = now.hour(); Få timmen
om (hourvalue > 12) hourvalue-= 12. Denna klocka är 12 timmars
minutevalue = now.minute(); Få minuterna
minutevoltage = karta (minutevalue, 1, 60, 57, 255); Konvertera minuter till PWM intermittens
IF(hourvalue == 1) {
analogWrite (HOUR_PIN, 57);
}
IF(hourvalue == 2) {
analogWrite (HOUR_PIN, 75); varje timme motsvarar 18
}
IF(hourvalue == 3) {
analogWrite (HOUR_PIN, 91);
}
IF(hourvalue == 4) {
analogWrite (HOUR_PIN, 111);
}
IF(hourvalue == 5) {
analogWrite (HOUR_PIN, 126);
}
IF(hourvalue ==6) {
analogWrite (HOUR_PIN, 147);
}
IF(hourvalue == 7) {
analogWrite (HOUR_PIN, 165);
}
IF(hourvalue == 8) {
analogWrite (HOUR_PIN, 183);
}
IF(hourvalue == 9) {
analogWrite (HOUR_PIN, 201);
}
IF(hourvalue == 10) {
analogWrite (HOUR_PIN, 215);
}
IF(hourvalue == 11) {
analogWrite (HOUR_PIN, 237);
}
IF(hourvalue == 12) {
analogWrite (HOUR_PIN, 255);
}
analogWrite4(minutevoltage); minut analogwrite kan vara densamma som den kartläggning som fungerar
koden för att sätta processorn att sova kan vara att föredra - vi kommer att försena
Delay(5000); Kontrollera tiden var 5 sekunder. Du kan ändra detta.
}
void PWM4_init() {/ / ställa in PWM på prydnadssak GPIO #4 (PB4, stift 3) med hjälp av Timer 1
TCCR1 = _BV (CS10); ingen prescaler
GTCCR = _BV (COM1B1) | _BV (PWM1B); Rensa OC1B på Jämför
OCR1B = 127; duty cycle initiera till 50%
OCR1C = 255; frekvens
}
Funktionen att tillåta analogWrite på prydnadssak GPIO #4
void analogWrite4 (uint8_t duty_value) {
OCR1B = duty_value; tullen kan vara 0 till 255 (0 till 100%)
}