safwan092

Untitled

Nov 1st, 2025
26
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.79 KB | None | 0 0
  1. #include <TinyGPSPlus.h>
  2.  
  3. //////////////////////
  4. /*
  5. get_gps_data();
  6. sendSMSLocation();
  7. */
  8. //////////////////////
  9. ////////////////////////////////////////////////
  10. String s = "www.google.com/maps/dir/";
  11. static const uint32_t GPSBaud = 9600;
  12. String Lat = "";
  13. String Lng = "";
  14. int SendSMS_Now = 0;
  15. const size_t BUFSIZE = 300;
  16. char f_buffer[BUFSIZE];
  17. float *f_buf = (float*)f_buffer;
  18. TinyGPSPlus gps;
  19. ////////////////////////////////////////////////
  20.  
  21.  
  22. void setup() {
  23. Serial.begin(115200);
  24. setupA9G();
  25. Serial.println("Setup Executed");
  26. }
  27.  
  28. void send_SMS_NOW() {
  29. SendSMS_Now = 1;
  30. }
  31.  
  32. void loop() {
  33. fullGPSSerial();
  34. readGPS_Data();
  35. showLATLON();
  36.  
  37. if (SendSMS_Now == 1) {
  38. get_gps_data();
  39. sendSMSLocation();
  40. delay(2000);
  41. s = "www.google.com/maps/dir/";
  42. SendSMS_Now = 0;
  43. }
  44.  
  45. delay(20);
  46.  
  47. }// end of LOOP
  48.  
  49.  
  50. ////////////////////////////////////////////////////////////
  51. void sendSMSLocation() {
  52. Serial.println("Sending SMS now !!!!");
  53.  
  54.  
  55. /////
  56. Serial2.println("AT+CMGF=1\r");
  57. delay(1000);
  58.  
  59. Serial2.println("AT+CNMI=2,2,0,0,0\r");
  60. delay(1000);
  61.  
  62. Serial2.print("AT+CMGS=\"+966580224645\"\r");//Replace this with your mobile number
  63. delay(1000);
  64. Serial2.print(s);
  65. Serial2.write(0x1A);
  66. delay(3000);
  67. /////
  68. /*
  69. Serial2.println("AT+CMGF=1\r");
  70. delay(1000);
  71. Serial2.println("AT+CNMI=2,2,0,0,0\r");
  72. delay(1000);
  73. Serial2.print("AT+CMGS=\"+966554418546\"\r");//Replace this with your mobile number
  74. delay(1000);
  75. Serial2.print("WARNING! Helmit Impact Detected\n");
  76. //Serial2.print(s);
  77. Serial2.write(0x1A);
  78. */
  79. Serial.println("Sending SMS is Done check your Phone!!!!!!!!!!!!!!!");
  80. delay(1000);
  81. s = "www.google.com/maps/dir/";
  82. }
  83. ////////////////////////////////////////////////////////////
  84.  
  85. void get_gps_data() {
  86. if (gps.location.lat() == 0 || gps.location.lng() == 0) {
  87. Serial.println("Return Executed");
  88. s = "http://www.google.com/maps/dir/19.204871,42.085309";
  89. Serial.println(s);
  90. return;
  91. }
  92. Serial.print("Latitude (deg): ");
  93. Lat = String(gps.location.lat(), 6);
  94. Serial.println(Lat);
  95. Serial.print("Longitude (deg): ");
  96. Lng = String(gps.location.lng(), 6);
  97. Serial.println(Lng);
  98. Serial.println();
  99. s += String(gps.location.lat(), 6);
  100. s += ",";
  101. s += String(gps.location.lng(), 6);
  102. s += "/";
  103. Serial.println(s);
  104. }
  105.  
  106. void setupA9G() {
  107. Serial2.begin(GPSBaud);
  108. Serial.println("Starting...");
  109. Serial2.println("\r");
  110. Serial2.println("AT\r");
  111. delay(10);
  112. Serial2.println("\r");
  113. Serial2.println("AT+GPS=1\r");
  114. delay(100);
  115. Serial2.println("AT+CREG=2\r");
  116. delay(6000);
  117. //ss.print("AT+CREG?\r");
  118. Serial2.println("AT+CGATT=1\r");
  119. delay(6000);
  120. Serial2.println("AT+CGDCONT=1,\"IP\",\"WWW\"\r");
  121. delay(6000);
  122. // ss.println("AT+LOCATION=1\r");
  123. Serial2.println("AT+CGACT=1,1\r");
  124. delay(6000);
  125. //Initialize ends
  126. //Initialize GPS
  127. Serial2.println("\r");
  128. Serial2.println("AT+GPS=1\r");
  129. delay(1000);
  130. //ss.println("AT+GPSMD=1\r"); // Change to only GPS mode from GPS+BDS, set to 2 to revert to default.
  131. Serial2.println("AT+GPSRD=10\r");
  132. delay(100);
  133. // set SMS mode to text mode
  134. Serial2.println("AT+CMGF=1\r");
  135. delay(1000);
  136. //ss.println("AT+LOCATION=2\r");
  137. Serial.println(F("FullExample.ino"));
  138. Serial.println(F("An extensive example of many interesting TinyGPSPlus features"));
  139. Serial.print(F("Testing TinyGPSPlus library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
  140. Serial.println(F("by Mikal Hart"));
  141. Serial.println();
  142. Serial.println(F("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum"));
  143. Serial.println(F(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail"));
  144. Serial.println(F("----------------------------------------------------------------------------------------------------------------------------------------"));
  145. }
  146.  
  147. void readGPS_Data() {
  148. smartDelay(200);
  149. if (millis() > 5000 && gps.charsProcessed() < 10)
  150. Serial.println(F("No GPS data received: check wiring"));
  151. }
  152.  
  153. void showLATLON() {
  154. Serial.print("Latitude (deg): ");
  155. Lat = String(gps.location.lat(), 6);
  156. Serial.println(Lat);
  157. Serial.print("Longitude (deg): ");
  158. Lng = String(gps.location.lng(), 6);
  159. Serial.println(Lng);
  160. Serial.println();
  161. }
  162.  
  163.  
  164. void fullGPSSerial() {
  165. static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;
  166. printInt(gps.satellites.value(), gps.satellites.isValid(), 5);
  167. printFloat(gps.hdop.hdop(), gps.hdop.isValid(), 6, 1);
  168. printFloat(gps.location.lat(), gps.location.isValid(), 11, 6);
  169. printFloat(gps.location.lng(), gps.location.isValid(), 12, 6);
  170. printInt(gps.location.age(), gps.location.isValid(), 5);
  171. printDateTime(gps.date, gps.time);
  172. printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2);
  173. printFloat(gps.course.deg(), gps.course.isValid(), 7, 2);
  174. printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2);
  175. printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.deg()) : "*** ", 6);
  176.  
  177. unsigned long distanceKmToLondon =
  178. (unsigned long)TinyGPSPlus::distanceBetween(
  179. gps.location.lat(),
  180. gps.location.lng(),
  181. LONDON_LAT,
  182. LONDON_LON) / 1000;
  183. printInt(distanceKmToLondon, gps.location.isValid(), 9);
  184.  
  185. double courseToLondon =
  186. TinyGPSPlus::courseTo(
  187. gps.location.lat(),
  188. gps.location.lng(),
  189. LONDON_LAT,
  190. LONDON_LON);
  191.  
  192. printFloat(courseToLondon, gps.location.isValid(), 7, 2);
  193.  
  194. const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon);
  195.  
  196. printStr(gps.location.isValid() ? cardinalToLondon : "*** ", 6);
  197.  
  198. printInt(gps.charsProcessed(), true, 6);
  199. printInt(gps.sentencesWithFix(), true, 10);
  200. printInt(gps.failedChecksum(), true, 9);
  201. Serial.println();
  202.  
  203. smartDelay(100);
  204. if (gps.charsProcessed() > 63) {
  205. }
  206. if (millis() > 5000 && gps.charsProcessed() < 10)
  207. Serial.println(F("No GPS data received: check wiring"));
  208. }
  209.  
  210.  
  211. // This custom version of delay() ensures that the gps object
  212. // is being "fed".
  213. static void smartDelay(unsigned long ms)
  214. {
  215. unsigned long start = millis();
  216. do
  217. {
  218. while (Serial2.available())
  219. gps.encode(Serial2.read());
  220. } while (millis() - start < ms);
  221. }
  222.  
  223. static void printFloat(float val, bool valid, int len, int prec)
  224. {
  225. if (!valid)
  226. {
  227. while (len-- > 1) {}
  228. //Serial.print('*');
  229. //Serial.print(' ');
  230. }
  231. else
  232. {
  233. //Serial.print(val, prec);
  234. int vi = abs((int)val);
  235. int flen = prec + (val < 0.0 ? 2 : 1); // . and -
  236. flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
  237. for (int i = flen; i < len; ++i) {}
  238. //Serial.print(' ');
  239. }
  240. smartDelay(0);
  241. }
  242.  
  243. static void printInt(unsigned long val, bool valid, int len)
  244. {
  245. char sz[32] = "*****************";
  246. if (valid)
  247. sprintf(sz, "%ld", val);
  248. sz[len] = 0;
  249. for (int i = strlen(sz); i < len; ++i)
  250. sz[i] = ' ';
  251. if (len > 0)
  252. sz[len - 1] = ' ';
  253. //Serial.print(sz);
  254. smartDelay(0);
  255. }
  256.  
  257. static void printDateTime(TinyGPSDate &d, TinyGPSTime &t)
  258. {
  259. if (!d.isValid())
  260. {
  261. //Serial.print(F("********** "));
  262. }
  263. else
  264. {
  265. char sz[32];
  266. sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year());
  267. //Serial.print(sz);
  268. }
  269.  
  270. if (!t.isValid())
  271. {
  272. //Serial.print(F("******** "));
  273. }
  274. else
  275. {
  276. char sz[32];
  277. sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second());
  278. //Serial.print(sz);
  279. }
  280.  
  281. printInt(d.age(), d.isValid(), 5);
  282. smartDelay(0);
  283. }
  284.  
  285. static void printStr(const char *str, int len)
  286. {
  287. int slen = strlen(str);
  288. for (int i = 0; i < len; ++i)
  289. //Serial.print(i < slen ? str[i] : ' ');
  290. smartDelay(0);
  291. }
  292.  
  293.  
Advertisement
Add Comment
Please, Sign In to add comment