|
- /*
- Arduino 連接 DS1302
- 代碼來源:quadpoint點org/projects/arduino-ds1302
- 增加了串口調(diào)整時間代碼
- */
- #include <LiquidCrystal.h>
- #include <stdio.h>
- #include <string.h>
- #include <DS1302.h>
- LiquidCrystal lcd(12, 11, 10, 9, 6, 5);
- int i,c;
- /* 接口定義
- CE(DS1302 pin5) -> Arduino D5
- IO(DS1302 pin6) -> Arduino D6
- SCLK(DS1302 pin7) -> Arduino D7
- */
- uint8_t CE_PIN = 2;
- uint8_t SCLK_PIN = 3;
- uint8_t IO_PIN = 4;
- /* 日期變量緩存 */
- char buf[50];
- char buf1[20];
- char day[10];
- /* 串口數(shù)據(jù)緩存 */
- String comdata = "";
- int numdata[7] ={0}, j = 0, mark = 0;
- /* 創(chuàng)建 DS1302 對象 */
- DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);
- void print_time()
- {
- /* 從 DS1302 獲取當(dāng)前時間 */
- Time t = rtc.time();
- /* 將星期從數(shù)字轉(zhuǎn)換為名稱 */
- memset(day, 0, sizeof(day));
- switch (t.day)
- {
- case 1: strcpy(day, "Sunday"),c=6; break;
- case 2: strcpy(day, "Monday"),c=6; break;
- case 3: strcpy(day, "Tuesday"),c=7; break;
- case 4: strcpy(day, "Wednesday"),c=9; break;
- case 5: strcpy(day, "Thursday"),c=8; break;
- case 6: strcpy(day, "Friday"),c=6; break;
- case 7: strcpy(day, "Saturday"),c=8; break;
- }
- /* 將日期代碼格式化湊成buf等待輸出 */
- snprintf(buf, sizeof(buf),"%s%04d-%02d-%02d %02d:%02d %02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
- /* 輸出日期到串口 */
- Serial.println(buf);
- }
- void setup()
- {
- lcd.begin(16, 2);
- // lcd.setCursor(0, 0);
-
- Serial.begin(9600);
- rtc.write_protect(false);
- rtc.halt(false);
- }
- void loop()
- {
- /* 當(dāng)串口有數(shù)據(jù)的時候,將數(shù)據(jù)拼接到變量comdata */
- while (Serial.available() > 0)
- {
- comdata += char(Serial.read());
- delay(2);
- mark = 1;
- }
- /* 以逗號分隔分解comdata的字符串,分解結(jié)果變成轉(zhuǎn)換成數(shù)字到numdata[]數(shù)組 */
- if(mark == 1)
- {
- Serial.print("You inputed : ");
- Serial.println(comdata);
- for(int i = 0; i < comdata.length() ; i++)
- {
- if(comdata[i] == ',' || comdata[i] == 0x10 || comdata[i] == 0x13)
- {
- j++;
- }
- else
- {
- numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
- }
- }
- /* 將轉(zhuǎn)換好的numdata湊成時間格式,寫入DS1302 */
- Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
- rtc.time(t);
- mark = 0;j=0;
- /* 清空 comdata 變量,以便等待下一次輸入 */
- comdata = String("");
- /* 清空 numdata */
- for(int i = 0; i < 7 ; i++) numdata[i]=0;
- }
-
- /* 打印當(dāng)前時間 */
- print_time();
- lcd.setCursor(0, 0); //顯示星期
- lcd.clear();
- for(i=0;i<c;i++)
- {
- lcd.print(buf[i]);
- }
- // delay(100);
-
- lcd.setCursor(0, 1);
- for(i=c;i<c+16;i++) //年 月 日 時 分
- {
- lcd.print(buf[i]);
- }
- lcd.setCursor(13, 0);
- for(i=c+16;i<c+19;i++) // 秒
- {
- lcd.print(buf[i]);
- }
-
-
- delay(1000);
- }
復(fù)制代碼 |
|