Ställa in DS1307 Realtidsklocka använda följetong Monitor (1 / 2 steg)
Steg 1: kod
Kopiera och förbi detta in i Arduino IDE och Bränn till styrelsen. För detta använder jag en ACEDuino som har en ATMega 328 s.
Om du vill ange datum och tid är allt gjort är den seriella monitor, vilket är det lättaste jag har hittat.///////////////////////////////////////////
RTC uppgifter och tid setter / /
// //
Detta prov program tillåter användaren / /
att ställa in datum och tid av en RTC / /
med hjälp av I2C. //
// //
Koder av: / /
eGizmo Mechatronix Central / /
Taft, Manila, Filippinerna / /
http://www.egizmo.com / /
Den 15 april, 2013 / /
///////////////////////////////////////////#include < Wire.h >
CONST int DS1307 = 0x68; Adressen till DS1307 se datablad
CONST char * dagar [] =
{"Söndag", "Monday", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag"};
CONST char * månader [] =
{"Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"};Initierar alla värden:
byte näst = 0;
byte minut = 0;
byte timme = 0;
byte vardag = 0;
byte monthday = 0;
byte månad = 0;
byte år = 0;void setup() {
Wire.BEGIN();
Serial.BEGIN(9600);
Delay(2000); Denna försening kan MCU att läsa aktuellt datum och tid.Serial.Print ("aktuella datum och tid är:");
printTime();
Serial.println ("Please ändra till ny rad slutar inställningarna på det nedre högra hörnet av seriell övervaka");
Serial.println ("vill du ange datum och tid nu? Y/N");tag (!. Serial.available()) delay(10);
om (Serial.read() == "y" || Serial.Read() == "Y")Denna uppsättning funktioner tillåter användaren att ändra datum och tid
{
Serial.Read();
setTime();
Serial.Print ("aktuella datum och tid är nu:");
printTime();
}Serial.println ("tack.");
}Kontinuerlig funktion för konvertering av byte till decimaler och vice versa
void loop() {
}
byte decToBcd(byte val) {
tillbaka ((val/10 * 16) + (val % 10));
}
byte bcdToDec(byte val) {
tillbaka ((val/16 * 10) + (val % 16));
}Denna uppsättning koder är tillåter datainsamling
void setTime() {
Serial.Print ("Skriv in aktuellt år, 00-99. - ");
år = readByte();
Serial.println(Year);
Serial.Print ("Ange den aktuella månaden, 1-12. - ");
månad = readByte();
Serial.println(months[month-1]);
Serial.Print ("Ange den aktuella dagen i månaden, 1-31. - ");
monthday = readByte();
Serial.println(monthday);
Serial.println ("Ange den aktuella dagen i veckan, 1-7.");
Serial.Print ("1 solen | 2 mån | 3 tis | 4 Weds | 5 tors | 6 fre | 7 lör - ");
veckodag = readByte();
Serial.println(Days[Weekday-1]);
Serial.Print ("Ange aktuell timme i 24 timmars format, 0-23. - ");
timme = readByte();
Serial.println(Hour);
Serial.Print ("Ange den aktuella minut, 0-59. - ");
minut = readByte();
Serial.println(Minute);
för det andra = 0;
Serial.println ("data har registrerats.");Följande koder överför data till RTC
Wire.beginTransmission(DS1307);
Wire.write(byte(0));
Wire.write(decToBcd(Second));
Wire.write(decToBcd(Minute));
Wire.write(decToBcd(Hour));
Wire.write(decToBcd(Weekday));
Wire.write(decToBcd(monthday));
Wire.write(decToBcd(month));
Wire.write(decToBcd(Year));
Wire.write(byte(0));
Wire.endTransmission();
Ändarna överföring av data
}byte readByte() {
tag (!. Serial.available()) delay(10);
byte läsning = 0;
byte incomingByte = Serial.read();
medan (incomingByte! = '\n') {
om (incomingByte > = "0" & & incomingByte < = '9')
läsning = läsning * 10 + (incomingByte - '0');
annat;
incomingByte = Serial.read();
}
Serial.flush();
returnera behandlingen.
}void printTime() {
char buffer [3].
CONST char * AMPM = 0;
readTime();
Serial.Print(Days[Weekday-1]);
Serial.Print("");
Serial.Print(months[month-1]);
Serial.Print("");
Serial.Print(monthday);
Serial.Print (", 20);
Serial.Print(Year);
Serial.Print("");
om (timme > 12) {
dygnet-= 12.
AMPM = "PM";
}
annat AMPM = "AM";
Serial.Print(Hour);
Serial.Print(":");
sprintf (buffert, "% 02d", minut);
Serial.Print(buffer);
Serial.println(AMPM);
}
void readTime() {
Wire.beginTransmission(DS1307);
Wire.write(byte(0));
Wire.endTransmission();
Wire.requestFrom (DS1307, 7);
för det andra = bcdToDec(Wire.read());
minut = bcdToDec(Wire.read());
timme = bcdToDec(Wire.read());
veckodag = bcdToDec(Wire.read());
monthday = bcdToDec(Wire.read());
månad = bcdToDec(Wire.read());
år = bcdToDec(Wire.read());
}