こんなかんじ
こんなかんじ
ほとんどをtokoyaさんのこの記事のスケッチから流用して、今のところ後に示すような感じになっています。
やっていること
秋月RTCモジュールから定周期割り込み(60秒周期)をINT0の立下りエッジで貰ったときに、RTCの時刻を読み出してアナログ入力値と一緒にしてシリアルに流す
ことをやっています。ついでに処理しているときにArduinoの基板上のLEDを光らせているのですが、これはシリアル送信時にTXのLEDが光るからなくても良かったかも。
アナログ入力にはCdSが繋がっていてその値を昼夜ログしてグラフ化するため、の はずだったのですが、昨日書いたようにちとやる木がしおれつつあります。
#includeint RTC = 0xA2 >> 1; int pin = 13; int int0 = 2; volatile int flag = LOW; int analogPin = 0; void setup() { Wire.begin(); Serial.begin(9600); InitRTC(); pinMode(pin, OUTPUT); pinMode(int0, INPUT); digitalWrite(int0, HIGH); // pull-up attachInterrupt(0, func, FALLING); } void loop() { if(Serial.available() > 0) { byte recv = Serial.read(); byte param[20]; int count = 0; switch(recv) { case 'R': ReadRTC(); Serial.println(""); break; case 'W': while(count < 14) { if(Serial.available() > 0) param[count++] = Serial.read() & 0x0F; } SetRTCTime(param); break; default: break; } } if (flag) { digitalWrite(pin, HIGH); ReadRTC(); Serial.print(" :: "); Serial.println(analogRead(analogPin)); delay(300); digitalWrite(pin, LOW); flag = LOW; } } void func(void) { flag = HIGH; } void ReadRTC() { Wire.beginTransmission(RTC); Wire.send(0x02); Wire.endTransmission(); Wire.requestFrom(RTC, 7); byte rbuf[7]; for(int i = 0; i < 7; i++) { if(Wire.available()) { rbuf[i] = Wire.receive(); } } Serial.print((rbuf[6] & 0x3F) + 2000); Serial.print("/"); Out(rbuf[5] & 0x1F); Serial.print("/"); Out(rbuf[3] & 0x3F); Serial.print(" "); Out(rbuf[2] & 0x3F); Serial.print(":"); Out(rbuf[1] & 0x7F); Serial.print(":"); Out(rbuf[0] & 0x7F); // Serial.println(""); } void Out(byte d) { if(d < 16) Serial.print("0"); Serial.print(d, HEX); } void SetRTCTime(byte *param) { byte sbuf[7]; sbuf[6] = param[2] << 4 | param[3]; sbuf[5] = param[4] << 4 | param[5] | 0x80; sbuf[4] = 0; sbuf[3] = param[6] << 4 | param[7]; sbuf[2] = param[8] << 4 | param[9]; sbuf[1] = param[10] << 4 | param[11]; sbuf[0] = param[12] << 4 | param[13]; Wire.beginTransmission(RTC); Wire.send(0x02); Wire.send(sbuf, 7); Wire.endTransmission(); } void InitRTC(void) { byte buf[2]; buf[0] = 0x00; buf[1] = 0x11; // Set TIE Wire.beginTransmission(RTC); Wire.send(0x00); Wire.send(buf, 2); Wire.endTransmission(); buf[0] = 0x82; // TD[1:0]=2'b10, 1Hz buf[1] = 60; // count 1Hz 60times Wire.beginTransmission(RTC); Wire.send(0x0E); Wire.send(buf, 2); Wire.endTransmission(); }