DS3231庫
DS3231庫有很多種,如下圖
庫
這里先介紹怎樣將庫導(dǎo)入至arduino中:
第一步
1
第二步集币,找到庫文件奉瘤,選中卡骂,打開
2
第三步国裳,右下角顯示已加入庫表明操作成功!
3
鏈接:https://pan.baidu.com/s/1ihGOOqJDp6em0ur-LBDCAg
提取碼:0oh0
連接里放了以上五個(gè)庫全跨,經(jīng)過一一比較缝左,我選擇了Sodaq_DS3231-master庫文件
在庫文件中可以看到keyword名字的文件夾,打開可以看到使用方法,這里給出他的數(shù)據(jù)類型與函數(shù):
# Datatypes (KEYWORD1)
Sodaq_DS3231 KEYWORD1
DateTime KEYWORD1
# Methods and Functions (KEYWORD2)
second KEYWORD2
minute KEYWORD2
hour KEYWORD2
date KEYWORD2
month KEYWORD2
year KEYWORD2
active KEYWORD2
dayOfWeek KEYWORD2
get KEYWORD2
begin KEYWORD2
setDateTime KEYWORD2
enableInterrupts KEYWORD2
disableInterrupts KEYWORD2
clearINTStatus KEYWORD2
convertTemperature KEYWORD2
getTemperature KEYWORD2
now KEYWORD2
了解了這些就讓我們開始制作吧渺杉!
目標(biāo):利用I2C庫和DS3231庫實(shí)現(xiàn)從串口每隔1S輸出一次年月日星期時(shí)分秒信息蛇数,實(shí)現(xiàn)從串口輸入“YYYYMMDDHHMMSS”格式的信息后,實(shí)現(xiàn)調(diào)表功能是越,寫出包含完整注釋的代碼
先完成第一步:利用I2C庫和DS3231庫實(shí)現(xiàn)從串口每隔1S輸出一次年月日星期時(shí)分秒信息
代碼如下:
#include <Wire.h>
#include "Sodaq_DS3231.h"
char weekDay[7] = { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun"};
//DateTime dt(2011, 11, 10, 15, 18, 0, 5);
void setup ()
{
Serial.begin(57600);
Wire.begin();
rtc.begin();
//rtc.setDateTime(dt);
}
void loop ()
{
DateTime now = rtc.now(); //獲取當(dāng)前時(shí)間
Serial.print(now.year(), DEC);//以十進(jìn)制形式輸出ASCII編碼值
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.date(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.print(" ");
Serial.print(weekDay[now.dayOfWeek()-1]);
Serial.println();
delay(1000);
}
實(shí)驗(yàn)效果:
再完成第二步:可通過串口修改時(shí)間
代碼如下:
#include <Wire.h>
#include "Sodaq_DS3231.h"
DateTime dt;
#define numdata_length 7
String comdata = "";
String weekDay[7]= { "Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun" };
void setup ()
{
Serial.begin(57600);
Wire.begin();
rtc.begin();
}
void loop ()
{
if(Serial.available())
{
int yy, MM, dd, w, hh, mm, ss;
int numdata[numdata_length] = {0};
int flag = 0;
int j = 0;
while (Serial.available() > 0)
{
comdata += char(Serial.read());
delay(2);
flag = 1;
}
if(flag == 1)
{
for(int i = 0; i < comdata.length() ; i++)
{
if(comdata[i] == ',')
{
j++;
}
else
{
numdata[j] = numdata[j] * 10 + (comdata[i] - '0');
}
}
yy = numdata[0];
MM = numdata[1];
dd = numdata[2];
w = numdata[3];
hh = numdata[4];
mm = numdata[5];
ss = numdata[6];
comdata = String("");
flag = 0;
}
DateTime dt(yy, MM, dd, hh, mm, ss, w);
rtc.setDateTime(dt);
}
DateTime now = rtc.now();
Serial.print(now.year());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.date());
Serial.print(' ');
if(now.hour()<10){
Serial.print("0");
Serial.print(now.hour());
Serial.print(':');
}
else{
Serial.print(now.hour());
Serial.print(':');
}
if(now.minute()<10){
Serial.print("0");
Serial.print(now.minute());
Serial.print(':');
}
else{
Serial.print(now.minute());
Serial.print(':');
}
if(now.second()<10){
Serial.print("0");
Serial.print(now.second());
Serial.print(' ');
}
else{
Serial.print(now.second());
Serial.print(' ');
}
Serial.print(weekDay[now.dayOfWeek()-1]);
Serial.println();
delay(1000);
}
實(shí)驗(yàn)效果:
因?yàn)橛玫膍arkdown編輯的耳舅,但是簡書不支持上傳視頻所以將視頻上傳至B站供大家觀看~~
演示視頻點(diǎn)擊此處