Hello ,, i am working on project to controll water pump and light on/off using the below component
arduino Mega
ethernet Shield
RTC Module
All the project is going good so far,, the main idea of the project is to do the following
- Automatic Control for switching light ON/Off with the capability to interrupt the process and manually force it on or off
- Controlling the on/off state of water pump using webserver and allowing of manual controll of it as well
- all communication are done through Webserver
- Arduino Mega also is sending API to IFTTT on the internet to create records for the events and send emails as well by using APIs and Webhook integration
- SDcard is used the events of light and on/off state of the water pump
- RTC module is to get the time and date
Circuit information
1.relays are connected to external power soruce
2. Only the LDR and RTC module are connected to arduino Mega
the Project works fine however after sometime i am not able to access to the web server to control the pump or the light
at the time of the issue i noticed the below:
- the circuit is not pingable
- doing hard reset resolves the issue and everything works fine again
i am not sure where exactly the issue is if someone can guide ..
this is the code on the arduino :
// things to check SD card initialization if failed power should be diconnected and connected
// there should be motor interrupt so that only the one who operated the motor is able to turn it off ... this is done
// Pull UP resistor for inputs or 10k resistor connected to the groud ... this is done
#include "RTClib.h"
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include "uptime.h"
#include <Dns.h>
RTC_DS1307 rtc;
// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ 60
#define RESPONSE_BUF_SZ 15 // the byte size for HTTP/1.1 200 OK
int trial = 0;
bool true_response = 0;
char HTTP_response[RESPONSE_BUF_SZ]; // buffered HTTP request stored as null terminated string
// MAC address from Ethernet shield sticker under board
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// IPAddress ip(192, 168, 0, 10); // IP address, may need to change depending on network
//IPAddress ip(10, 0, 0, 10);
// use the numeric IP instead of the name for the server:
// IPAddress IFTTT(34, 236, 248, 94); // numeric IP for Google (no DNS)
IPAddress IFTTT ;
// char IFTTT[] = "maker.ifttt.com"; // name address for Google (using DNS)
EthernetServer server(80); // create a server at port 80
EthernetClient client2;
EthernetClient client3;
unsigned long StartTime, StartTimeOwner, StartTimeRenter, EndTime, EndTimeOwner, EndTimeRenter, timetaken, timetakenOwner, timetakenRenter;
unsigned long TotalOwnerTime_Hours, TotalOwnerTime_Minutes, TotalRenterTime_Hours, TotalRenterTime_Minutes, TotalMotorTime_Hours, TotalMotorTime_Minutes;
File webFile; // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = { 0 }; // buffered HTTP request stored as null terminated string
char req_index = 0; // index into HTTP_req buffer
bool LED_state[2] = { 0 }; // stores the states of the LEDs
int sensorReading = 0;
bool LDR = 0;
bool Interrupt = 0;
bool Motor_state = 0;
bool Renter_state = 0;
bool Mega_State = 1;
bool UNO_State = 0; // state off for the arduino UNO
// the following diffrentiators are not required internally as only i need to know who turned off the motor externally
// but in the webpage we are already differentiating who turned the motor on/off
bool ext_Motor_interrupt_Owner = 0; // this is used for differentiating between who turned off the motor
bool ext_Motor_interrupt_Renter = 0; // this is used for differentiating between who turned off the motor
// Mail requirements
int Operator = 0;
int LightOperator = 0;
bool MotorMail = 0;
bool LightMail = 0;
bool lastState_Motor = 0;
bool lastState_Light = 0;
// in switch state
// case 0 light off
// case 1 light ON
// case 2 MotorOwnerON
// case 3 MotorOwnerOFF
// case 4 MotorRenterON
// case 5 MotorRenterOFF
// char buf1[] = "DDD, DD MMM YYYY hh:mm AP";
String Date_Time = "" ;
File ExcelSD;
/* ============= Reset-Function ============== */
void(*resetFunc) (void) = 0; //declare reset function at address 0
void setup()
{
Serial.begin(9600); // for debugging
// disable Ethernet chip
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
pinMode(53, OUTPUT);
delay(2000);
SD.begin(4); // initializing SD card for usage
delay(2000);
// initialize SD card
// Serial.println("Initializing SD card...");
// if (!SD.begin(4)) {
// Serial.println("ERROR - SD card initialization failed!");
// return; // init failed
// }
// Serial.println("SUCCESS - SD card initialized.");
// check for index.htm file
// if (!SD.exists("webpage.htm")) {
// Serial.println("ERROR - Can't find index.htm file!");
// return; // can't find index file
// }
// Serial.println("SUCCESS - Found index.htm file.");
// Inputs from motor Owner or Renter state
pinMode(22, OUTPUT); // Owner to Operate the motor Relay
pinMode(23, OUTPUT); // to turn off the motor ...... Relay
pinMode(24, OUTPUT); // Renter to turn on the motor Relay
pinMode(25, INPUT_PULLUP); // for actual state of motor motor is UP or down 220v Relay
pinMode(26, INPUT_PULLUP); // for Owner as operator if Owner key is closed 220v Relay
pinMode(27, INPUT_PULLUP); // for Renter as operator if Renter key is closed 220v Relay
pinMode(32, OUTPUT); // for resetting the UNO
// pinMode(A0, INPUT);
// pinMode(A0, INPUT_PULLUP);
pinMode(5, OUTPUT); // Normal LDR relay control normal automatic operation Relay
pinMode(6, OUTPUT); // to force the light off at night Relay
pinMode(7, OUTPUT); // used to force light on in the morning Relay
pinMode(30, OUTPUT); // LED Testing
pinMode(31, INPUT); // Arduino UNO Input
digitalWrite(32, HIGH); // for UNO Reset
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(22, HIGH); // Owner to Operate the motor
digitalWrite(23, HIGH); // to turn off the motor
digitalWrite(24, HIGH); // Renter to turn on the motor
// Ethernet.begin(mac, ip, subnet, gateway); // initialize Ethernet device
// delay(2000);
// pinMode(A4, OUTPUT); // sets the digital pin as output
// digitalWrite(A4, LOW);
// delay(1000); //for ethernet chip to reset
// digitalWrite(A4, HIGH);
// delay(1000); //for ethernet chip to reset
// pinMode(A4, INPUT); // sets the digital pin input
// delay(1000); //for ethernet chip to reset
// delay(3000); // trying to put delay before enabling
do {
Ethernet.begin(mac); // keep loop asking for DHCP
delay(3000);
} while (Ethernet.begin(mac) == 0);
delay(3000); // trying to put delay before enabling
//print out the IP address
// Serial.print("IP = ");
// Serial.println(Ethernet.localIP());
DNSClient dns;
dns.begin(Ethernet.dnsServerIP());
dns.getHostByName("maker.ifttt.com",IFTTT);
server.begin(); // start to listen for clients
Operator = 6;
SendMail();
ExcelSD = SD.open("file.csv", FILE_WRITE); // if the file opened okay, write to it:
if (ExcelSD) {
String MegaStart = "MegaStart, MegaStart, MegaStart, MegaStart, MegaStart, MegaStart, MegaStart, MegaStart, MegaStart" ;
String WriteSD = MegaStart ;
ExcelSD.println(WriteSD);
// close the file:
ExcelSD.close();
}
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
Serial.println("Getting time");
DateTime now = rtc.now() ;
Serial.println("We Got time");
}
void loop()
{
// UNO_State = digitalRead(31);
LDR_Reading();
EthernetClient client = server.available(); // try to get client
if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client
// limit the size of the stored received HTTP request
// buffer first part of HTTP request in HTTP_req array (string)
// leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
if (req_index < (REQ_BUF_SZ - 1)) {
HTTP_req[req_index] = c; // save HTTP request character
req_index++;
}
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
// remainder of header follows below, depending on if
// web page or XML page is requested
// Ajax request - send XML file
if (StrContains(HTTP_req, "ajax")) {
// send rest of HTTP header
client.println("Content-Type: text/xml");
client.println("Connection: close");
client.println();
SetLEDs();
// send XML file containing input states
XML_response(client);
}
else if (StrContains(HTTP_req, "motor.jpg")) {
webFile = SD.open("motor.jpg");
cache_files(client);
if (webFile) {
while (webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
}
else if (StrContains(HTTP_req, "lamp.jpg")) {
webFile = SD.open("lamp.jpg");
cache_files(client);
if (webFile) {
while (webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
}
else if (StrContains(HTTP_req, "mega.jpg")) {
webFile = SD.open("mega.jpg");
cache_files(client);
if (webFile) {
while (webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
}
else { // web page request
// send rest of HTTP header
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
// send web page
webFile = SD.open("webpage4.htm");
if (webFile) {
while (webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
}
// display received HTTP request on serial port
// Serial.print(HTTP_req);
// reset buffer index and all buffer elements to 0
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
client.flush();
delay(10);
client.stop(); // close the connection
} // end if (client)
// check the Input values
LDR_State_Checker();
MotorInputState();
Ethernet.maintain();
}
void LDR_Reading(void)
{
// pinMode(A0, INPUT);
sensorReading = analogRead(A0);
Serial.println(sensorReading);
// delay(1000);
}
void LDR_State_Checker(void)
{
if ((sensorReading < 90) && (Interrupt == 0)) {
LED_state[0] = 1;
LDR = 1;
LightMail = 1; // used to trigger mail about light status
digitalWrite(5, LOW); // Makes the LED glow in Dark
digitalWrite(30, HIGH); // for testing the arduino using LEDs
if (LightMail != lastState_Light)
{
// Serial.println();
// Serial.println(" triggered 1 Automatic Conrol ");
LightOperator = 0;
Light();
lastState_Light = LightMail;
}
// delay(1000);
} else if ((sensorReading > 350) && (Interrupt == 0)) {
LDR = 0;
LightMail = 0;
LED_state[0] = 0;
digitalWrite(5, HIGH); //Turns the LED OFF in Light.
digitalWrite(30, LOW); // for testing the arduino using LEDs
if (LightMail != lastState_Light)
{
// Serial.println();
// Serial.println(" triggered 2 Automatic Conrol ");
LightOperator = 1;
Light();
lastState_Light = LightMail;
}
// delay(1000);
}
}
void MotorInputState(void)
{
bool MotorActualState = digitalRead(25);
bool MotorInputReadingOwner = digitalRead(26);
bool MotorInputReadingRenter = digitalRead(27);
if (MotorInputReadingOwner == 0 && MotorActualState == 0)
{
MotorMail = 1;
LED_state[1] = 1;
Motor_state = 1;
if (MotorMail != lastState_Motor)
{
StartTimeOwner = millis();
ext_Motor_interrupt_Owner = 1;
Operator = 2;
SendMail();
lastState_Motor = MotorMail;
}
}
else if (MotorActualState == 1 && (ext_Motor_interrupt_Owner == 1 || Motor_state == 1)) // 1 in ext_motor_interrupt doesnot mean 5 volt from outside it is internal variable
{
ext_Motor_interrupt_Owner = 0;
MotorMail = 0;
LED_state[1] = 0;
Motor_state = 0;
if (MotorMail != lastState_Motor)
{
Operator = 3;
SendMail();
lastState_Motor = MotorMail;
}
}
else if (MotorInputReadingRenter == 0 && MotorActualState == 0)
{
ext_Motor_interrupt_Renter = 1;
MotorMail = 1;
Renter_state = 1;
if (MotorMail != lastState_Motor)
{
StartTimeRenter = millis();
Operator = 4;
SendMail();
lastState_Motor = MotorMail;
}
}
else if (MotorActualState == 1 && (ext_Motor_interrupt_Renter == 1 || Renter_state == 1))
{
ext_Motor_interrupt_Renter = 0;
MotorMail = 0;
Renter_state = 0;
if (MotorMail != lastState_Motor)
{
Operator = 5;
SendMail();
lastState_Motor = MotorMail;
}
}
}
// checks if received HTTP request is switching on/off LEDs
// also saves the state of the LEDs
void SetLEDs(void)
{
// Serial.println();
// Serial.println("LDR:");
// Serial.println(LDR);
// LED 1 (pin 6)
if (StrContains(HTTP_req, "LED1=1") && (LDR == 1)) {
LED_state[0] = 1; // save LED state
digitalWrite(6, HIGH); // will make LDR continue working at night
Interrupt = 0;
LightMail = 1;
if (LightMail != lastState_Light)
{
// Serial.println();
// Serial.println(" triggered 1 case of LDR web control ");
LightOperator = 0;
Light();
lastState_Light = LightMail;
}
}
else if (StrContains(HTTP_req, "LED1=1") && LDR == 0) {
LED_state[0] = 1; // save LED state
// digitalWrite(8, LOW); // will force light to turn up at daylight by admin
digitalWrite(7, LOW); // will force light to turn up at daylight by admin
Interrupt = 1;
LightMail = 1;
StartTime = millis();
if (LightMail != lastState_Light)
{
// Serial.println();
// Serial.println(" triggered 2 case of LDR web control ");
LightOperator = 0;
Light();
lastState_Light = LightMail;
}
}
else if (StrContains(HTTP_req, "LED1=0") && LDR == 1) {
LED_state[0] = 0; // save LED state
digitalWrite(6, LOW); // will turn Off the light at night by admin
Interrupt = 1;
LightMail = 0;
// EndTime = millis();
if (LightMail != lastState_Light)
{
// Serial.println();
// Serial.println(" triggered 3 case of LDR web control ");
LightOperator = 1;
Light();
lastState_Light = LightMail;
}
}
else if (StrContains(HTTP_req, "LED1=0") && LDR == 0) {
LED_state[0] = 0; // save LED state
// digitalWrite(8, HIGH);
digitalWrite(7, HIGH);
Interrupt = 0;
LightMail = 0;
// EndTime = millis();
if (LightMail != lastState_Light)
{
// Serial.println();
// Serial.println(" triggered 4 case of LDR web control ");
LightOperator = 1;
Light();
lastState_Light = LightMail;
}
}
// Motor Owner (pin 7)
else if (StrContains(HTTP_req, "Owner=1") && Motor_state == 0) { // here to control web page to power on motor by contacting relay 3 sec then disconnect it
LED_state[1] = 1; // save LED state for revealing this motor state on the webpage
Motor_state = 1; // bec the next connection need the actual state of the motor in the program
MotorMail = 1;
ext_Motor_interrupt_Owner = 1;
StartTimeOwner = millis();
digitalWrite(22, LOW);
delay(3000);
digitalWrite(22, HIGH);
if (MotorMail != lastState_Motor)
{
Operator = 2;
SendMail();
lastState_Motor = MotorMail;
}
}
else if (StrContains(HTTP_req, "Owner=1") && Motor_state == 1) {
// LED_state[1] = 1; // save LED state
Motor_state = 1;
}
else if (StrContains(HTTP_req, "Owner=0") && Motor_state == 1) {
LED_state[1] = 0; // save LED state for revealing this motor state on the webpage
Motor_state = 0; // bec the next connection need the actual state of the motor in the program
MotorMail = 0;
ext_Motor_interrupt_Owner = 0;
digitalWrite(23, LOW);
delay(3000);
digitalWrite(23, HIGH);
if (MotorMail != lastState_Motor)
{
Operator = 3;
SendMail();
lastState_Motor = MotorMail;
}
}
else if (StrContains(HTTP_req, "Owner=0") && Motor_state == 0) {
// LED_state[1] = 0; // save LED state
Motor_state = 0;
}
// Motor Renter (pin ----)
else if (StrContains(HTTP_req, "Renter=1") && Renter_state == 0) { // here to control web page to power on motor by contacting relay 3 sec then disconnect it
Renter_state = 1; // save LED state for revealing this motor state on the webpage
MotorMail = 1;
ext_Motor_interrupt_Renter = 1;
StartTimeRenter = millis();
digitalWrite(24, LOW);
delay(3000);
digitalWrite(24, HIGH);
if (MotorMail != lastState_Motor)
{
Operator = 4;
SendMail();
lastState_Motor = MotorMail;
}
}
else if (StrContains(HTTP_req, "Renter=1") && Renter_state == 1) {
Renter_state = 1; // save LED state
}
else if (StrContains(HTTP_req, "Renter=0") && Renter_state == 1) {
Renter_state = 0; // save LED state for revealing this motor state on the webpage
MotorMail = 0;
ext_Motor_interrupt_Renter = 0;
if (MotorMail != lastState_Motor)
{
Operator = 5;
SendMail();
lastState_Motor = MotorMail;
}
digitalWrite(23, LOW);
delay(3000);
digitalWrite(23, HIGH);
}
else if (StrContains(HTTP_req, "Renter=0") && Renter_state == 0) {
Renter_state = 0; // save LED state
}
else if (StrContains(HTTP_req, "RestartMega")) {
resetFunc(); // call reset
}
else if (StrContains(HTTP_req, "RestartUNO")) {
digitalWrite(32, LOW);
delay(2000);
digitalWrite(32, HIGH);
}
}
// send the XML file with analog values, switch status
// and LED status
void XML_response(EthernetClient cl)
{
// Serial.println("LED_state[1]");
// Serial.println(LED_state[1]);
cl.print("<?xml version=\"1.0\" ?>");
cl.print("<inputs>");
// checkbox LED states
// LED1
cl.print("<LED>");
if (LED_state[0] == 1) {
cl.print("checked");
}
else if (LED_state[0] == 0) {
cl.print("unchecked");
}
cl.println("</LED> ");
// button LED states
// LED3
cl.print("<Motor>");
if (LED_state[1] == 1) {
cl.print("on");
}
else if (LED_state[1] == 0) {
cl.print("off");
}
cl.println("</Motor>");
cl.print("<Renter>");
if (Renter_state == 1) {
cl.print("on");
}
else if (Renter_state == 0) {
cl.print("off");
}
cl.println("</Renter>");
cl.print("<UNO_State1>");
if (UNO_State == 1) {
cl.print("on");
}
else if (UNO_State == 0) {
cl.print("off");
}
cl.println("</UNO_State1>");
cl.print("<Mega_State1>");
if (Mega_State == 1) {
cl.print("on");
}
else if (Mega_State == 0) {
cl.print("off");
}
cl.println("</Mega_State1>");
cl.print("</inputs>");
}
// sets every element of str to 0 (clears array)
void StrClear(char* str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}
// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char* str, char* sfind)
{
char found = 0;
char index = 0;
char len;
len = strlen(str);
if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}
void cache_files(EthernetClient cf)
{
cf.println("Cache-Control: public,max-age=31536000,immutable");
cf.println("Content-Type: image/jpeg");
cf.println("Connection: close");
cf.println();
}
void SendMail()
{
uptime::calculateUptime();
int h, m, s, ms;
int TMT_m, TMT_h, TMT_over, TOT_m, TOT_h, TOT_over, TRT_m, TRT_h, TRT_over;
unsigned long over;
unsigned long day = (uptime::getDays());
unsigned long hour = (uptime::getHours());
unsigned long minute = (uptime::getMinutes());
String days = String(day);
String hours = String(hour);
String minutes = String(minute);
switch (Operator) {
case 2:
{
String url = "GET /trigger/Farm/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Owner%20:%20Motor%20ON%20&value2=%22%20Arduino_Up_Time%20:%20";
String UpTime = days + "%20days,%20" + hours + "%20hours,%20" + minutes + "%20minutes%20";
String end_of_request = "%20%22%20 HTTP/1.1";
String GetRequest = url + UpTime + end_of_request;
String url_excel = "GET /trigger/MotorTime/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Owner%20:%20Motor%20ON%20";
String end_of_request_excel = "%22%20 HTTP/1.1";
String GetRequest_excel = url_excel + end_of_request_excel;
client3.stop();
if (client3.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client3.println(GetRequest);
client3.println("Host: maker.ifttt.com");
client3.println("Connection: close");
client3.println();
delay(500);
if (client3.available())
{
client3.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
// Serial.println("ON_Owner_EXCEL_true_response: ");
// Serial.print(true_response);
// Serial.println();
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client3.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client3.stop();
}
delay(50);
client3.stop();
if (client3.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client3.println(GetRequest_excel);
client3.println("Host: maker.ifttt.com");
client3.println("Connection: close");
client3.println();
delay(500);
if (client3.available())
{
client3.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
}
else {
true_response = 0;
trial++;
}
}
// Serial.println("ON_Owner_Mail_true_response: ");
// Serial.print(true_response);
// Serial.println();
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client3.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client3.stop();
}
DateTimeFn();
ExcelSD = SD.open("file.csv", FILE_WRITE); // if the file opened okay, write to it:
if (ExcelSD) {
String WriteSD = Date_Time + ", " + "Owner" + ", " + "Motor ON " ;
ExcelSD.println(WriteSD);
// close the file:
ExcelSD.close();
}
break;
}
case 3:
{
// Serial.println();
// Serial.println("Matched case 3 of Motor Owner");
// Serial.print("Motor Owner OFF mail.... ");
// SerialDebug1();
EndTimeOwner = millis();
timetakenOwner = EndTimeOwner - StartTimeOwner;
//TotalOwnerTime = TotalOwnerTime + timetakenOwner ;
//TotalMotorTime = TotalOwnerTime + TotalRenterTime ;
h = int(timetakenOwner / 3600000);
over = timetakenOwner % 3600000;
m = int(over / 60000);
over = over % 60000;
s = int(over / 1000);
ms = over % 1000;
// TOT_h = int(timetakenOwner/3600000);
TOT_h = h;
TotalOwnerTime_Hours = TotalOwnerTime_Hours + TOT_h;
TOT_over = timetakenOwner % 3600000;
// TOT_m= int(TOT_over/60000);
TOT_m = m;
TotalOwnerTime_Minutes = TotalOwnerTime_Minutes + TOT_m;
while (TotalOwnerTime_Minutes >= 60) // migirating min to hours
{
TotalOwnerTime_Hours++; // incrementing hrs vlaue by 1
TotalOwnerTime_Minutes = TotalOwnerTime_Minutes - 60;
}
TotalMotorTime_Hours = TotalMotorTime_Hours + TOT_h; // for calculating the total motor time by hours
TotalMotorTime_Minutes = TotalMotorTime_Minutes + TOT_m; // for calculating the total motor time by mins
while (TotalMotorTime_Minutes >= 60) // migirating min to hours
{
TotalMotorTime_Hours++; // incrementing vlaue by 1
TotalMotorTime_Minutes = TotalMotorTime_Minutes - 60;
}
// Serial.println();
// Serial.println();
// Serial.print("Raw timetakenOwner: ");
// Serial.println(timetakenOwner);
// Serial.print("timetaken : ");
// Serial.print(h,0);
// Serial.print("h ");
// Serial.print(m,0);
// Serial.print("m ");
// Serial.print(s,0);
// Serial.print("s ");
// Serial.print(ms,0);
// Serial.println("ms");
// Serial.println();
String hh = String(h);
String mm = String(m);
String TOT_h0 = String(TotalOwnerTime_Hours);
String TOT_m0 = String(TotalOwnerTime_Minutes);
String TMT_h0 = String(TotalMotorTime_Hours);
String TMT_m0 = String(TotalMotorTime_Minutes);
String Time = hh + "h" + "%20" + mm + "m" + "%20";
String TotalOwnerHours = "Total%20Owner%20hours%20:" + TOT_h0 + "h" + "%20" + TOT_m0 + "m" + "%20";
String TotalTime = "%20||%20Total%20Motor%20hours%20:" + TMT_h0 + "h" + "%20" + TMT_m0 + "m" + "%20||%20";
String url = "GET /trigger/Farm/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Owner%20:%20MoTor%20OFF%20%22%20||%20&value2=%22%20Owner-Motor-Time%20:%20";
String UpTime = "%20Arduino_Up_Time%20:%20" + days + "%20days,%20" + hours + "%20hours,%20" + minutes + "%20minutes%20"; // arduino UpTime
String API = url + Time + TotalOwnerHours + TotalTime + UpTime + "%20%22%20 HTTP/1.1";
String url_excel = "GET /trigger/MotorTime/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Owner_MoTor%20:%20OFF%20%22%20&value2=";
String value3 = "%20&value3=";
String API_excel = url_excel + Time + value3 + TotalOwnerHours + TotalTime + UpTime + "%20%22%20 HTTP/1.1";
client3.stop();
if (client3.connect(IFTTT, 80)) {
// Serial.print("connected to ");
// Serial.println(client3.remoteIP());
// Make a HTTP request:
while(true_response == 0 && trial <= 10)
{
client3.println(API);
client3.println("Host: maker.ifttt.com");
client3.println("Connection: close");
client3.println();
delay(500);
if (client3.available())
{
client3.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
// Serial.println("Off_Owner_Mail_true_response: ");
// Serial.print(true_response);
// Serial.println();
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client3.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client3.stop();
}
delay(50);
client3.stop();
if (client3.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client3.println(API_excel);
client3.println("Host: maker.ifttt.com");
client3.println("Connection: close");
client3.println();
delay(500);
if (client3.available())
{
client3.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
// Serial.println("Off_Owner_Excel_true_response: ");
// Serial.print(true_response);
// Serial.println();
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client3.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client3.stop();
}
DateTimeFn();
ExcelSD = SD.open("file.csv", FILE_WRITE); // if the file opened okay, write to it:
if (ExcelSD) {
String WriteSD = Date_Time + ", " + "Owner" + ", " + "Motor OFF" + ", " + hh + "," + mm + ", " + TOT_h0 + " " + TOT_m0 + ", " + TMT_h0 + "h" + " " + TMT_m0 + "m" ;
ExcelSD.println(WriteSD);
// close the file:
ExcelSD.close();
}
break;
}
case 4:
{
String UpTime = days + "%20days,%20" + hours + "%20hours,%20" + minutes + "%20minutes%20";
String end_of_request = "%20%22%20 HTTP/1.1";
// String url = "GET /trigger/Farm/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Renter%20:%20Motor%20ON%20||%20&value2=%22%20Arduino_Up_Time%20:%20";
// String url = "GET /trigger/Farm/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Renter%20:%20Motor%20ON%20"; -- 1 st try
String url = "GET /trigger/Farm/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Renter%20:%20Motor%20ON%20&value2=%22%20Arduino_Up_Time%20:%20"; // 2 nd try
String GetRequest = url + UpTime + end_of_request;
String url_excel = "GET /trigger/MotorTime/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Renter%20:%20Motor%20ON%20";
String end_of_request_excel = "%20%22%20 HTTP/1.1";
String GetRequest_excel = url_excel + end_of_request_excel;
client3.stop();
if (client3.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client3.println(GetRequest);
client3.println("Host: maker.ifttt.com");
client3.println("Connection: close");
client3.println();
delay(500);
if (client3.available())
{
client3.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
}
else {
true_response = 0;
trial++;
}
}
// Serial.println("ON_Motor_Mail_true_response: ");
// Serial.print(true_response);
// Serial.println();
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client3.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client3.stop();
}
delay(50);
client3.stop();
if (client3.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client3.println(GetRequest_excel);
client3.println("Host: maker.ifttt.com");
client3.println("Connection: close");
client3.println();
delay(500);
if (client3.available())
{
client3.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
// Serial.println("Off_Motor_Excel_true_response: ");
// Serial.print(true_response);
// Serial.println();
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client3.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client3.stop();
}
DateTimeFn();
ExcelSD = SD.open("file.csv", FILE_WRITE); // if the file opened okay, write to it:
if (ExcelSD) {
String WriteSD = Date_Time + ", " + "Renter" + ", " + "Motor ON" ;
ExcelSD.println(WriteSD);
// close the file:
ExcelSD.close();
}
break;
}
case 5:
{
// Serial.println();
// Serial.println("Matched case 5 of Motor Renter");
// Serial.print("Motor Renter OFF mail.... ");
// SerialDebug1();
EndTimeRenter = millis();
timetakenRenter = EndTimeRenter - StartTimeRenter;
h = int(timetakenRenter / 3600000);
over = timetakenRenter % 3600000;
m = int(over / 60000);
over = over % 60000;
s = int(over / 1000);
ms = over % 1000;
// TRT_h = int(timetakenRenter/3600000);
TRT_h = h;
TotalRenterTime_Hours = TotalRenterTime_Hours + TRT_h;
TRT_over = timetakenRenter % 3600000;
// TRT_m= int(TRT_over/60000);
TRT_m = m;
TotalRenterTime_Minutes = TotalRenterTime_Minutes + TRT_m;
while (TotalRenterTime_Minutes >= 60) // migirating min to hours
{
TotalRenterTime_Hours++; // incrementing hrs vlaue by 1
TotalRenterTime_Minutes = TotalRenterTime_Minutes - 60;
}
TotalMotorTime_Hours = TotalMotorTime_Hours + TRT_h; // for calculating the total motor time by hours
TotalMotorTime_Minutes = TotalMotorTime_Minutes + TRT_m; // for calculating the total motor time by mins
while (TotalMotorTime_Minutes >= 60) // migirating min to hours
{
TotalMotorTime_Hours++; // incrementing vlaue by 1
TotalMotorTime_Minutes = TotalMotorTime_Minutes - 60;
}
// Serial.println();
// Serial.println();
// Serial.print("Raw timetakenRenter: ");
// Serial.println(timetakenRenter);
// Serial.print("timetaken : ");
// Serial.print(h,0);
// Serial.print("h ");
// Serial.print(m,0);
// Serial.print("m ");
// Serial.print(s,0);
// Serial.print("s ");
// Serial.print(ms,0);
// Serial.println("ms");
// Serial.println();
String hh = String(h);
String mm = String(m);
String TRT_h0 = String(TotalRenterTime_Hours);
String TRT_m0 = String(TotalRenterTime_Minutes);
String TMT_h0 = String(TotalMotorTime_Hours);
String TMT_m0 = String(TotalMotorTime_Minutes);
String Time = hh + "h" + "%20" + mm + "m" + "%20";
String TotalRenterHours = "Total%20Renter%20hours%20:" + TRT_h0 + "h" + "%20" + TRT_m0 + "m" + "%20";
String TotalTime = "Total%20Motor%20hours%20:" + TMT_h0 + "h" + "%20" + TMT_m0 + "m" + "%20";
String url = "GET /trigger/Farm/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Renter%20:%20MoTor%20OFF%20%22%20||%20&value2=%22%20Renter-Motor-Time%20:%20";
String UpTime = "%20||%20Arduino_Up_Time%20:%20" + days + "%20days,%20" + hours + "%20hours,%20" + minutes + "%20minutes%20";
String API = url + Time + TotalRenterHours + TotalTime + UpTime + "%20%22%20 HTTP/1.1";
String url_excel = "GET /trigger/MotorTime/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Renter%20:%20MoTor%20OFF%20%22%20&value2=";
String value3 = "%20&value3=";
String API_excel = url_excel + Time + value3 + TotalRenterHours + TotalTime + UpTime + "%20%22%20 HTTP/1.1";
client3.stop();
if (client3.connect(IFTTT, 80)) {
// Serial.print("connected to ");
// Serial.println(client3.remoteIP());
// Make a HTTP request:
// Serial.println();
// Serial.println("Renter TIME in GET");
// Serial.println(Time);
while(true_response == 0 && trial <= 10)
{
client3.println(API);
client3.println("Host: maker.ifttt.com");
client3.println("Connection: close");
client3.println();
delay(500);
if (client3.available())
{
client3.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
}
else {
true_response = 0;
trial++;
}
}
// Serial.println("SendingMotortMail_true_response: ");
// Serial.print(true_response);
// Serial.println();
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client3.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client3.stop();
}
delay(50);
client3.stop();
if (client3.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client3.println(API_excel);
client3.println("Host: maker.ifttt.com");
client3.println("Connection: close");
client3.println();
delay(500);
if (client3.available())
{
client3.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
// Serial.println("OFF_MotorExcel_true_response: ");
// Serial.print(true_response);
// Serial.println();
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client3.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client3.stop();
}
DateTimeFn();
ExcelSD = SD.open("file.csv", FILE_WRITE); // if the file opened okay, write to it:
if (ExcelSD) {
String WriteSD = Date_Time + ", " + "Renter" + ", " + "Motor OFF" + ", " + hh + ", " + mm + ", " + TRT_h0 + " " + TRT_m0 + ", " + TMT_h0 + "h" + " " + TMT_m0 + "m" ;
ExcelSD.println(WriteSD);
// close the file:
ExcelSD.close();
}
break;
}
case 6:
{ client3.stop();
if (client3.connect(IFTTT, 80)) {
String Mega = "GET /trigger/MotorTime/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Arduino_Mega%20:%20%22%20&value2=START";
String MegaStart = Mega + "%20%22%20 HTTP/1.1";
while(true_response == 0 && trial <= 10)
{
client3.println(MegaStart);
client3.println("Host: maker.ifttt.com");
client3.println("Connection: close");
client3.println();
delay(500);
if (client3.available())
{
client3.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
// Serial.println("MegaStart_true_response: ");
// Serial.print(true_response);
// Serial.println();
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client3.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client3.stop();
}
break;
}
}
}
// void SerialDebug1()
// {
// Serial.println();
// Serial.print("connecting to ");
// Serial.print();
// Serial.println("...");
// }
void Light()
{
uptime::calculateUptime();
int h, m, s, ms;
unsigned long over;
unsigned long day = (uptime::getDays());
unsigned long hour = (uptime::getHours());
unsigned long minute = (uptime::getMinutes());
String days = String(day);
String hours = String(hour);
String minutes = String(minute);
switch (LightOperator) {
case 0:
{
String url = "GET /trigger/Farm/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Light%20:%20ON%20&value2=%22%20Arduino_Up_Time%20:%20";
String UpTime = days + "%20days,%20" + hours + "%20hours,%20" + minutes + "%20minutes%20";
String end_of_request = "%22%20 HTTP/1.1";
String GetRequest = url + UpTime + end_of_request;
String url_light = "GET /trigger/light/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Light%20:%20ON%20&value3=%22%20Arduino_Up_Time%20:%20";
String end_of_request_light = "%22%20 HTTP/1.1";
String GetRequest_light = url_light + UpTime + end_of_request_light;
client2.stop();
if (client2.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client2.println(GetRequest);
client2.println("Host: maker.ifttt.com");
client2.println("Connection: close");
client2.println();
delay(500);
if (client2.available())
{
client2.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client2.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client2.stop();
}
delay(50);
client2.stop();
if (client2.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client2.println(GetRequest_light);
client2.println("Host: maker.ifttt.com");
client2.println("Connection: close");
client2.println();
delay(500);
if (client2.available())
{
client2.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client2.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client2.stop();
}
DateTimeFn();
ExcelSD = SD.open("light.csv", FILE_WRITE); // if the file opened okay, write to it:
if (ExcelSD) {
String WriteSD = Date_Time + ", " + "Light-ON" ;
ExcelSD.println(WriteSD);
// close the file:
ExcelSD.close();
}
break;
}
case 1:
{
// Serial.println();
// Serial.println("Matched case 1 of light");
// Serial.print("Light mail.... ");
// SerialDebug1();
EndTime = millis();
timetaken = EndTime - StartTime;
h = int(timetaken / 3600000);
over = timetaken % 3600000;
m = int(over / 60000);
over = over % 60000;
s = int(over / 1000);
ms = over % 1000;
String hh = String(h);
String mm = String(m);
String Time = hh + "h" + "%20" + mm + "m" + "%20";
String url = "GET /trigger/Farm/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Light%20:%20OFF%20%22%20||%20&value2=%22%20Light-Work-Time%20:%20";
String UpTime = "%20||%20Andriod_Up_Time%20:%20" + days + "%20days,%20" + hours + "%20hours,%20" + minutes + "%20minutes%20";
String API = url + Time + UpTime + "%20%22%20 HTTP/1.1";
String url_light = "GET /trigger/light/with/key/kqotITniP1OKyJb3SHv44Ebj6XWr3_lILvz75wjMBIg?value1=%22%20Light%20:%20OFF%20%22%20&value2=%22%20Light-Work-Time%20:%20";
String API_light = url_light + Time + "%20%22%20 HTTP/1.1";
client2.stop();
if (client2.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client2.println(API);
client2.println("Host: maker.ifttt.com");
client2.println("Connection: close");
client2.println();
delay(500);
if (client2.available())
{
client2.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client2.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client2.stop();
}
delay(50);
client2.stop();
if (client2.connect(IFTTT, 80)) {
while(true_response == 0 && trial <= 10)
{
client2.println(API_light);
client2.println("Host: maker.ifttt.com");
client2.println("Connection: close");
client2.println();
delay(500);
if (client2.available())
{
client2.read(HTTP_response, 15);
if (StrContains(HTTP_response, "200 OK"))
{
true_response = 1;
} else {
true_response = 0;
trial++;
}
}
}
trial = 0;
true_response = 0;
StrClear(HTTP_response, RESPONSE_BUF_SZ);
} else if (!client2.connected()) {
// Serial.println();
// Serial.println("disconnecting.");
client2.stop();
}
DateTimeFn();
ExcelSD = SD.open("light.csv", FILE_WRITE); // if the file opened okay, write to it:
if (ExcelSD) {
String WriteSD = Date_Time + ", " + "Light-OFF" + ", " + hh + ", " + mm ;
ExcelSD.println(WriteSD);
// close the file:
ExcelSD.close();
}
break;
}
}
}
void DateTimeFn()
{ char buf1[] = "DDD, DD MMM YYYY hh:mm AP";
DateTime now = rtc.now() ;
Date_Time = now.toString(buf1) ;
// Serial.print("DateTimeFn Done");
// Serial.print(Date_Time);
}
the code for the webpage
<!DOCTYPE html>
<html>
<head>
<title> Motor and Light Control </title>
<script>
strLED1 = "";
strLED2 = "";
Renter = "";
UNO_State = "";
Mega_State = "";
var LED2_state = 0;
var Renter_state = 0;
function GetArduinoIO() {
// nocache = "&nocache=" + Math.random() * 1000000;
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
if (this.responseXML != null) {
// XML file received - contains analog values, switch values and LED states
var count;
// LED 1
if (this.responseXML.getElementsByTagName('LED')[0].childNodes[0].nodeValue === "checked") {
// document.LED_form.LED1.checked = true;
document.getElementById("light").checked = true;
// document.getElementById("check_LEDs").innerHTML = "Light Status ON";
}
else {
// document.LED_form.LED1.checked = false;
document.getElementById("light").checked = false;
// document.getElementById("check_LEDs").innerHTML = "Light Status OFF";
}
// LED 2
if (this.responseXML.getElementsByTagName('Motor')[0].childNodes[0].nodeValue === "on") {
// document.getElementById("Owner").innerHTML = "Owner ON";
document.getElementById("Owner").checked = true;
LED2_state = 1;
}
else {
document.getElementById("Owner").innerHTML = "Owner OFF";
document.getElementById("Owner").checked = false;
LED2_state = 0;
}
if (this.responseXML.getElementsByTagName('Renter')[0].childNodes[0].nodeValue === "on") {
// document.getElementById("Renter").innerHTML = "Renter ON";
document.getElementById("Renter").checked = true;
Renter_state = 1;
}
else {
// document.getElementById("Renter").innerHTML = "Renter OFF";
document.getElementById("Renter").checked = false;
Renter_state = 0;
}
if (this.responseXML.getElementsByTagName('UNO_State1')[0].childNodes[0].nodeValue === "on") {
document.getElementById("UNO").checked = true;
}
else {
document.getElementById("UNO").checked = false;
}
if (this.responseXML.getElementsByTagName('Mega_State1')[0].childNodes[0].nodeValue === "on") {
document.getElementById("Mega").checked = true;
}
else {
document.getElementById("Mega").checked = false;
}
}
}
}
}
// send HTTP GET request with LEDs to switch on/off if any
request.open("GET", "ajax" + strLED1 + strLED2 + Renter + UNO_State + Mega_State , true);
request.send(null);
setTimeout('GetArduinoIO()', 3000);
strLED1 = "";
strLED2 = "";
Renter = "";
UNO_State = "";
Mega_State = "";
}
// service LEDs when checkbox checked/unchecked
function GetCheck() {
if (light.checked) {
strLED1 = "&LED1=1";
}
else {
strLED1 = "&LED1=0";
}
}
function GetButton1(clicked_id)
{
switch (clicked_id) {
case "Owner":
{ if (LED2_state === 1) {
LED2_state = 0;
strLED2 = "&Owner=0";
}
else {
LED2_state = 1;
strLED2 = "&Owner=1";
}
}
break;
case "Renter":
{ if (Renter_state === 1) {
Renter_state = 0;
Renter = "&Renter=0";
}
else {
Renter_state = 1;
Renter = "&Renter=1";
}
}
break;
case "UNO":
{
UNO_State = "&RestartUNO";
}
break;
case "Mega":
{
Mega_State = "&RestartMega";
}
break;
}
}
</script>
<style>
.switch {
position: relative;
display: inline-block;
width: 120px;
height: 40px;
}
.switch input {display:none;}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ca2222;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 30px;
width: 26px;
left: 2px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #2ab934;
}
input:focus + .slider {
box-shadow: 0 0 1px #2196F3;
}
input:checked + .slider:before {
-webkit-transform: translateX(90px);
-ms-transform: translateX(90px);
transform: translateX(90px);
}
/*------ ADDED CSS ---------*/
.on
{
display: none;
}
.on, .off
{
color: white;
position: absolute;
transform: translate(-50%,-50%);
top: 50%;
left: 53%;
font-size: 18px ;
font-family: Verdana, sans-serif;
}
input:checked+ .slider .on
{display: block;}
input:checked + .slider .off
{display: none;}
/*--------- END --------*/
/* Rounded sliders */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;}
.IO_box {
float: left;
margin: 0 45px 45px 0;
border: 3px solid black;
padding: 0 10px 0 10px;
width: 120px;
font-size: 130%;
}
h1 {
font-size: 150%;
color: black;
margin: 0 0 10px 0;
}
h2 {
font-size: 100%;
color: #5734E6;
margin: 5px 0 5px 0;
}
h3 {
font-size: 110%;
color: #5734E6;
margin: 5px 0 5px 0;
}
p, form, button {
font-size: 90%;
color: #252525;
}
.small_text {
font-size: 80%;
color: #737373;
}
input.larger {
transform: scale(2);
margin: 20px;
}
.controller {
float: middle;
margin: 0 45px 45px 0;
width: 140px;
border: 3px solid black;
padding: 10px 0;
font-size: 120%;
}
</style>
</head>
<link rel= "icon" href="data:,">
<body onload = "GetArduinoIO()">
<h1> Motor and Light control</h1>
<div class="IO_box">
<h2>Light</h2>
<br/>
<label class="switch">
<input type="checkbox" id="light" name="light" onclick="GetCheck(this.id)">
<div class="slider round">
<!--ADDED HTML -->
<span class="off">Light OFF</span>
<span class="on">Light ON</span>
<!--END-->
</div>
</label>
<br/>
<br/>
<img src="lamp.jpg" style="height: 200px;width: 100px;">
</div>
<div class="IO_box">
<h2>Motor Status</h2>
<br/>
<label class="switch">
<input type="checkbox" id="Owner" onclick="GetButton1(this.id)">
<div class="slider round">
<!--ADDED HTML -->
<span class="off">Owner OFF</span>
<span class="on">Owner ON</span>
<!--END-->
</div>
</label>
<br/>
<br/>
<br/>
<label class="switch">
<input type="checkbox" id="Renter" onclick="GetButton1(this.id)">
<div class="slider round">
<!--ADDED HTML -->
<span class="off">Renter OFF</span>
<span class="on">Renter ON</span>
<!--END-->
</div>
</label>
<img src="motor.jpg" style="height: 200px;width: 100px;">
</div>
<div class="controller">
<img src="mega.jpg" style="height: 150px;width: 140px;">
<h3>Controller Status</h3>
<label class="switch">
<input type="checkbox" id="UNO" onclick="GetButton1(this.id)">
<div class="slider round">
<!--ADDED HTML -->
<span class="off">UNO OFF</span>
<span class="on">UNO ON</span>
<!--END-->
</div>
</label>
<br/>
<br/>
<label class="switch">
<input type="checkbox" id="Mega" onclick="GetButton1(this.id)">
<div class="slider round">
<!--ADDED HTML -->
<span class="off">Mega OFF</span>
<span class="on">Mega ON</span>
<!--END-->
</div>
</label>
</div>
</body>
</html>