Get RTC Time
When you send "RTC0", it replies with T=<time stamp>
<time stamp> is only the sec part of POSIX time_t.
Set RTC Time
When you send "RTC<time stamp>", it replies with T=<time stamp>
Original Protocol
Get Last Data Block Number
When you send "GET0", it replies with N=<Data Block Number>
<Data Block Number>: "N=1" - "N=4294967295" unsigned 32 bit integer.
Of course, it will not get this big.
In the Data Log Code - Arduino Web Logger posting source code, SD_BASE_BLOCK becomes 0.
Get Data Block
When you send "GETn", it replies with
- N = <Data Block Number>
- T = <time stamp>
- D = <data>
<time stamp> is only the sec part of POSIX time_t. Do *1000 since we don't use millisecond part. Of course it will be very difficult to see "T=4294967295" in our lifetime.
<data> is in +dd.ddd format.
- "D=+12.345"
- "D=" no data
- "D=-99.999" termination. That certain Data Block send is completely finished.
Digital Out
When turning on "DOn=ON",
when turning off "DOn=OFF".
n is channel number between 0 to 7. There is no reply.
Digital In
When you send "DI", it replies with "bbbbbbbb".
b represents each input channel, and it becomes either '0' or '1'.
Analog In
When you send "AIn", it replies with "+dd.ddd".
n is channel number between 0 and 7, and "+dd.ddd" is from -10.000 to +10.000.
When you click [GetRTC] button display RTC time.
The incorrect RTC time gets set to current time when [SetRTC] button is clicked.
Now let's look at modified code. ( Look at link below for complete code )
Fixed code from Arduino
#include <SPI.h> #include <Ethernet.h> #include <WebSocket.h> #include <SoftwareSerial.h> #include "Sd2Card.h" #include <minWire.h> // use the modified library code from RTC Preparation posting #include <minRTClib.h> // ... OMIT ... //-------------------------------------DS-1307 RTC_DS1307 rtc; // ... OMIT ... //------------------------------------------------ setup() void setup() { Serial.begin(9600); Wire.begin(); rtc.begin(); // ... OMIT ... //----------------------------------------------- // Create DATA Logging Block //----------------------------------------------- void makeLogBlock(void) { byte i; byte *pB; float fdata; DateTime now; // ... OMIT ... //------------------------- buffer is full if(LogBlockSize >= LOG_BLOCK_SIZE) { pB = sdBuffer; *((uint32_t*)pB) = USED_MARK; //Used Flag pB += 4; now = rtc.now(); *((uint32_t*)pB) = now.unixtime(); //Time-stamp // ... OMIT ... void printTOD(void) { DateTime now = rtc.now(); Serial.print(now.year(), DEC); printProg(DASH_MSG); Serial.print(now.month(), DEC); printProg(DASH_MSG); Serial.print(now.day(), DEC); printProg(SPACE_MSG); Serial.print(now.hour(), DEC); printProg(COMMA_MSG); Serial.print(now.minute(), DEC); printProg(COMMA_MSG); Serial.println(now.second(), DEC); } // ... OMIT ... void onData(WebSocket &socket, char* rxLn, byte rxSz) { uint32_t para; DateTime now; //----------------------------------- // GET //----------------------------------- if((rxLn[0] == 'G') && (rxLn[1] == 'E') && (rxLn[2] == 'T')) { *(rxLn + rxSz) = 0x00; para = atol(rxLn + 3); if(para) upload_DataBlock(para + SD_BASE_BLOCK); else upload_lastBlockNo(); } //----------------------------------- // RTC //----------------------------------- else if((rxLn[0] == 'R') && (rxLn[1] == 'T') && (rxLn[2] == 'C')) { *(rxLn + rxSz) = 0x00; para = atol(rxLn + 3); // set RTC if(para) { rtc.adjust(DateTime(para)); delay(100); } // send current RTC printLn[0] = 'T'; printLn[1] = '='; now = rtc.now(); ltoa((long int)(now.unixtime()), printLn+2, 10); WSsend(printLn, strlen(printLn)); } }
Fixed code from HTML/JS
// ... OMIT ... // receive Time Stamp if(ar[0] == 'T') { timeStamp = ar[1]; // Locale standard is GMT. // In order to view as Korean time, we need to -9 hrs. tod.setTime((timeStamp - (9 * 3600)) * 1000); // ... OMIT ... function getRTC() { clearDspPara(); ws.send('RTC0'); } function setRTC() { clearDspPara(); var t = new Date(); // GMT problem. Ths time +9 hrs. ws.send('RTC' + (t / 1000 + 9 * 3600)); } // ... OMIT ... <button type="button" onclick="getRTC()">Get RTC</button> <button type="button" onclick="setRTC()">Set RTC</button> // ... OMIT ...
Full codes can be found in following links
- WSAdam5.ino:
https://github.com/michelleseo/Arduino_Web/blob/master/WSAdam/WSAdam5/WSAdam5.ino - WSAdam6_5.html:
https://github.com/michelleseo/Arduino_Web/blob/master/WSAdam/WSAdam6_5.html
No comments:
Post a Comment