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
.png)
.png)
No comments:
Post a Comment