Example code to do an action based on a received SMS. WARNING: this code has been written in a hurry during an hackathon. It's total crap.

Dependencies:   GPS_CanSat_gen mbed

Example code to do an action based on a received SMS. WARNING: this code has been written in a hurry during an hackathon. It's total crap.

Committer:
gipmad
Date:
Sat Sep 19 14:44:20 2015 +0000
Revision:
0:14bb407a4bdf
-;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gipmad 0:14bb407a4bdf 1 #include "mbed.h"
gipmad 0:14bb407a4bdf 2 #include "GPS.h"
gipmad 0:14bb407a4bdf 3 //#include "gsm.h"
gipmad 0:14bb407a4bdf 4
gipmad 0:14bb407a4bdf 5 Serial pc(SERIAL_TX, SERIAL_RX);
gipmad 0:14bb407a4bdf 6 //v0.2
gipmad 0:14bb407a4bdf 7 Serial GSM(PC_10, PC_11);
gipmad 0:14bb407a4bdf 8 GPS g1(PB_6, PB_7);
gipmad 0:14bb407a4bdf 9
gipmad 0:14bb407a4bdf 10 DigitalOut myled(PB_2);
gipmad 0:14bb407a4bdf 11 DigitalOut GSMsw(PA_15);
gipmad 0:14bb407a4bdf 12
gipmad 0:14bb407a4bdf 13 DigitalOut DET(PB_13);
gipmad 0:14bb407a4bdf 14
gipmad 0:14bb407a4bdf 15
gipmad 0:14bb407a4bdf 16 float LAT;
gipmad 0:14bb407a4bdf 17 float LON;
gipmad 0:14bb407a4bdf 18
gipmad 0:14bb407a4bdf 19
gipmad 0:14bb407a4bdf 20 int flag_gsm_get = 0;
gipmad 0:14bb407a4bdf 21 int flag_gsm_getend = 0;
gipmad 0:14bb407a4bdf 22 int count = 0;
gipmad 0:14bb407a4bdf 23 char msg[128];
gipmad 0:14bb407a4bdf 24
gipmad 0:14bb407a4bdf 25 void getline() {
gipmad 0:14bb407a4bdf 26 char temp;
gipmad 0:14bb407a4bdf 27 temp = GSM.getc();
gipmad 0:14bb407a4bdf 28
gipmad 0:14bb407a4bdf 29 pc.putc(temp);
gipmad 0:14bb407a4bdf 30
gipmad 0:14bb407a4bdf 31 if((temp == '+') || (temp == 'D')){
gipmad 0:14bb407a4bdf 32 flag_gsm_get = 1;
gipmad 0:14bb407a4bdf 33 count = 0;
gipmad 0:14bb407a4bdf 34 }
gipmad 0:14bb407a4bdf 35 if(flag_gsm_get)
gipmad 0:14bb407a4bdf 36 {
gipmad 0:14bb407a4bdf 37 // pc.printf(".%d%c.",count,temp);
gipmad 0:14bb407a4bdf 38
gipmad 0:14bb407a4bdf 39 msg[count] = temp;
gipmad 0:14bb407a4bdf 40 if(temp == '\r'){
gipmad 0:14bb407a4bdf 41 msg[count] = '\0';
gipmad 0:14bb407a4bdf 42 flag_gsm_getend = 1;
gipmad 0:14bb407a4bdf 43 //pc.printf(".%s.",msg);
gipmad 0:14bb407a4bdf 44 flag_gsm_get = 0;
gipmad 0:14bb407a4bdf 45 }
gipmad 0:14bb407a4bdf 46 count ++;
gipmad 0:14bb407a4bdf 47 }
gipmad 0:14bb407a4bdf 48 }
gipmad 0:14bb407a4bdf 49
gipmad 0:14bb407a4bdf 50 int SMSid = -1;
gipmad 0:14bb407a4bdf 51 int Bum = 0;
gipmad 0:14bb407a4bdf 52 void GSMin() {
gipmad 0:14bb407a4bdf 53 getline();
gipmad 0:14bb407a4bdf 54 if(flag_gsm_getend == 1)
gipmad 0:14bb407a4bdf 55 {
gipmad 0:14bb407a4bdf 56 if(sscanf(msg, "+CMTI: \"SM\",%d", &SMSid) >= 1) {
gipmad 0:14bb407a4bdf 57 pc.printf("Got SMS! ID: %d\n", SMSid);
gipmad 0:14bb407a4bdf 58 }
gipmad 0:14bb407a4bdf 59 else if(strstr(msg, "DETONATE") != NULL) {
gipmad 0:14bb407a4bdf 60 pc.printf("Scoppia!\n");
gipmad 0:14bb407a4bdf 61 Bum = 55;
gipmad 0:14bb407a4bdf 62 }
gipmad 0:14bb407a4bdf 63 flag_gsm_getend = 0;
gipmad 0:14bb407a4bdf 64 }
gipmad 0:14bb407a4bdf 65 }
gipmad 0:14bb407a4bdf 66
gipmad 0:14bb407a4bdf 67 int main() {
gipmad 0:14bb407a4bdf 68
gipmad 0:14bb407a4bdf 69 DET = 0;
gipmad 0:14bb407a4bdf 70
gipmad 0:14bb407a4bdf 71 /*while(1)
gipmad 0:14bb407a4bdf 72 {
gipmad 0:14bb407a4bdf 73 DET = 1;
gipmad 0:14bb407a4bdf 74 wait(5);
gipmad 0:14bb407a4bdf 75 DET = 0;
gipmad 0:14bb407a4bdf 76 wait(1);
gipmad 0:14bb407a4bdf 77 }
gipmad 0:14bb407a4bdf 78 */
gipmad 0:14bb407a4bdf 79
gipmad 0:14bb407a4bdf 80
gipmad 0:14bb407a4bdf 81 pc.baud(115200);
gipmad 0:14bb407a4bdf 82 //GPS.baud(9600);
gipmad 0:14bb407a4bdf 83 GSM.baud(115200);
gipmad 0:14bb407a4bdf 84 GSM.attach(&GSMin);
gipmad 0:14bb407a4bdf 85
gipmad 0:14bb407a4bdf 86 int i = 1;
gipmad 0:14bb407a4bdf 87 pc.printf("Hello World !\n");
gipmad 0:14bb407a4bdf 88
gipmad 0:14bb407a4bdf 89 ///INIT
gipmad 0:14bb407a4bdf 90 myled = 1;
gipmad 0:14bb407a4bdf 91 GSMsw = 1;
gipmad 0:14bb407a4bdf 92 wait(15);
gipmad 0:14bb407a4bdf 93 myled = 0;
gipmad 0:14bb407a4bdf 94
gipmad 0:14bb407a4bdf 95 pc.printf("ON\n");
gipmad 0:14bb407a4bdf 96
gipmad 0:14bb407a4bdf 97 //init
gipmad 0:14bb407a4bdf 98 GSM.printf("AT+CMGF=1\n");
gipmad 0:14bb407a4bdf 99 wait(1);
gipmad 0:14bb407a4bdf 100
gipmad 0:14bb407a4bdf 101 while(1) {
gipmad 0:14bb407a4bdf 102
gipmad 0:14bb407a4bdf 103 //if(GSM.readable())
gipmad 0:14bb407a4bdf 104 // pc.putc(GSM.getc());
gipmad 0:14bb407a4bdf 105 if(pc.readable())
gipmad 0:14bb407a4bdf 106 GSM.putc(pc.getc());
gipmad 0:14bb407a4bdf 107
gipmad 0:14bb407a4bdf 108 if(SMSid != -1)
gipmad 0:14bb407a4bdf 109 {
gipmad 0:14bb407a4bdf 110 GSM.printf("AT+CMGR=%d\n",SMSid);
gipmad 0:14bb407a4bdf 111 wait(1);
gipmad 0:14bb407a4bdf 112 GSM.printf("AT+CMGD=%d\n",SMSid);
gipmad 0:14bb407a4bdf 113 wait(1);
gipmad 0:14bb407a4bdf 114 SMSid = -1;
gipmad 0:14bb407a4bdf 115 }
gipmad 0:14bb407a4bdf 116
gipmad 0:14bb407a4bdf 117 if(Bum == 55)
gipmad 0:14bb407a4bdf 118 {
gipmad 0:14bb407a4bdf 119 pc.printf("DETON ON\n");
gipmad 0:14bb407a4bdf 120 myled = 1;
gipmad 0:14bb407a4bdf 121 DET = 1;
gipmad 0:14bb407a4bdf 122 wait(10);
gipmad 0:14bb407a4bdf 123 DET = 0;
gipmad 0:14bb407a4bdf 124 myled = 0;
gipmad 0:14bb407a4bdf 125 Bum = 0;
gipmad 0:14bb407a4bdf 126 }
gipmad 0:14bb407a4bdf 127 /*if(GPS.readable())
gipmad 0:14bb407a4bdf 128 pc.putc(GPS.getc());
gipmad 0:14bb407a4bdf 129 if(pc.readable())
gipmad 0:14bb407a4bdf 130 GPS.putc(pc.getc());*/
gipmad 0:14bb407a4bdf 131
gipmad 0:14bb407a4bdf 132
gipmad 0:14bb407a4bdf 133 /*wait(1);
gipmad 0:14bb407a4bdf 134
gipmad 0:14bb407a4bdf 135 pc.printf("ns: %d\r\n", g1.ns());
gipmad 0:14bb407a4bdf 136 pc.printf("ew: %d\r\n", g1.ew());
gipmad 0:14bb407a4bdf 137 pc.printf("lock: %d\r\n", g1.lock());
gipmad 0:14bb407a4bdf 138 pc.printf("t: %f\r\n", g1.time());
gipmad 0:14bb407a4bdf 139
gipmad 0:14bb407a4bdf 140 if(g1.lock() == 0)
gipmad 0:14bb407a4bdf 141 {
gipmad 0:14bb407a4bdf 142 pc.printf("No fix; faking it...\r\n");
gipmad 0:14bb407a4bdf 143 LAT = 45.564411;
gipmad 0:14bb407a4bdf 144 LON = 12.428018;
gipmad 0:14bb407a4bdf 145 }
gipmad 0:14bb407a4bdf 146 else
gipmad 0:14bb407a4bdf 147 {
gipmad 0:14bb407a4bdf 148 LAT = g1.latitude();
gipmad 0:14bb407a4bdf 149 LON = g1.longitude();
gipmad 0:14bb407a4bdf 150 }
gipmad 0:14bb407a4bdf 151
gipmad 0:14bb407a4bdf 152 pc.printf("lat: %f\r\n", LAT);
gipmad 0:14bb407a4bdf 153 pc.printf("lon: %f\r\n", LON);*/
gipmad 0:14bb407a4bdf 154 }
gipmad 0:14bb407a4bdf 155 }
gipmad 0:14bb407a4bdf 156