Program for setting time on RTC: //------------------Code Starts-----------------------// #include #include #include int P = A3; //Assign power pins for RTC int N = A2; const char *monthName[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; tmElements_t tm; void setup() { pinMode(P, OUTPUT); pinMode(N, OUTPUT); digitalWrite(P, HIGH); digitalWrite(N, LOW); bool parse = false; bool config = false; // get the date and time the compiler was run if (getDate(__DATE__) && getTime(__TIME__)) { parse = true; // and configure the RTC with this info if (RTC.write(tm)) { config = true; } } Serial.begin(9600); while (!Serial) ; // wait for Arduino Serial Monitor delay(200); if (parse && config) { Serial.print("DS1307 configured Time="); Serial.print(__TIME__); Serial.print(", Date="); Serial.println(__DATE__); } else if (parse) { Serial.println("DS1307 Communication Error :-{"); Serial.println("Please check your circuitry"); } else { Serial.print("Could not parse info from the compiler, Time=\""); Serial.print(__TIME__); Serial.print("\", Date=\""); Serial.print(__DATE__); Serial.println("\""); } } void loop() { } bool getTime(const char *str) { int Hour, Min, Sec; if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false; tm.Hour = Hour; tm.Minute = Min; tm.Second = Sec; return true; } bool getDate(const char *str) { char Month[12]; int Day, Year; uint8_t monthIndex; if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false; for (monthIndex = 0; monthIndex < 12; monthIndex++) { if (strcmp(Month, monthName[monthIndex]) == 0) break; } if (monthIndex >= 12) return false; tm.Day = Day; tm.Month = monthIndex + 1; tm.Year = CalendarYrToTm(Year); return true; } //----------------Code Ends------------------------------// ·Upload the above code with completed hardware. ·Open the serial monitor and it shows time has been set. ·Now you are ready to move to next step. You successfully set time to the RTC module. Now, let’s upload the program code which will notify us via SMS. //----- Main Program Code Starts----// #include #include #include int X; int Y; int sec = 50; int t = 0; int i = 0; int check = 1; int chk = 0; int P = A3; int N = A2; int tim = 0; float Time = 0; float frequency = 0; float waterFlow = 0; float total = 0; float LS = 0; float average = 0; const int input = A0; const int test = 9; void setup() { Serial.begin(9600); pinMode(input, INPUT); pinMode(test, OUTPUT); analogWrite(test, 100); pinMode(P, OUTPUT); pinMode(N, OUTPUT); digitalWrite(P, HIGH); digitalWrite(N, LOW); for (i = 0; i < sec; i++) { delay(1000); } Serial.println("AT+CNMI=2,2,0,0,0"); delay(1000); Serial.println("AT+CMGF=1"); delay(500); Serial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile number delay(1000); Serial.println("Your water supply notification system is ready.");// The SMS text you want to send delay(100); Serial.println((char)26); // ASCII code of CTRL+Z delay(1000); } void loop() { tmElements_t tm; if (RTC.read(tm)) { if (tm.Hour > 12) //24Hrs to 12 Hrs conversion// { if (tm.Hour == 13) tim = 1; if (tm.Hour == 14) tim = 2; if (tm.Hour == 15) tim = 3; if (tm.Hour == 16) tim = 4; if (tm.Hour == 17) tim = 5; if (tm.Hour == 18) tim = 6; if (tm.Hour == 19) tim = 7; if (tm.Hour == 20) tim = 8; if (tm.Hour == 21) tim = 9; if (tm.Hour == 22) tim = 10; if (tm.Hour == 23) tim = 11; } else { tim = tm.Hour; } X = pulseIn(input, HIGH); Y = pulseIn(input, LOW); Time = X + Y; frequency = 1000000 / Time; waterFlow = frequency / 7.5; LS = waterFlow / 60; if (frequency >= 0) { if (isinf(frequency)) { if (chk == 1) { Serial.println("AT+CNMI=2,2,0,0,0"); delay(1000); Serial.println("AT+CMGF=1"); delay(500); Serial.println("AT+CMGS=\"+92xxxxxxxxxx\"\r"); // Replace x with mobile number delay(1000); Serial.print("Time: "); delay(10); Serial.print(tim); delay(10); Serial.print(":"); delay(10); Serial.print(tm.Minute); delay(10); if (tm.Hour >= 12) { Serial.println(" PM"); } if (tm.Hour < 12) { Serial.println(" AM"); } delay(10); Serial.println("Water Supply is Ended.");// The SMS text you want to send delay(100); Serial.print("Average Water Flow (Litre/Min): "); delay(100); Serial.println(average); delay(100); Serial.print("Total Water Delivered: "); delay(100); Serial.print(total); delay(100); Serial.println(" Litre"); delay(100); Serial.println((char)26); // ASCII code of CTRL+Z delay(5000); t = 0; total = 0; average = 0; chk = 0; check = 1; } } else { if (check == 1) { Serial.println("AT+CNMI=2,2,0,0,0"); delay(1000); Serial.println("AT+CMGF=1"); delay(500); Serial.println("AT+CMGS=\"+92xxxxxxxxxx\"\r"); // Replace x with mobile number delay(1000); Serial.print("Time: "); delay(10); Serial.print(tim); delay(10); Serial.print(":"); delay(10); Serial.print(tm.Minute); delay(10); if (tm.Hour >= 12) { Serial.println(" PM"); } if (tm.Hour < 12) { Serial.println(" AM"); } delay(10); Serial.println("The water is being supplied now.");// The SMS text you want to send delay(100); Serial.println((char)26); // ASCII code of CTRL+Z delay(1000); check = 0; chk = 1; } t = t + 1; total = total + LS; average = total / t; average = average * 60; } } delay(1000); } } //--------Code Ends------------// If you upload the RTC time setting program to Arduino first and then the main program (with completed hardware setup), the project will not work.