Arduino Real Time Clock (DS1307) (4 / 7 steg)
Steg 4: Kontrollera och ställa in modulen
När du är klar montering modulen. Ansluta modulen till Arduino, så att stiften är ordentligt insatt i Arduino. Program för att testa modulen ges nedan. Koden uppdaterar ständigt tiden genom serieporten.
I ordning att köra modulen behöver vi två bibliotek vi behöver två bibliotek i Arduino programvaran. Följande steg Ställ Arduino programvaran med biblioteken behövs och koden.
Importerar bibliotek:
- Ladda ner biblioteket "RealTimeClockDS1307" och spara den på skrivbordet.
- Öppna Arduino och gå till skiss = > Importera bibliotek = > Lägg till bibliotek.
- Sedan Välj biblioteket sparade på skrivbordet och klicka på Lägg till.
- Nu Klistra in exempelkoden nedan och klicka på kompilera. Om det sammanställer framgångsrikt sedan hoppa över de återstående stegen.
- Om det inte importera andra bibliotek "Wire" och upprepa samma procedur och kompilera koden och det kommer att fungera.
Kod fungerar:
Koden är skriven av "David H. Brown" jag bara använda den för att ge dig en introduktion till DS1307. Hur som helst Arduino kommunicerar med modulen RTC och uppdateras tiden för varje sekund genom Serial Monitor. Skaparen har givit oss ett alternativ till sätta tiden när vi skickar kommandot "?". Följande meny visas.
Prova dessa:
h ## - Ställ timmar [utbud 1..12 eller 0..24]
i ## - minuter [utbud 0..59]
s ## - ange sekunder [utbud 0..59]
d ## - Ställ in datum [utbud 1..31]
m ## - ange månad [utbud 1..12]
y ## - set år [utbud 0..99]
w ## - ange godtyckligt dagen i veckan [utbud 1..7]
t - toggle 24-timmarsvisning
en - uppsättningen AM p - ange PM
z - start klockan Z - stoppa klockan
q - SQW/OUT = 1Hz Q - stoppa SQW/ut
Denna kod hjälper dig att ställa in tiden samt kontrollera om modulens backup batteri fungerar korrekt. I nästa tutorial kommer jag visa dig hur man ställer in en LCD-Display och Visa tiden från RTC-modulen. Här är koden för att testa modulen och en bifogad fil av samma.
#include < Wire.h >
#include < RealTimeClockDS1307.h >
RealTimeClock RTC; //=new RealTimeClock();
#define Display_Clock_Every_N_Seconds 10 / / n.secs att visa datum/tid
#define Display_ShortHelp_Every_N_Seconds 60 / / n.secs att visa antydan om hjälp
#define TEST_Squarewave
#define TEST_StopStart
#define TEST_1224Switch
int count = 0;
char formaterade [] = "00-00-00 00:00:00 x";
void setup() {
Wire.BEGIN();
Serial.BEGIN(9600);
pinMode (A3, OUTPUT); stift 16 (Analog pin 2) som resultat ***
digitalWrite (A3, hög); stift 16 (Analog pin 2) låg ***
pinMode (A2, OUTPUT); PIN-17 (Analog pin 3) som utgång ***
digitalWrite (A2, låg); PIN-17 (Analog pin 3) hög ***
Analoga Pin-inställningar till RTC effektmodul ***
}
void loop() {
IF(Serial.available())
{
processCommand();
}
RTC.readClock();
greve ++;
om (count % Display_Clock_Every_N_Seconds == 0) {
Serial.Print(Count);
Serial.Print(":");
RTC.getFormatted(formatted);
Serial.Print(Formatted);
Serial.println();
}
om (count % Display_ShortHelp_Every_N_Seconds == 0) {
Serial.println ("Skicka? en lista över kommandon.");
}
#ifdef TEST_Squarewave
om (count % 10 == 0)
{
Switch (count/10% 6)
{
fall 0:
Serial.Print ("fyrkantsvåg inaktiverad (låg impedans):");
RTC.sqwDisable(0);
Serial.println((int) RTC.readData(7));
bryta;
fall 1:
Serial.Print ("fyrkantsvåg inaktiverad (hög impedans):");
RTC.sqwDisable(1);
Serial.println((int) RTC.readData(7));
bryta;
fall 2:
Serial.println ("fyrkantsvåg är aktiverat i 1 Hz");
RTC.sqwEnable(RTC.SQW_1Hz);
bryta;
fall 3:
Serial.println ("fyrkantsvåg aktiverat på 4.096 kHz");
RTC.sqwEnable(RTC.SQW_4kHz);
bryta;
fall 4:
Serial.println ("fyrkantsvåg aktiverat vid 8.192 kHz");
RTC.sqwEnable(RTC.SQW_8kHz);
bryta;
fall 5:
Serial.println ("fyrkantsvåg aktiverat vid 32.768 kHz");
RTC.sqwEnable(RTC.SQW_32kHz);
bryta;
standard:
Serial.println ("fyrkantsvåg prov inte definierad").
} //switch
}
#endif
#ifdef TEST_StopStart
om (count % 10 == 0)
{
IF (!. RTC.isStopped())
{
IF(RTC.getSeconds() < 45)
{
Serial.println ("stoppa klockan 10 sekunder");
RTC.stop();
} //if vi har tillräckligt med tid
} annat {
RTC.setSeconds(RTC.getSeconds()+11);
RTC.start();
Serial.println (att lägga till 11 sekunder och starta om klockan");
}
} //if på en multipel av 10 räknas
#endif
#ifdef TEST_1224Switch
om (count % 10 == 0)
{
om (count % 20 == 0)
{
Serial.println ("byta till 12-timmars tid");
RTC.switchTo12h();
RTC.setClock();
}
annat
{
Serial.println ("byta till 24-timmars tid");
RTC.switchTo24h();
RTC.setClock();
}
}
#endif
}
void processCommand() {
IF (!. Serial.available()) {återvänder;}
char kommando = Serial.read();
int i, in2;
Switch(Command)
{
fallet "H":
fallet "h":
in=SerialReadPosInt();
RTC.setHours(in);
RTC.setClock();
Serial.Print ("ställa in timmar");
Serial.println(in);
bryta;
fallet "I":
fallet "i":
in=SerialReadPosInt();
RTC.setMinutes(in);
RTC.setClock();
Serial.Print ("ställa in minuter");
Serial.println(in);
bryta;
fallet ":
fallet ":
in=SerialReadPosInt();
RTC.setSeconds(in);
RTC.setClock();
Serial.Print ("ställa in sekunder");
Serial.println(in);
bryta;
fall "Y":
fall "y":
in=SerialReadPosInt();
RTC.setYear(in);
RTC.setClock();
Serial.Print ("inställningen år till").
Serial.println(in);
bryta;
fallet är ":
fallet är ":
in=SerialReadPosInt();
RTC.setMonth(in);
RTC.setClock();
Serial.Print ("inställningen månad till");
Serial.println(in);
bryta;
fall skulle ":
fall skulle ":
in=SerialReadPosInt();
RTC.setDate(in);
RTC.setClock();
Serial.Print ("inställningen datum");
Serial.println(in);
bryta;
fallet "W":
Serial.Print ("dag i veckan är");
Serial.println((int) RTC.getDayOfWeek());
bryta;
fallet "w":
in=SerialReadPosInt();
RTC.setDayOfWeek(in);
RTC.setClock();
Serial.Print ("inställningen dag vecka till");
Serial.println(in);
bryta;
't i mål ":
'T i mål ":
IF(RTC.is12hour()) {
RTC.switchTo24h();
Serial.println ("växla till 24-timmarsklocka.");
} annat {
RTC.switchTo12h();
Serial.println ("växla till 12-timmarsformat.");
}
RTC.setClock();
bryta;
fallet "A":
fallet "a":
IF(RTC.is12hour()) {
RTC.setAM();
RTC.setClock();
Serial.println ("Set AM.");
} annat {
Serial.println ("(ange timmar endast i 24-timmarsläge.)");
}
bryta;
fallet "P":
fallet "p":
IF(RTC.is12hour()) {
RTC.setPM();
RTC.setClock();
Serial.println ("Set PM.");
} annat {
Serial.println ("(ange timmar endast i 24-timmarsläge.)");
}
bryta;
fallet "q":
RTC.sqwEnable(RTC.SQW_1Hz);
Serial.println ("Square wave-utgång anges till 1Hz");
bryta;
fallet "Q":
RTC.sqwDisable(0);
Serial.println ("Square wave utdata bortkopplade (låg)");
bryta;
fallet "z":
RTC.start();
Serial.println ("klockan oscillator började.");
bryta;
fallet "Z":
RTC.stop();
Serial.println ("klockan oscillator stoppas.");
bryta;
fallet ">":
in=SerialReadPosInt();
IN2=SerialReadPosInt();
RTC.writeData (i, in2);
Serial.Print ("skriva att registrera");
Serial.Print(in);
Serial.Print ("värde");
Serial.println(IN2);
bryta;
fallet "<':
in=SerialReadPosInt();
IN2=RTC.readData(in);
Serial.Print ("Läs från register");
Serial.Print(in);
Serial.Print ("värde");
Serial.println(IN2);
bryta;
standard:
Serial.println ("Okänt kommando. Prova dessa: ");
Serial.println ("h ## - Ställ timmar [utbud 1..12 eller 0..24]");
Serial.println ("i ## - minuter [sträcker 0..59]");
Serial.println ("s ## - set sekunder [sträcker 0..59]");
Serial.println ("d ## - ange datum [utbud 1..31]");
Serial.println ("m ## - ange månad [utbud 1..12]");
Serial.println ("y ## - set år [utbud 0..99]");
Serial.println ("w ## - ange godtyckligt dagen i veckan [utbud 1..7]");
Serial.println ("t - växla 24-timmarsvisning");
Serial.println ("en - set AM p - set PM");
Serial.println();
Serial.println ("z - start klocka Z - stoppa klockan");
Serial.println ("q - SQW/ut = 1Hz Q - stoppa SQW/OUT");
Serial.println();
Serial.println ("> ##, ###-skriva att registrera ## värdet ###");
Serial.println ("< ##-läsa värdet i registret ##");
} //switch på kommando
}
läste i numeriska tecken tills något annat
eller finns inga fler data på följetong.
int SerialReadPosInt() {
int jag = 0;
boolean = false;
While(Serial.available() & &! gjort)
{
char c = Serial.read();
om (c > = "0" & & c < = '9')
{
jag = jag * 10 + (c-'0');
}
annat
{
= sant;
}
}
tillbaka i;
}