#include <SPI.
h>
#include <SD.h>
#include <SoftwareSerial.h>
const int chipSelect = 10;
SoftwareSerial gpsSerial(4, 3); // RX, TX pentru modul GPS (RX pe D4)
const int analogPin = A0;
const unsigned long interval = 30000;
unsigned long previousMillis = 0;
File logFile;
float voltageToDbm(float voltage) {
return 33.636 * voltage - 139.18;
}
bool parseGPGGA(String nmea, String &timeStr, String &lat, String &lon) {
if () return false;
int idx = 0;
int lastIdx = 0;
int field = 0;
String fields[15];
while ((idx = [Link](',', lastIdx)) != -1) {
fields[field++] = [Link](lastIdx, idx);
lastIdx = idx + 1;
}
if (field > 5) {
timeStr = fields[1];
lat = fields[2];
lon = fields[4];
return true;
}
return false;
}
void setup() {
[Link](9600);
[Link](4800);
pinMode(chipSelect, OUTPUT);
if () {
[Link]("Card failed or not present");
while (1);
}
[Link]("Card initialized.");
logFile = [Link]("[Link]", FILE_WRITE);
if (logFile) {
[Link]("Time,Latitude,Longitude,Signal_dBm");
[Link]();
}
}
void loop() {
if (millis() - previousMillis >= interval) {
previousMillis = millis();
String nmea = "";
while ([Link]()) {
char c = [Link]();
if (c == '\n') break;
nmea += c;
}
String timeStr, lat, lon;
if (parseGPGGA(nmea, timeStr, lat, lon)) {
int adcVal = analogRead(analogPin);
float voltage = adcVal * (3.0 / 1023.0);
float dbm = voltageToDbm(voltage);
logFile = [Link]("[Link]", FILE_WRITE);
if (logFile) {
[Link](timeStr);
[Link](",");
[Link](lat);
[Link](",");
[Link](lon);
[Link](",");
[Link](dbm, 1);
[Link]();
}
[Link]("Time: "); [Link](timeStr);
[Link](" Lat: "); [Link](lat);
[Link](" Lon: "); [Link](lon);
[Link](" dBm: "); [Link](dbm, 1);
}
}
}