[Arduino]利用DS3102製作時鐘


我使用的是在淘寶上買的DS3102時鐘模組




















接線方面
DS1302
Arduino
VCC
3.3V
GND
GND
CLK
Digital Input 7
DAT
Digital Input 6
RST
Digital Input 5


Program方面
先把這模組加至Arduino library 中
第一次用時要先調校一下時鐘
可用剛加入的Library中的一個叫Set Clock的Sample
或直傳上傳以下編碼
// Example sketch for interfacing with the DS1302 timekeeping chip.
//
// Copyright (c) 2009, Matt Sparks
// All rights reserved.
//
// http://quadpoint.org/projects/arduino-ds1302
#include
#include
namespace {
// Set the appropriate digital I/O pin connections. These are the pin
// assignments for the Arduino as well for as the DS1302 chip. See the DS1302
// datasheet:
//
//   http://datasheets.maximintegrated.com/en/ds/DS1302.pdf
const int kCePin   = 5;  // Chip Enable
const int kIoPin   = 6;  // Input/Output
const int kSclkPin = 7;  // Serial Clock
// Create a DS1302 object.
DS1302 rtc(kCePin, kIoPin, kSclkPin);
String dayAsString(const Time::Day day) {
  switch (day) {
    case Time::kSunday: return "Sunday";
    case Time::kMonday: return "Monday";
    case Time::kTuesday: return "Tuesday";
    case Time::kWednesday: return "Wednesday";
    case Time::kThursday: return "Thursday";
    case Time::kFriday: return "Friday";
    case Time::kSaturday: return "Saturday";
  }
  return "(unknown day)";
}
void printTime() {
  // Get the current time and date from the chip.
  Time t = rtc.time();
  // Name the day of the week.
  const String day = dayAsString(t.day);
  // Format the time and date and insert into the temporary buffer.
  char buf[50];
  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
           day.c_str(),
           t.yr, t.mon, t.date,
           t.hr, t.min, t.sec);
  // Print the formatted string to serial so we can see the time.
  Serial.println(buf);
}
}  // namespace
void setup() {
  Serial.begin(9600);
  // Initialize a new chip by turning off write protection and clearing the
  // clock halt flag. These methods needn't always be called. See the DS1302
  // datasheet for details.
  rtc.writeProtect(false);
  rtc.halt(false);
  // Make a new time object to set the date and time.
  // Sunday, September 22, 2013 at 01:38:50.
  Time t(2015, 8, 9, 19, 39, 41, Time::kSunday);
  // Set the time and date on the chip.
  rtc.time(t);
}
// Loop and print the time every second.
void loop() {
  printTime();
  delay(1000);
}

*紅字部份需要自行修改

之後把上面代碼void setup()中以下部份刪除
rtc.writeProtect(false);
  rtc.halt(false);
  // Make a new time object to set the date and time.
  // Sunday, September 22, 2013 at 01:38:50.
  Time t(2015, 8, 9, 19, 39, 41, Time::kSunday);
  // Set the time and date on the chip.
  rtc.time(t);

在Serial Monitor窗口中便可以看到現在時間