Đây là code full giao tiếp giữa realTimeClock: ic thời gian thực DS1307 hoăc BQ32000 với board mạch nhúng Arduino Uno R3. Đầy đủ chức năng như hẹn giờ lưu vào eeprom, setting thời gian, ngày giờ. Có nút display để hiển thị thông tin: time, date, hoặc các cảm biến khác nếu muốn sử dụng các chức năng khác.
Trang 1Lập Trình Giao Tiếp Board Mạch Nhúng Arduino Uno R3 Và Module Thời Gian
Thực DS1307 Hay BQ32000Ứng Dụng Vào Điều Khiển Tự Động Bằng Thời Gian Thực
Trang 2//KHAI BAO BIEN TOAN CUC:
//==============================
//bien luu gia tri eeprom:
int addr = 0; //bat dau tai vi tri o nho thu 0:
//mang luu gia tri set bao thuc:
//BIEN Define Cho Button:
const int mode_button = 12;
const int tang_button = 11;
const int giam_button = 10;
const int display_button = 3;
const int bao_thuc = 13; //co the thay doi pin tuy y:
//==============================
//Bien Luu Hieu Chinh Thoi Gian:
int sogio=0, sophut=0;
Trang 3//==============================
//Bien Luu Hieu Chinh Date:
int setday=00, setmonth=00, setyear=00;
//==============================
//BIEN Thoi gian: Set Lai Time, Bien Time:
int SetTime = 0;//Set this variable to 1 to set the time without a button
float timezone = -5;//Give your timezone here for double checking against GMT.byte Set_Second = 0;
byte secondRTC, minuteRTC, hourRTC, dayOfWeekRTC, dayOfMonthRTC,
monthRTC, yearRTC; //Bien cac gia tri Time va Date:
//
===================================================================
==================================================
Trang 5//CHUONG TRINH CHUYEN DOI DE CO THE HIEN THI RA LCD TU DATA
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val){
//CHUONG TRINH HIEN THI RA SO:
//VI DU Hour = 1 thi se hien thi ra 01:
void HienThi_Digits(byte digits){
if(digits < 10) lcd.print('0');
Trang 7//CHUONG TRINH LAY THOI GIAN: GIO, PHUT, GIAY TU MEMORY DS1307:
// Gets the date and time from the ds1307
void getTime(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte
*dayOfMonth, byte *month, byte *year){
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write((byte)0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// A few of these need masks because certain bits are control bits
*second = bcdToDec(Wire.read() & 0x7f);
Trang 8//CHUONG TRINH THAY DOI CAI DAT TIME:
void setTime(byte hour, byte minute, byte second, byte dayofweek, byte
dayofmonth, byte month, byte year){
Trang 9//CHUONG TRINH HIEN THI THOI GIAN: HOUR, MINUTES, SECOND:
void HienThi_Time(int hour, int minute, int second){
Trang 16//Chuong trinh code menu phim nhan cho setting Time:
//1.Thay Doi Hour;
Trang 30getTime(&secondRTC, &minuteRTC, &hourRTC, &dayOfWeekRTC,
&dayOfMonthRTC, &monthRTC, &yearRTC);
Trang 31HienThi_Time(hourRTC, minuteRTC, secondRTC);//HIEN THI TIME: HOUR,
//CHUONG TRINH HEN GIO BAO THUC:
if((sogio == hourRTC) && (sophut == minuteRTC)){
Trang 32===================================================================
==================================================