// +------------+
// |O O|<-SDA =>Arduino A4
// | =--= |
// GND->|O = = O|
// | =--= |
// VDD->|O C1 O|<-SCL =>Arduino A5
// | -||- |
// +------------+
// LM 73 (T731)#include <SoftwareSerial.h>
#include <Wire.h>#define LM73_ADDR 0x4c
int ret;
unsigned long time;void setup()
{
Wire.begin();
Serial.begin(9600);
delay(500);
Wire.beginTransmission(LM73_ADDR);
Wire.send((byte)0x04);
Wire.send(0x60); // 14 bits mode
ret=Wire.endTransmission();Wire.beginTransmission(LM73_ADDR);
Wire.send(0x00);
ret=Wire.endTransmission();
delay(100);
}void loop()
{
time = millis();
int data=0 ;Wire.beginTransmission(LM73_ADDR);
ret=Wire.requestFrom(LM73_ADDR, 2);
data = 0;
if (Wire.available()) {
data = Wire.receive();
} else {
Serial.println("Wire not available.");
}
if (Wire.available()) {
data = (data << 8 )| Wire.receive() ;
}
ret=Wire.endTransmission();
Serial.print(time, DEC);
printdata(data);
delay(59985);}
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 ;
Serial.print (", ");
if (negative) {
Serial.print("-");
}
Serial.print(data2);
Serial.print(".");
Serial.print(data3/10);
Serial.println(data3 % 10);}
millis()という関数がミソ。
delayは実質1分間隔くらいになるように調節。実際は1ミリ秒/分位の誤差が出る→一日2秒弱の誤差
ユニバーサル基板に回路を組んで、FONに載っけてみる。
電源はピンヘッダのところだと3VしかないのでACから直接ひいてきた。
MMC(SD)カードにはこのようにデータが書込まれた。
これを引っこ抜いてMacで見てやる。