Version 2.0 Arduino kontrollerad bil Tracking System baserade på SMS- (5 / 5 steg)
Steg 5: Program
den har några turkiska linjer, några av demGPS VERISI HAZIR DEGIL === >>> GPS-DATA är inte klar
KoordinatBilgisiGonder === > SendGPSData
ENLEM === >>> LATITUDE
BOYLAM === >>> longitud
HIZ === >> hastighet
========================================== CODE===================================================
#include
#include
#include
TinyGPS gps;
SoftwareSerial gsmSerial(10,11);
SoftwareSerial gsmSerial(3,2);
SoftwareSerial ss(5,6);
Sträng inData = "";
booleska inputAvailable = false;
String recievedNumber = "";
String gpsMesajIcerik = "";
int callback_counter = 0;
int indexofMsgStr = 0;
flyta platt, flon, fkmph;
osignerade långa ålder;
char okunanKarakter = ' *';
flyta flat_store = 0,0;
flyta flon_store = 0,0;
int Summer = 7.
void setup()
{
pinMode (Summer, produktionen);
Serial.BEGIN(9600);
SS.BEGIN(9600);
gsmSerial.begin(9600);
Timer1.Initialize(8388480); yaklasik 8.3 saniye
Timer1.attachInterrupt(callback);
Delay(2000);
gsmSerial.listen();
Serial.println("basla");
Delay(1000);
gsmSerial.listen();
fastbuzzer();
}
void loop() / / kör om och om igen
{
While(gsmSerial.available())
{
inputAvailable = sant;
okunanKarakter = (char) gsmSerial.read();
inData += okunanKarakter;
om (okunanKarakter == ',') {
bryta;
}
}
IF(inputAvailable)
{
inputAvailable = false;
processData();
inData = "";
}
}
void printGPSDATA()
{
GPS.f_get_position (& platt, och flon, och ålder);
om (platt > 0,0)
flat_store = platt;
om (flon > 0,0)
flon_store = flon;
fkmph = gps.f_speed_kmph(); hastighet i km/h
}
void TAKEGPSDATA() {
Serial.println ("---> TAKEGPSDATA");
booleska gps_valid = false;
SS.listen();
Delay(1000);
för (int jag = 0; jag < 200; i ++)
{
IF(!gps_valid)
{
samtidigt (ss.available())
{
char c = ss.read();
om (gps.encode(c)) / / kom en ny giltig mening?
{
printGPSDATA();
gps_valid = sant;
bryta;
}
}
Delay(5);
}
}
gsmSerial.listen();
Delay(1000);
Serial.println ("<---TAKEGPSDATA");
}
void processData() {
Serial.println(inData);
IF(IsRinging())
{/ / telefon caliyor
Serial.println ("telefon caliyor");
indexofMsgStr = inData.indexOf("05");
recievedNumber = inData.substring (indexofMsgStr, indexofMsgStr + 11);
Serial.Print ("fått numret =");
Serial.println(recievedNumber);
IF(IsAdminNumber())
{
Serial.println ("admin ok!");
TAKEGPSDATA();
IF(gpsDataOk())
{
KoordinatBilgisiGonder();
}
annat
{
HazirDegilBilgisiGonder();
}
}
}
}
void KoordinatBilgisiGonder() {
gpsMesajIcerik = "AT + CMGS = \" ";
gpsMesajIcerik += "9";
gpsMesajIcerik += recievedNumber;
gpsMesajIcerik += "\" ";
gsmSerial.println("AT+CMGF=1");
Delay(2000);
gsmSerial.println(gpsMesajIcerik);
Delay(1000);
gsmSerial.print ("ENLEM =");
gsmSerial.println(flat_store,6);
gsmSerial.print ("BOYLAM =");
gsmSerial.println(flon_store,6);
gsmSerial.print ("HIZ =");
gsmSerial.print(fkmph);
gsmSerial.println ("km/saat");
gsmSerial.println ("LINK =");
gsmSerial.print ("http://maps.google.com/?ie=UTF8 & hq = & ll =");
gsmSerial.print(flat_store,6);
gsmSerial.print(",");
gsmSerial.print(flon_store,6);
gsmSerial.print ("& z = 20");
gsmSerial.write(26);
}
void HazirDegilBilgisiGonder()
{
gpsMesajIcerik = "AT + CMGS = \" ";
gpsMesajIcerik += "9";
gpsMesajIcerik += recievedNumber;
gpsMesajIcerik += "\" ";
gsmSerial.println("AT+CMGF=1");
Delay(2000);
gsmSerial.println(gpsMesajIcerik);
Delay(1000);
gsmSerial.println ("GPS VERISI HAZIR DEGIL");
gsmSerial.print(flat_store,6);
gsmSerial.print("-");
gsmSerial.println(flon_store,6);
gsmSerial.write(26);
}
int IsRinging()
{
om (inData.indexOf("CLIP:") > = 0)
{
tillbaka 1.
}
annat
{
Return 0;
}
}
int IsAdminNumber()
{
IF(recievedNumber.equals("05558237477"))
{
tillbaka 1.
}
annat
{
IF(recievedNumber.equals("05073674078"))
{
tillbaka 1.
}
annat
{
IF(recievedNumber.equals("05323375412"))
{
tillbaka 1.
}
annat
{
IF(recievedNumber.equals("05398523288"))
{
tillbaka 1.
}
annat
{
IF(recievedNumber.equals("05532766541"))
{
tillbaka 1.
}
annat
{
Return 0;
}
}
}
}
}
}
int gpsDataOk()
{
om ((platt > 0,0) & & (flon > 0,0))
{
tillbaka 1.
}
annat
{
Return 0;
}
}
void callback()
{
callback_counter ++;
om (callback_counter > = 80)
{
Serial.Print ("callback ok!");
callback_counter = 0;
TAKEGPSDATA();
}
}
void fastbuzzer()
{
för (int jag = 0; jag < 10; i ++)
{
digitalWrite (Summer, hög); Aktivera LED (HIGH är spänningsnivån)
Delay(100); vänta en sekund
digitalWrite (Summer, låg); Inaktivera LED genom att spänningen låg
Delay(100);
}
}