Den ultimata barn trackern (5 / 7 steg)
Steg 5: programvara
Arduino skiss är kraftigt modifierad från exemplen i Adafruit Fona bibliotek.
#include
#include "Adafruit_FONA.h"
#define FONA_RST 4
#define auktoriserad "+ 1 ***" / / sätt in ditt telefonnummer här
Detta är en stor buffert för svar
char replybuffer [255];
HardwareSerial * fonaSerial = & Serial1; Använda Serial1 i Xadow styrelse
Adafruit_FONA fona = Adafruit_FONA(FONA_RST);
uint8_t readline (char * buff, uint8_t maxbuff, uint16_t timeout = 0);
void setup() {
tag (!. Seriell);
Serial.BEGIN(115200);
Serial.println (F ("initierar... (Kan ta 3 sekunder) "));
fonaSerial -> begin(115200); SIM800L modul auto upptäcker överföringshastighet, men fungerar riktigt bra med 115200
om (! fona.begin(*fonaSerial)) {
Serial.println (F ("kunde inte hitta SIM800L"));
While(1);
}
Serial.println (F ("SIM800L är OK"));
Skriv ut SIM-kortet IMEI-nummer.
char imei [15] = {0}. MÅSTE använda en 16 tecken buffert för IMEI!
uint8_t imeiLen = fona.getIMEI(imei);
om (imeiLen > 0) {
Serial.Print ("SIM-kortet IMEI:"); Serial.println(IMEI);
}
Konfigurera APN inställningar för TING - Vänligen ändra för nätverket
fona.setGPRSNetworkSettings(F("wholesale"));
}
char fonaInBuffer [64];
void loop() {
Serial.Print (F ("FONA >"));
tag (!. Serial.available()) {
om (fona.available()) {
Serial.write(Fona.Read());
}
}
char telefon [32] = {0}.
IF(Fona.incomingCallNumber(Phone)) {
Serial.println(F("ring!"));
Serial.Print (F ("telefonnummer:"));
Serial.println(Phone);
IF(Phone == AUTHORIZED)
fona.pickUp();
}
char * bufPtr = fonaInBuffer; händig buffert pekaren
om (fona.available()) //any data tillgängliga från SIM800L?
{
int slot = 0; Detta kommer att vara slot antalet SMS
int charCount = 0;
Läs anmälan till fonaInBuffer
göra {
* bufPtr = fona.read();
Serial.write(*bufPtr);
Delay(1);
} medan ((* bufPtr ++! = "\n") & & (fona.available()) & & (++ charCount < (sizeof(fonaInBuffer)-1)));
Lägga till en terminal NULL i strängen notification
* bufPtr = 0;
Skanna anmälan strängen för ett SMS fått anmälan.
Om det är ett SMS-meddelande, får vi kortplats som i "slot"
om (1 == sscanf (fonaInBuffer, "+ CMTI: \"SM\",%d", & slot)) {
Serial.Print ("slot:"); Serial.println(slot);
char callerIDbuffer [32]; Vi ska lagra SMS sender numret här
Hämta SMS avsändare adress/telefonnummer.
om (! fona.getSMSSender (slot, callerIDbuffer, 31)) {
Serial.println hitta ("inte SMS-meddelande i kortplats!");
}
Serial.Print (F ("från:")); Serial.println(callerIDbuffer);
IF(callerIDbuffer == AUTHORIZED) {
Skicka tillbaka ett automatiskt svar
Serial.println ("Skicka svar...");
om (! fona.enableGPRS(true))
Serial.println F ("kunde inte aktivera").
uint16_t returkod;
om (! fona.getGSMLoc (& returkod, replybuffer, 250))
Serial.println(F("failed!"));
om (returkod == 0) {
Serial.println(replybuffer);
} annat {
Serial.Print (F ("misslyckas kod #")); Serial.println(returncode);
}
om (! fona.sendSMS (callerIDbuffer, replybuffer)) {
Serial.println(F("failed"));
} annat {
Serial.println(F("sent!"));
}
om (! fona.enableGPRS(true))
Serial.println F ("kunde inte aktivera").
}
}
}
}