本實驗為了設計時間功能,並且為了斷電時依然可以保留時間,因為Arduino開發板並沒有內置時鐘(Internal Clock)的功能,所以引入了外部的時間模組。本實驗引入了Arduino Tiny
RTC I2C 時鐘模組,圖 24,可以見到Tiny RTC I2C 時鐘模組的外觀圖,本模組採用DS1307晶片,為了驅動它,請參考附錄中DS1307函式庫(Jeelab, 2013),並在下列Tiny RTC I2C 時鐘模組測試程式(DS1307_test1),讀出時間資料並且列印到Arduino開發板之監控通訊埠。
在寫時鐘程式之前,我們可以參考圖 25之時鐘模組之電路連接圖,先將電路連接完善後,方能進行下列Tiny RTC
I2C 時鐘模組測試程式的攥寫與測試。
| 
DS1307_test1(Tiny RTC I2C 時鐘模組測試程式) | 
| 
// Date and time functions using a DS1307 RTC
  connected via I2C and Wire lib 
#include <Wire.h> 
#include "RTClib.h" 
RTC_DS1307 RTC; 
void setup () { 
 
  Serial.begin(9600); 
 
  Wire.begin(); 
 
  RTC.begin(); 
 
  Serial.print("System Date Time:("); 
 
  Serial.print(__DATE__); 
 
  Serial.print("^"); 
 
  Serial.print(__TIME__); 
 
  Serial.println(")"); 
  if (!
  RTC.isrunning()) { 
   
  Serial.println("RTC is NOT running!"); 
   
  Serial.print("("); 
   
  Serial.print(__DATE__); 
   
  Serial.print("^"); 
   
  Serial.print(__TIME__); 
   
  Serial.println(")"); 
    //
  following line sets the RTC to the date & time this sketch was compiled 
   
  RTC.adjust(DateTime(__DATE__, __TIME__)); 
  } 
} 
void loop () { 
  DateTime
  now = RTC.now(); 
 
  Serial.print(now.year(), DEC); 
 
  Serial.print('/'); 
 
  Serial.print(now.month(), DEC); 
 
  Serial.print('/'); 
 
  Serial.print(now.day(), DEC); 
 
  Serial.print(' '); 
 
  Serial.print(now.hour(), DEC); 
 
  Serial.print(':'); 
 
  Serial.print(now.minute(), DEC); 
 
  Serial.print(':'); 
 
  Serial.print(now.second(), DEC); 
 
  Serial.println(); 
 
  Serial.print(" since midnight 1/1/1970 = "); 
 
  Serial.print(now.unixtime()); 
 
  Serial.print("s = "); 
 
  Serial.print(now.unixtime() / 86400L); 
 
  Serial.println("d"); 
  //
  calculate a date which is 7 days and 30 seconds into the future 
  DateTime
  future (now.unixtime() + 7 * 86400L + 30); 
 
  Serial.print(" now + 7d + 30s: "); 
 
  Serial.print(future.year(), DEC); 
 
  Serial.print('/'); 
 
  Serial.print(future.month(), DEC); 
 
  Serial.print('/'); 
 
  Serial.print(future.day(), DEC); 
 
  Serial.print(' '); 
 
  Serial.print(future.hour(), DEC); 
 
  Serial.print(':'); 
 
  Serial.print(future.minute(), DEC); 
 
  Serial.print(':'); 
 
  Serial.print(future.second(), DEC); 
 
  Serial.println(); 
 
  Serial.println(); 
 
  delay(1000); 
} | 
由上述程式Arduino開發板就可以做到讀取時間,並且透過該時間模組可以達到儲存目前時間並且可以自動達到時鐘的功能(就是Arduoino停電休息時,時間仍然會繼續計算且不失誤),對於工業上的應用,可以說是更加完備,因為企業不營業時,所有設備是關機不用的,但是營業時,所有設備開機時,不需要再次重新設定時間。


 
沒有留言:
張貼留言