2015年5月25日 星期一

課程24-時鐘模組實驗

目的:

使用Arduino偵測時鐘模組,讀取時間,每五秒叫一次。

電子元件:

麵包板 x 1
Arduino 主板 x 1
時鐘模組 x 1
蜂鳴器 x 1

電路圖:

下載:
arduino-ds1302-master.zip 解壓縮後得到目錄DS1302,放到Arduino的sketchbook目錄下的libraries目錄裡。
匯入pitches.h,點選"Sketch">”Add File” 選擇pitches.h檔案。

程式碼:

  1. #include <stdio.h>
  2. #include <DS1302.h>
  3. #include "pitches.h"
  4. const int kCePin   = 5;  // Chip Enable
  5. const int kIoPin   = 6;  // Input/Output
  6. const int kSclkPin = 7;  // Serial Clock
  7. const int bbPin = 8;
  8. DS1302 rtc(kCePin, kIoPin, kSclkPin);
  9. int duration=500;
  10. void printTime() {
  11. Time t = rtc.time();
  12.   char buf[50];
  13.   snprintf(buf, sizeof(buf), "%04d-%02d-%02d %02d:%02d:%02d",
  14.           t.yr, t.mon, t.date,
  15.           t.hr, t.min, t.sec);
  16.   if(t.sec % 5==0){
  17.     Serial.println("every 5 sec B");
  18.     tone(bbPin,NOTE_C5,duration);
  19.   }
  20.   Serial.println(buf);
  21. }
  22. void setup(){
  23.  Serial.begin(9600);
  24.  rtc.writeProtect(false);
  25.  rtc.halt(false);
  26.  Time t(2014, 6, 03, 22, 06, 50, Time::kSunday);
  27.  rtc.time(t);
  28. }
  29. void loop(){
  30.  printTime();
  31.  delay(1000);
  32. }

程式說明:

第一行~第三行 匯入 stdio.h、DS1302.h、pitches.h
第四行~第六 宣告kCePin、kIoPin、kSclkPin腳位為Pin5、Pin6、Pin7。
第七行 宣告蜂鳴器bbPin腳位為Pin8。
第八行 宣告一個DS1302 物件並命名為rtc,並加入參數kCePin, kIoPin, kSclkPin。
第九行 宣告蜂鳴器長度(持續時間)。
第十行~第二十一行 為printTime方程式。
第十一行 讀取rtc的時間,並傳給時間變數t。
第十二行 宣告一個字元陣列buf 。
第十三行~第十五行 使用snprintf方法轉換時間的格式,年-月-日 時:分:秒。
第十六行 使用IF判斷式查看是否為五秒的倍數,如果是執行下面程式。
第十七行 在Serial 上面列印every 5 sec B。
第十八行 使用tone方式發出聲音。
第二十行 在Serial 上面列印buf 陣列。
第二十二行~第二十八行 初始化動作。
第二十三行 打開Serial 通訊,並設定頻率為9600。
第二十四行 把rtc的writeProtect設成false。
第二十五行 把rtc的halt設成false。
第二十六行 宣告一個時間t,設定這個時間為2014年6月3日22:06:50 星期天
地二十七行 設定把rtc的時間傳入t。
第二十九行~第三十二行 為主程式
第三十行 呼叫printTime方程式。
第三十一行 延遲1秒。

圖表:
2.gif
1.gif

實驗影片:




3 則留言:

  1. 程式為何會顯示兩個時間?
    1. 正確時間(2014-12-07 19:56:47
    2. 2010-89-03 12:111.13
    如何將錯誤時間去除
    謝謝您!

    回覆刪除
  2. 有辦法使用IF判斷式查看是否為小時或分鐘的倍數嗎?要怎麼改

    回覆刪除

Arduino、Raspberry Pi、System Integration,如有問題或建議,可以互相討論喔~