This shows you the differences between two versions of the page.
|
pm:prj2025:avaduva:alexandra.bulgaru [2025/05/29 21:48] alexandra.bulgaru [Software Design] |
pm:prj2025:avaduva:alexandra.bulgaru [2025/05/29 21:58] (current) alexandra.bulgaru [GPS Tracker] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== GPS Tracker ====== | ====== GPS Tracker ====== | ||
| **Autor:** Alexandra Bulgaru \\ | **Autor:** Alexandra Bulgaru \\ | ||
| - | **Grupa:** 331CD | + | **Grupa:** 331CD \\ |
| + | **Repo GitHub:** https://github.com/alexabulgaru/GPS-Tracker | ||
| ===== Introducere ===== | ===== Introducere ===== | ||
| Line 110: | Line 111: | ||
| **Algoritmi și structuri implementate:** | **Algoritmi și structuri implementate:** | ||
| - | * Detectare SMS | + | * Citire și parsare NMEA |
| - | - simSerial.readStringUntil('\n') + trim() | + | - while (gpsSer.available()) gps.encode(gpsSer.read()); |
| - | - Căutare line.startsWith("+CMT:") - salvare incomingNumber | + | - TinyGPSPlus gps stochează ultima locație validă și numărul de sateliți |
| - | * Parser SMS | + | * Construire mesaj SMS |
| - | - Flag boolean waitingForSMSbody - următoarea linie e conținutul efectiv | + | - Dacă fix GPS: String link = "https://maps.google.com/?q=" + String(lat, 6) + "," + String(lon, 6) |
| - | - Convertire msg.toUpperCase() și msg.indexOf("GET LOCATION") | + | - Altfel: String link = "GPS NO FIX" |
| - | * Colectare GPS | + | * AT-commands pentru SMS |
| - | - În loop(), buclă while (gpsSerial.available()) gps.encode(...) | + | - AT("AT+CMGF=1"); - modul text |
| - | - TinyGPSPlus gps păstrează ultima poziție și numărul de sateliți | + | - AT+CMGS="<număr>" -> așteaptă prompt ‘>’ -> conținut -> 0x1A |
| - | * Trimitere SMS cu locația | + | - Citire răspuns +CMGS pentru confirmare |
| - | - Blink LED pe D13 pentru feedback vizual | + | * Control OLED |
| - | - Construire mesaj în char buf[160] cu snprintf | + | - showOLED() -> afișează mesaj fix |
| - | - AT+CMGS -> text -> CTRL-Z -> pauză 5s | + | - clearOLED() -> golește display-ul |
| - | * Afișare pe OLED | + | |
| - | - După trimitere, ștergere ecran | + | |
| - | - Dacă gps.location.isValid() -> afișează „GPS FIX OK” + coordonate | + | |
| - | - Altfel -> „NO GPS FIX” | + | |
| **Funcții implementate:** \\ | **Funcții implementate:** \\ | ||
| - | setup() | + | bool AT(const char* cmd, const char* ok = "OK", uint16_t tout = 800) |
| - | configurează pinii, pornește interfețele seriale, inițializează SIM800L și OLED, și afișează mesajul de start | + | trimite un AT-command și așteaptă un răspuns până la timeout. |
| | | ||
| - | loop() | + | bool sendSMS(const char* num, const String& msg) |
| - | ascultă SMS-urile primite și datele de la GPS, declanșează trimiterea răspunsului dacă mesajul conține comanda de locație | + | configurează modul text, inițiază AT+CMGS, trimite textul și verifică confirmarea |
| - | + | ||
| - | sendLocationSMS(const String &to) | + | |
| - | construiește și trimite SMS-ul cu coordonate (sau mesaj de eroare), dă un blink LED-ului, apoi afișează rezultatul pe OLED | + | |
| + | void showOLED() | ||
| + | afişează pe OLED mesajul „Te cauta la jefa” | ||
| + | |||
| + | void clearOLED() | ||
| + | curăţă ecranul OLED | ||
| + | | ||
| + | void setup() | ||
| + | iniţializează toate perifericele: seriale, I2C, OLED, GSM, și curăţă ecranul | ||
| + | | ||
| + | void loop() | ||
| + | primește date GPS continuu și la interval, apelează showOLED(), construiește mesajul, apelează sendSMS(), apoi clearOLED() | ||
| ===== Rezultate obținute ===== | ===== Rezultate obținute ===== | ||
| {{:pm:prj2025:avaduva:gps_tracker_1.jpeg?500x500|1}} | {{:pm:prj2025:avaduva:gps_tracker_1.jpeg?500x500|1}} | ||