If there is an input change from ADAM, we send it to the browser.
We are going to add or modify the following from WSAdam.ino.
omit...
char rx485Ln[8];
char preAdamPollRcv[2] = { 0, 0 };
int rx485ix;
char bitMap[8];
byte wsConnect;
long lastPollTime;
void XsfAdamPollData(void);
void AdamPoll(void);
void AdamReceiver(void);
void hexToBit(char hex, int p);
omit...
void setup() {
Serial.begin(9600);
Soft485.begin(9600);
pinMode(DE485, OUTPUT);
wsConnect = 0;
lastPollTime = 0;
Ethernet.begin(mac, ip);
omit...
void loop() {
wsServer.listen();
if((millis() - lastPollTime) >= 500)
AdamPoll(); // Poll every 0.5 seconds
AdamReceiver();
}
omit...
void onConnect(WebSocket &socket) {
Serial.println("OnConnect called");
wsConnect++;
}
void onDisconnect(WebSocket &socket) {
Serial.println("onDisconnect called");
wsConnect = 0;
}
omit...
//else if(rxLn[1] == 'I') {
//digitalWrite(DE485, HIGH);
//Soft485.write("$006");
//Soft485.write(0x0D);
//digitalWrite(DE485, LOW);
//}
else if(rxLn[1] == 'I')
XsfAdamPollData();
}
void XsfAdamPollData(void) {
hexToBit(preAdamPollRcv[0], 0);
hexToBit(preAdamPollRcv[1], 4);
wsServer.send(bitMap, 8);
}
void AdamPoll(void) {
digitalWrite(DE485, HIGH);
Soft485.write("$006");
Soft485.write(0x0D);
digitalWrite(DE485, LOW);
lastPollTime = millis();
}
omit...
if(rx485ix == 6) { // !ooii00<cr>
//hexToBit(rx485Ln[2], 0);
//hexToBit(rx485Ln[3], 4);
//wsServer.send(bitMap, 8);
// send only if previous input and current input is different.
if((preAdamPollRcv[0] != rx485Ln[2]) || (preAdamPollRcv[1] != rx485Ln[3])) {
preAdamPollRcv[0] = rx485Ln[2];
preAdamPollRcv[1] = rx485Ln[3];
if(wsConnect)
XsfAdamPollData();
}
}
We are going to modify HTML/JS a little bit.
Use the following source when modifying: https://github.com/michelleseo/Arduino_Web/blob/master/WSAdam/WSAdam1_0.html
omit...
// ws.onopen = function() { status('Connected...'); }
ws.onopen = function() {
status('Connected...');
DI(); // Read Input once when connected.
}
omit...
<!--We do not need Update Button anymore.-->
<!--<button type="button" onclick="DI()">IN Refresh</button>-->
Full codes can be found in following links
- WSAdam.ino:
https://github.com/michelleseo/Arduino_Web/blob/master/WSAdam/WSAdam1/WSAdam1.ino - WSAdam3_0.html:
https://github.com/michelleseo/Arduino_Web/blob/master/WSAdam/WSAdam3_0.html
No comments:
Post a Comment