結局、時計の設定は諦め、最初に合わせた時間ピッタリに電源を入れることでお茶を濁した(w
あと、温度計測のタイミングはMinuteが10で割り切れる10分間隔ということで設定した。
設定を書き換えるためにいちいちチップを外してArduino DuemilanoveにのせかえてIDEから・・・ってのは面倒だけどま、一度動かし始めたら電池切れるまで動かせばいいから問題ないとしよう。
どうもDateTimeライブラリにもバグがあるらしく12月になると2010年0月となってしまうのでいっそのことUnix Timeのままにしてしまえっ。あとはexcelで処理しよう。
="1969/12/1"+B1/86400
// +------------+
// addr-|>1 6|<-SDA =>Arduino A4
// | =--= |
// GND->|2 = = 5|
// | =--= |
// VDD->|3 C1 4|<-SCL =>Arduino A5
// | -||- |
// +------------+
// LM 73 (T731)
#include <DateTime.h>
#include <DateTimeStrings.h>
#include <Wire.h>
#define LM73_ADDR 0x4c //Pin1 is open 0xb10011000 (7bit address)
#define LED 8
int ret; //for LM73
int data = 0 ; //for LM73time_t prevtime;
void setup(){
Serial.begin(9600);
delay(500);
LM73SETUP();
prevtime = DateTime.makeTime(59,59,12,2,12,2009);
DateTime.sync(prevtime);
}void loop(){
while( prevtime == DateTime.now() ){
delay(100);
}
DateTime.available();
if(DateTime.Second == 0){
if(DateTime.Minute%10 == 0){
printdigitalClock();
digitalWrite(LED, HIGH);
senstemp();
printdata(data);
delay(2000);
digitalWrite(LED, LOW);
}
}
delay(500);}
void LM73SETUP(){
Wire.begin();
Wire.beginTransmission(LM73_ADDR);
Wire.send((byte)0x04); //Control/Status resister 4
Wire.send(0x60); // 14 bits resolution mode
ret=Wire.endTransmission();Wire.beginTransmission(LM73_ADDR);
Wire.send(0x00); // set resister 0
ret=Wire.endTransmission();
delay(100);
}void senstemp(){
Wire.beginTransmission(LM73_ADDR);
ret=Wire.requestFrom(LM73_ADDR, 2);
data = 0;
if (Wire.available()) {
data = Wire.receive();
} else {
Serial.println("sensor not available");
}
if (Wire.available()) {
data = (data << 8 )| Wire.receive() ;
}
ret=Wire.endTransmission();
}void printdata(int data){
int data2;
int data3;
float data_f;
boolean negative=false;if (data < 0 ) {
negative=true;
data = -data;
}data2 = data >> 7;
data_f = (float)(data >> 2 ) / 32;
data_f = data_f - data2 ;data3 = data_f * 100 ;
if (negative) {
Serial.print("-");
}
Serial.print(data2);
Serial.print(".");
Serial.print(data3/10);
Serial.println(data3 % 10);
}
void printdigitalClock(){// Serial.print(DateTime.Year+1900,DEC);
// Serial.print(".");
// Serial.print(DateTime.Month,DEC);
// Serial.print(".");
// Serial.print(DateTime.Day,DEC);
// Serial.print(" ");
Serial.print(DateTime.Hour,DEC);
printDigits(DateTime.Minute);
printDigits(DateTime.Second);
Serial.print(", ");
Serial.print(DateTime.now());
Serial.print(", ");
}void printDigits(byte digits){
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits,DEC);
}