LED-klocka (7 / 9 steg)
Steg 7: kod
En snabb förklaring av vilka gå pins där... arduino stift 22-27 6 stift för timmar, arduino stift 28-36 är 9 minuter, och 37-45 är 9 sekunder.
Int-kedjor ett [30] och b [30] är tillsammans 2 dimensionell matrisen för katod och anod i varje LED.
Int matriser c [72] och d [72] är tillsammans arrayer i minuter (och sekunder eftersom de använder samma matrisen). Som du kan se båda matriser skiftas om du vill justera tiden = 0 position för att vara på toppen av klockan eftersom jag inte satte första lysdioderna på rätt plats när att sätta ihop. Du kan hålla skiftande värden åt vänster eller höger (bara se till att alltid till samma till både matriser c & d) till minuten / andra hand på gång = 0 är på toppen.
Du behöver inte till manuellt sätta tiden eftersom RTC biblioteket gör det vid initiering när du laddar upp skissen.
#include < Wire.h >
#include "RTClib.h"RTC_DS1307 RTC;
6 (timme) + 9 (min) + 9 (SEK) = 26 stift behövs med charlieplexing för att styra 144 lysdioder på 3 separata ringar.
6 stift = används i timmar
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
int en [30] = {22,23,24,25,26,27,22,23,24,25,26,27,22,23,24,25,26,27,22,23,24,25,26,27,22,23,24,25,26,27}.
int b [30] = {27,27,27,27,27,26,26,26,26,26,25,25,25,25,25,24,24,24,24,24,23,23,23,23,23,22,22,22,22,22}.
kan använda upp till 30 stift. så det finns 6 extra öppna positioner för användning.9 stift (x2) = används för både minuter och seconds(+9)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
int c [72] = {32,31,30,29,28,36,35,34,33,32,31,30,29,28,36,35,34,33,32,31,30,29,28,36,35,34,33,32,31,30,29,28,33,32,31,30,29,28,36,35,34,33,32,31,30,29,28,36,35,34,33,32,31,30,29,28,36,35,34,33}.
int d [72] = {33,33,33,33,33,33,33,33,34,34,34,34,34,34,34,34,35,35,35,35,35,35,35,35,36,36,36,36,36,36,36,36,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,32,32,32,32,32,32,32,32}.
kan styra upp till 72 stift. så det finns 12 extra öppna positioner för användning.
void setup()
{
Serial.BEGIN(57600);
Wire.BEGIN();
RTC.begin();
att DS1307 styrelse (för Arduino MEGA)
de andra lagerplatserna kopplas till SCL och SDA linjer på arduino (för MEGA de är stift 20 och 21) (för Duemilanove de är på analoga stiften, kontrollera arduino webbplats för att läsa mer).
pinMode (18, OUTPUT);
digitalWrite (18, låg).
pinMode (19, OUTPUT);
digitalWrite (19, hög).
}
void loop()
{
DateTime nu = RTC.now();
timme
int timeHr = now.hour();
int modHr = timeHr % 24. modulo 24
återställs varje stift så att stiftet är varken hög eller låg (lysdioder inte bo)
pinMode (22, ingång);
pinMode (23, ingång);
pinMode (24, ingång);
pinMode (25, ingång);
pinMode (26, ingång);
pinMode (27, ingång);
de nästa flera raderna ta ställning LED från arrayer en [] och [b] (katod och anod) och sätta dem till hög och låg utgångar för denna slinga.
pinMode (en [modHr], produktionen);
pinMode (b [modHr], produktionen);
digitalWrite(a[modHr],HIGH);
digitalWrite(b[modHr],LOW);
minut
int timeMin = now.minute();
int modMin = timeMin % 60.
pinMode (28, ingång);
pinMode (29, ingång);
pinMode (30, ingång);
pinMode (31, ingång);
pinMode (32, ingång);
pinMode (33, ingång);
pinMode (34, ingång);
pinMode (35, ingång);
pinMode (36, ingång);
pinMode (c [modMin], produktionen);
pinMode (d [modMin], produktionen);
digitalWrite(c[modMin],HIGH);
digitalWrite(d[modMin],LOW);
andra
int timeSec = now.second();
int modSec = timeSec % 60.
pinMode (37, ingång);
pinMode (38, ingång);
pinMode (39, ingång);
pinMode (40, ingång);
pinMode (41, ingång);
pinMode (42, ingång);
pinMode (43, ingång);
pinMode (44, ingång);
pinMode (45, ingång);
pinMode ((c [modSec] + 9), produktionen);
pinMode ((d [modSec] + 9), produktionen);
digitalWrite ((c [modSec] + 9), hög);
digitalWrite ((d [modSec] + 9), låg);
/*
pinMode (37, OUTPUT);
pinMode (38, OUTPUT);
pinMode (39, OUTPUT);
pinMode (40, OUTPUT);
pinMode (41, OUTPUT);
pinMode (42, OUTPUT);
pinMode (43, OUTPUT);
pinMode (44, OUTPUT);
pinMode (45, OUTPUT);
digitalWrite(37,LOW); 1
digitalWrite(38,LOW); 2
digitalWrite(39,LOW); 3
digitalWrite(40,LOW); 4
digitalWrite(41,LOW); 5
digitalWrite(42,LOW);
digitalWrite(43,LOW);
digitalWrite(44,LOW); 8 av
digitalWrite(45,HIGH); * /
}