#include "Adafruit_FONA.h" // Pin for actiaving LifeLarm #define activateLarm 5 // Pins on PCB that connect to Sim #define FONA_RX 9 #define FONA_TX 8 #define FONA_RST 4 #define FONA_RI 7 // this is a large buffer for replies char replybuffer[255]; // Phone number we send emergency text to char callerIDbuffer[32]; #include SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); SoftwareSerial *fonaSerial = &fonaSS; Adafruit_FONA fona = Adafruit_FONA(FONA_RST); uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0); void setup() { while (!Serial); Serial.begin(115200); Serial.println(F("LifeLarm turning on!")); Serial.println(F("Initializing....(May take 3 seconds)")); // make it slow so its easy to read! fonaSerial->begin(4800); if (! fona.begin(*fonaSerial)) { Serial.println(F("Couldn't find FONA")); while(1); } // Set button to active low pinMode(activateLarm, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(activateLarm), sendHelp, CHANGE); Serial.println("LifeLarm Ready"); } char fonaInBuffer[64]; //for notifications from the FONA void loop() { char* bufPtr = fonaInBuffer; //handy buffer pointer if (fona.available()) //any data available from the FONA? { int slot = 0; //this will be the slot number of the SMS int charCount = 0; //Read the notification into fonaInBuffer do { *bufPtr = fona.read(); Serial.write(*bufPtr); delay(1); } while ((*bufPtr++ != '\n') && (fona.available()) && (++charCount < (sizeof(fonaInBuffer)-1))); //Add a terminal NULL to the notification string *bufPtr = 0; // Scan the notification string for an SMS received notification. // If it's an SMS message, we'll get the slot number in 'slot' if (1 == sscanf(fonaInBuffer, "+CMTI: \"SM\",%d", &slot)) { Serial.print("slot: "); Serial.println(slot); // Retrieve SMS sender address/phone number. if (! fona.getSMSSender(slot, callerIDbuffer, 31)) { Serial.println("Didn't find SMS message in slot!"); } Serial.print(F("Retreived number: ")); Serial.println(callerIDbuffer); Serial.print(F("Stored in slot: ")); Serial.println(slot); //Send back an automatic response Serial.println("Sending confirmation..."); if (!fona.sendSMS(callerIDbuffer, "Your phone number has been set as the emergency number!")) { Serial.println(F("Failed to send!")); } else { Serial.println(F("Sent!")); } // delete the original msg after it is processed // otherwise, we will fill up all the slots // and then we won't be able to receive SMS anymore /* if (fona.deleteSMS(slot)) { Serial.println(F("OK!")); } else { Serial.println(F("Couldn't delete")); } */ } } } void sendHelp() { Serial.println("Sending text..."); if (!fona.sendSMS(callerIDbuffer, "HELP! ... --- ... I will be sending my location to you!")) { Serial.println(F("Failed to send!")); } else { Serial.println(F("Sent!")); } }