Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Example of DS1307RTC Read&Write
var five = new require('johnny-five');
var RTC = 0x68;
var board = new five.Board();
board.on("ready", function() {
board.io.sendI2CConfig(0);
setTime();
setInterval(getTime,1000);
});
function fromBcd(num){
return parseInt((num >> 4 & 0xf).toString() + (num & 0xf).toString());
}
function toBcd(num){
return parseInt(num / 10) << 4 | parseInt(num % 10);
}
function pad(num){
return ("0" + num).slice(-2);
}
function getTime(){
//読み込みを始めるアドレスを書き込む
board.io.sendI2CWriteRequest(RTC,[0x00]);
board.io.sendI2CReadRequest(RTC,8,function(d){
var year = 2000 + fromBcd(d[6]);
var month = fromBcd(d[5]);
var date = fromBcd(d[4]);
var weekday = fromBcd(d[3]);//日曜日(1) - 土曜日(7)
var hours = fromBcd(d[2]);
var minutes = pad(fromBcd(d[1]));
var seconds = pad(fromBcd(d[0]));
console.log(year + "/" + month + "/" + date + " " + hours + ":" + minutes + ":" + seconds);
});
}
function setTime(){
var d = new Date();
/*
書き込むデータを配列で用意する
書き込み開始アドレス、秒、分、時、曜日、日、月、年の順番
曜日は1が日曜日なので+1
月は1が1月なので+1
年は二桁なので-100
*/
var dates = [
0x00
,toBcd(d.getSeconds())
,toBcd(d.getMinutes())
,toBcd(d.getHours())
,toBcd(d.getDay() + 1)
,toBcd(d.getDate())
,toBcd(d.getMonth() + 1)
,toBcd(d.getYear() - 100)
];
board.io.sendI2CWriteRequest(RTC,dates);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.