Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <TinyGPSPlus.h>
- #include <SoftwareSerial.h>
- #define rainSensorPin 2
- #define buzzer 3
- #define led 4
- static const int RXPin = 6, TXPin = 5;
- String s = "www.google.com/maps/dir/";
- unsigned long interval = 10000;
- static const uint32_t GPSBaud = 9600;
- unsigned long previousMillis = 0;
- String Lat = "";
- String Lng = "";
- int SendSMS_Now = 0;
- const size_t BUFSIZE = 300;
- char f_buffer[BUFSIZE];
- float *f_buf = (float*)f_buffer;
- TinyGPSPlus gps;// The TinyGPSPlus object
- SoftwareSerial ss(RXPin, TXPin);// The serial connection to the GPS device
- void setup()
- {
- Serial.begin(9600);
- pinMode(rainSensorPin, INPUT_PULLUP);
- pinMode(buzzer, OUTPUT);
- pinMode(led, OUTPUT);
- setupA9G();
- Serial.println("Setup Executed");
- attachInterrupt(digitalPinToInterrupt(rainSensorPin), send_SMS_NOW, CHANGE);
- }
- void send_SMS_NOW() {
- SendSMS_Now = 1;
- }
- void loop() {
- readGPS_Data();
- if (SendSMS_Now == 1) {
- get_gps_data();
- digitalWrite(buzzer, HIGH);
- digitalWrite(led, HIGH);
- sendSMSwithLocation1();
- delay(2000);
- sendSMSwithLocation2();
- delay(2000);
- sendSMSwithLocation3();
- delay(2000);
- s = "www.google.com/maps/dir/";
- SendSMS_Now = 0;
- }
- digitalWrite(buzzer, LOW);
- digitalWrite(led, LOW);
- //send_gps_data();
- }
- static void smartDelay(unsigned long ms)
- {
- unsigned long start = millis();
- do
- {
- while (ss.available())
- gps.encode(ss.read());
- } while (millis() - start < ms);
- }
- void get_gps_data(){
- /*if (gps.location.lat() == 0 || gps.location.lng() == 0)
- {
- Serial.println("Return Executed");
- return;
- }*/
- Serial.print("Latitude (deg): ");
- Lat = String(gps.location.lat(), 6);
- Serial.println(Lat);
- Serial.print("Longitude (deg): ");
- Lng = String(gps.location.lng(), 6);
- Serial.println(Lng);
- Serial.println();
- s += String(gps.location.lat(), 6);
- s += ",";
- s += String(gps.location.lng(), 6);
- s += "/";
- Serial.println(s);
- }
- void setupA9G() {
- ss.begin(GPSBaud);
- Serial.println("Starting...");
- ss.println("\r");
- ss.println("AT\r");
- delay(10);
- ss.println("\r");
- ss.println("AT+GPS=1\r");
- delay(100);
- ss.println("AT+CREG=2\r");
- delay(6000);
- //ss.print("AT+CREG?\r");
- ss.println("AT+CGATT=1\r");
- delay(6000);
- ss.println("AT+CGDCONT=1,\"IP\",\"WWW\"\r");
- delay(6000);
- // ss.println("AT+LOCATION=1\r");
- ss.println("AT+CGACT=1,1\r");
- delay(6000);
- //Initialize ends
- //Initialize GPS
- ss.println("\r");
- ss.println("AT+GPS=1\r");
- delay(1000);
- //ss.println("AT+GPSMD=1\r"); // Change to only GPS mode from GPS+BDS, set to 2 to revert to default.
- ss.println("AT+GPSRD=10\r");
- delay(100);
- // set SMS mode to text mode
- ss.println("AT+CMGF=1\r");
- delay(1000);
- //ss.println("AT+LOCATION=2\r");
- }
- /////////////////////////////////////////////////////////
- void sendSMSwithLocation1() {
- Serial.println("Sending Message");
- ss.println("AT+CMGF=1\r");
- delay(1000);
- ss.println("AT+CNMI=2,2,0,0,0\r");
- delay(1000);
- ss.print("AT+CMGS=\"+966541755469\"\r");//Replace this with your mobile number
- delay(1000);
- ss.print("Warning - Water Leak Detected \n");
- ss.print(s);
- ss.write(0x1A);
- delay(1000);
- }
- void sendSMSwithLocation2() {
- Serial.println("Sending Message");
- ss.println("AT+CMGF=1\r");
- delay(1000);
- ss.println("AT+CNMI=2,2,0,0,0\r");
- delay(1000);
- ss.print("AT+CMGS=\"+966556754045\"\r");//Replace this with your mobile number
- delay(1000);
- ss.print("Warning - Water Leak Detected \n");
- ss.print(s);
- ss.write(0x1A);
- delay(1000);
- }
- void sendSMSwithLocation3() {
- Serial.println("Sending Message");
- ss.println("AT+CMGF=1\r");
- delay(1000);
- ss.println("AT+CNMI=2,2,0,0,0\r");
- delay(1000);
- ss.print("AT+CMGS=\"+966501914144\"\r");//Replace this with your mobile number
- delay(1000);
- ss.print("Warning - Water Leak Detected \n");
- ss.print(s);
- ss.write(0x1A);
- delay(1000);
- }
- /////////////////////////////////////////////////////////
- void readGPS_Data() {
- smartDelay(2000);
- if (millis() > 5000 && gps.charsProcessed() < 10)
- Serial.println(F("No GPS data received: check wiring"));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement