#include <Arduino.h>
// 模拟发送北斗短报文函数
void sendSMS(const char* platformID, const char* message) {
// 实际开发中需替换为北斗模块的通信代码
Serial.printf("向平台%s发送信息:%s\n", platformID, message);
}
String generateRescueMessage(double latitude, char uLat, double longitude, char uLon, float pressure) {
// 数据有效性验证
if (latitude < 0 || latitude > 90) return "";
if (longitude < 0 || longitude > 180) return "";
if (pressure < 2.5 || pressure > 4.0) return "";
if (uLat != 'N' && uLat != 'S') return "";
if (uLon != 'E' && uLon != 'W') return "";
// 格式化纬度(WW.wwwwww)
char lat_str[10];
snprintf(lat_str, sizeof(lat_str), "%09.6lf", latitude);
if (strlen(lat_str) != 9) return "";
// 格式化经度(JJJ.jjjjjj)
char lon_str[11];
snprintf(lon_str, sizeof(lon_str), "%010.6lf", longitude);
if (strlen(lon_str) != 10) return "";
// 格式化压力值(保留1位小数)
char pressure_str[5];
snprintf(pressure_str, sizeof(pressure_str), "%.1f", pressure);
// 构造协议字符串
String protocol = "lat:";
protocol += lat_str;
protocol += ",uLat:";
protocol += uLat;
protocol += ",lon:";
protocol += lon_str;
protocol += ",uLon:";
protocol += uLon;
protocol += ",pressure:";
protocol += pressure_str;
return protocol;
}
float generateLatitude() {
return random(0, 90000001) / 1000000.0; // 0.0-90.0
}
float generateLongitude() {
return random(0, 180000001) / 1000000.0; // 0.0-180.0
}
char generateULat() {
return random(0, 2) ? 'N' : 'S';
}
char generateULon() {
return random(0, 2) ? 'E' : 'W';
}
float generatePressure() {
return random(25, 41) / 10.0; // 2.5-4.0
}
// 定时发送控制
unsigned long lastSend = 0;
const int INTERVAL = 30 * 60 * 1000; // 30分钟间隔
void setup() {
Serial.begin(115200);
randomSeed(analogRead(A0)); // 初始化随机种子
lastSend = millis(); // 启动时立即发送
}
void loop() {
if (millis() - lastSend >= INTERVAL) {
lastSend = millis();
// 生成随机数据
double lat = 10.122;//generateLatitude();
char uLat = generateULat();
double lon = 22.33010;//generateLongitude();
char uLon = generateULon();
float pressure = generatePressure();
// 生成协议字符串
String message = generateRescueMessage(lat, uLat, lon, uLon, pressure);
if (!message.isEmpty()) {
sendSMS("15950077", message.c_str());
} else {
Serial.println("数据校验失败,信息未发送");
}
}
}