#include #include #include // 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]; // Slot in which the phone number is stored int slot = 0; 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"); // Loop trough slots untill we find the number for (int k = 0; k < 10; k++) { if (!fona.getSMSSender(slot, callerIDbuffer, 31)) { Serial.print(F("Found number in slot:")); Serial.println(slot); Serial.print(F("Emergency number set to: ")); Serial.println(callerIDbuffer); k = 99; // exit for loop by going out of bounds } else { Serial.print(F ("Could not find emergency number in slot:")); Serial.println(slot); } } } 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 charCount = 0; int newSlot = 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", &newSlot)) { Serial.print("New slot: "); Serial.println(slot); // Retrieve SMS sender address/phone number. if (!fona.getSMSSender(newSlot, 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(newSlot); //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 previous slot // 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")); } // set current slot to new message slot = newSlot; } } } 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!")); } }