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.
main.cpp@0:14bb407a4bdf, 2015-09-19 (annotated)
- Committer:
- gipmad
- Date:
- Sat Sep 19 14:44:20 2015 +0000
- Revision:
- 0:14bb407a4bdf
-;
Who changed what in which revision?
User | Revision | Line number | New 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 |