Mình sử dụng Module Sim800L để gởi vj trí hiện tại về tin nhắn số điện thoại cần gởi,nh có điểm yếu là Module GPS Neo6M không thể bắt trong nhà, vì không thể xuyên qua bê tông. Vậy mình muốn tạo biến lưu giá trị GPS bắt được vị trí gần đây nhất, nếu GPS không bắt được nữa thì vẫn có thể gởi tin nhắn báo vị trí bắt được lúc gần đây nhất, nếu bắt được lại thì sẽ cập nhật giá trị mới, mọi người có thể giúp mình thêm chức năng này cho mạch được không ạ.
Đây là code của mình ạ:
#include <TinyGPS++.h> // Include TinyGPS++ library
//Create software serial object to communicate with SIM800L
#define button 2
#define coi 3
#include <avr/interrupt.h>
int count=0;
volatile int temp;
String diachi;
int dem;
int val;
float kinhdo = 0;
float vido = 0;
SoftwareSerial sim800(8,9); //SIM800L Tx & Rx is connected to Arduino #8 & #9
SoftwareSerial GPS(7, 6);
TinyGPSPlus gps;
String SDT="0968102436";
int flag = 0;
void setup(){
Serial.begin(9600);
Serial.println("OK");
pinMode(button,INPUT_PULLUP);
pinMode(coi,OUTPUT);
sim800.begin(9600);
GPS.begin(9600);
}
//===================================================================================
//====================================MAIN===========================================
void loop()
{
boolean a = digitalRead(button);
if(a == 0){
flag=1;
}
while(flag==1){
Serial.println("call");
digitalWrite(coi, HIGH);
call();
digitalWrite(coi, LOW);
Serial.println("sms");
loca();
sms();
Serial.println("done");
flag = 0;
}
}
//===================================================================================
//===================================================================================
//ISR (TIMER1_OVF_vect)
//{
// if(flag == 1){
// Serial.println("buzz");
// TCNT1 = 3036;
// count++;
// if(count <10){
// digitalWrite(coi, HIGH);
// }
// else{
// digitalWrite(coi, LOW);
// }
// }
//}
//-----------------------------------------------------------------------------------
//MAKE A PHONE CALL
void call(){
at("AT",1000);
at("ATD"+SDT+";",10000);
// at("ATH",1000);
sim800.write(26);
Serial.println("Call");
}
//-----------------------------------------------------------------------------------
//SEND A MESSAGE
void sms(){
//GPS();
at("AT",1000);
at("AT+CMGF=1",1000);
at("AT+CSCS=\"GSM\"",1000);
at("AT+CMGS=\"" + SDT+"\"",2000);
at(diachi,1000);
sim800.write(26);
Serial.println("SMS");
}
//-----------------------------------------------------------------------------------
//GET GPS LOCATION
void loca(){
kinhdo = 0;
vido = 0;
String ggmap="https://www.google.com/maps?q=";
//Serial.println("welcome");
while((kinhdo==0) && (vido==0) ){
//while(1){
boolean a = gps.encode(GPS.read());
delay(1);
Serial.println("");
if (gps.encode(GPS.read())) {
if (gps.location.isValid()) ;
String ggmap="https://www.google.com/maps?q=";
kinhdo = gps.location.lat();
//ggmap=ggmap+ String (gps.location.lat(), DEC);
ggmap=ggmap+ String (kinhdo, DEC);
ggmap=ggmap+",";
vido = gps.location.lng();
//ggmap=ggmap+String (gps.location.lng(), DEC);
ggmap=ggmap+String (vido, DEC);
diachi="Toi can giup do!!! Dia chi o:"+ ggmap+"&hl=vi-VN&gl=vn&shorturl=1";
Serial.println(diachi);
delay(1000);
}//end if
}
}
//-----------------------------------------------------------------------------------
//AT CMD
void at(String _atcm,unsigned long _dl){
sim800.print(_atcm+"\r\n");
delay(_dl);
}```
Mong mọi người có thể giúp mình, mình xin cảm ơn 🙆🏻♂️