Berlin klocka, Arduino Nano, DS1307 Realtidsklocka. 74HC595N 8-bitars skiftregister. (5 / 5 steg)
Steg 5: Hela programmet
< p > < Wire.h >< br > < Time.h > #include #include
#include < DS1397RTC.h >
int jag = 0;
int k = 0;
int x = 0;
int minFivesMSB = 0;
int minFivesLSB = 0;
int temp = 0;
int minFives = 0;
int timmar = 0;
int hoursFives = 0;
int minUnits = 0;
int oldHoursFives = hoursFives;
CONST int changeTime = 14.
CONST int setHourPos = 15.
CONST int setMinPos = 16.
CONST int setHourNeg = 17;
CONST int setMinNeg = 11;
tmElements_t tm;
void setup()
{
pinMode (2, utgång); //latchOne
pinMode (3, OUTPUT); //latchTwo
pinMode (4, OUTPUT); //latchThree
pinMode (5, OUTPUT); //clockPinOne
pinMode (6, OUTPUT); //clockPinTwo
pinMode (7, OUTPUT); //clockPinThree
pinMode (8, OUTPUT); //dataPinOne
pinMode (9, OUTPUT); //dataPinTwo
pinMode (10, OUTPUT); //dataPinThree
pinMode (changeTime, ingång);
pinMode (setHourPos, ingång);
pinMode (setMinPos, ingång);
pinMode (setHourNeg, ingång);
pinMode (setMinNeg, ingång);
Serial.BEGIN(9600);
}
void runningTotal(int number)
{
int s = 1;
int j = 0;
Temp = 0;
medan (j < nummer)
{
Temp = temp + s;
s = s * 2;
j = j + 1.
}
}
void obtainNo()
{
minFives = jag / 5;
minUnits = jag %5.
hoursFives = k/5;
timmar = k %5.
om (minFives > 7) //split minuter som det rullar SKIFT över två register
{
minFivesLSB = 8;
minFivesMSB = minFives - 8.
}
annat
{
minFivesLSB = minFives;
minFivesMSB = 0;
}
}
void obtainRunning()
{
runningTotal(minUnits);
minUnits = härda;
runningTotal(minFivesLSB);
minFivesLSB = härda;
runningTotal(minFivesMSB);
minFivesMSB = härda;
runningTotal(hours);
timmar = härda;
runningTotal(hoursFives);
hoursFives = härda;
}
void compileRegs()
{
minUnits = minUnits << 3;
minUnits = minUnits + minFivesMSB;
hoursFives = hoursFives << 4;
hoursFives = hoursFives + timmar.
om ((tm. Andra) % 2 & & minUnits < 128)
{
minUnits = minUnits + 128;
}
annat
{
om (minUnits > 128)
{
minUnits = minUnits - 128;
}
}
}
void sendToRegs()
{
shiftOut (8, 5, MSBFIRST, minFivesLSB);
digitalWrite (2, låg).
digitalWrite (2, hög).
shiftOut (9, 6, MSBFIRST, minUnits);
digitalWrite (3, låg).
digitalWrite (3, hög).
shiftOut (10, 7, MSBFIRST, hoursFives);
digitalWrite (4, låg).
digitalWrite (4, hög).
}
void checkAdj()
{
om (digitalRead(changeTime) == hög)
{
om (digitalRead(setHourPos) == hög)
{
osignerade långa v = RTC.get();
v = v + 3600;
RTC.set(v);
}
om (digitalRead(setMinPos) == hög)
{
osignerade långa v = RTC.get();
v = v + 60.
RTC.set(v);
}
om (digitalRead(setHourNeg) == hög)
{
osignerade långa v = RTC.get();
v = v - 3600;
RTC.set(v);
}
om (digitalRead(setMinNeg) == hög)
{
osignerade långa v = RTC.get();
v = v - 60.
RTC.set(v);
}
Jag = (tm. Minut).
k = (tm. Timme).
obtainNo();
obtainRunning();
compileRegs();
sendToRegs();
Delay(300);
}
}
void loop()
{
om (RTC.read(tm))
{
checkAdj();
Jag = (tm. Minut).
k = (tm. Timme).
obtainNo();
obtainRunning();
compileRegs();
sendToRegs();
}
} < /p >