h
Dependencies: DebouncedIn mbed
main.cpp@0:99755688c5bf, 2014-12-05 (annotated)
- Committer:
- oscar5233
- Date:
- Fri Dec 05 00:57:57 2014 +0000
- Revision:
- 0:99755688c5bf
k
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
oscar5233 | 0:99755688c5bf | 1 | #include "mbed.h" |
oscar5233 | 0:99755688c5bf | 2 | #include "DebouncedIn.h" |
oscar5233 | 0:99755688c5bf | 3 | #include "stdio.h" |
oscar5233 | 0:99755688c5bf | 4 | #include "string.h" |
oscar5233 | 0:99755688c5bf | 5 | |
oscar5233 | 0:99755688c5bf | 6 | #define DEFAULT_TIMEOUT 5 |
oscar5233 | 0:99755688c5bf | 7 | #define SMS_MAX_LENGTH 16 |
oscar5233 | 0:99755688c5bf | 8 | #define MESSAGE_SMS 1 |
oscar5233 | 0:99755688c5bf | 9 | |
oscar5233 | 0:99755688c5bf | 10 | // DECLARACION VARIABLES |
oscar5233 | 0:99755688c5bf | 11 | DigitalOut Led1(LED1); |
oscar5233 | 0:99755688c5bf | 12 | DigitalOut Led2(LED2); |
oscar5233 | 0:99755688c5bf | 13 | DigitalOut Led3(LED3); |
oscar5233 | 0:99755688c5bf | 14 | DebouncedIn button1(PTC12); //señal que inicia el envio del mensaje |
oscar5233 | 0:99755688c5bf | 15 | Serial gprsSerial(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z |
oscar5233 | 0:99755688c5bf | 16 | Serial pc(USBTX,USBRX);//Configura puerto USB a la consola serial del PC conectado. |
oscar5233 | 0:99755688c5bf | 17 | Timer timeCnt; |
oscar5233 | 0:99755688c5bf | 18 | char messageBuffer[SMS_MAX_LENGTH]; |
oscar5233 | 0:99755688c5bf | 19 | |
oscar5233 | 0:99755688c5bf | 20 | |
oscar5233 | 0:99755688c5bf | 21 | ///////// FUNCIONES |
oscar5233 | 0:99755688c5bf | 22 | |
oscar5233 | 0:99755688c5bf | 23 | int readBuffer(char *buffer,int count) |
oscar5233 | 0:99755688c5bf | 24 | { |
oscar5233 | 0:99755688c5bf | 25 | int i = 0; |
oscar5233 | 0:99755688c5bf | 26 | timeCnt.start(); // start timer |
oscar5233 | 0:99755688c5bf | 27 | while(1) { |
oscar5233 | 0:99755688c5bf | 28 | while (gprsSerial.readable()) { |
oscar5233 | 0:99755688c5bf | 29 | char c = gprsSerial.getc(); |
oscar5233 | 0:99755688c5bf | 30 | if (c == '\r' || c == '\n') c = '$'; |
oscar5233 | 0:99755688c5bf | 31 | buffer[i++] = c; |
oscar5233 | 0:99755688c5bf | 32 | if(i > count)break; |
oscar5233 | 0:99755688c5bf | 33 | } |
oscar5233 | 0:99755688c5bf | 34 | if(i > count)break; |
oscar5233 | 0:99755688c5bf | 35 | if(timeCnt.read() > DEFAULT_TIMEOUT) { |
oscar5233 | 0:99755688c5bf | 36 | timeCnt.stop(); |
oscar5233 | 0:99755688c5bf | 37 | timeCnt.reset(); |
oscar5233 | 0:99755688c5bf | 38 | break; |
oscar5233 | 0:99755688c5bf | 39 | } |
oscar5233 | 0:99755688c5bf | 40 | } |
oscar5233 | 0:99755688c5bf | 41 | wait(0.5); |
oscar5233 | 0:99755688c5bf | 42 | while(gprsSerial.readable()) { // display the other thing.. |
oscar5233 | 0:99755688c5bf | 43 | char c = gprsSerial.getc(); |
oscar5233 | 0:99755688c5bf | 44 | } |
oscar5233 | 0:99755688c5bf | 45 | return 0; |
oscar5233 | 0:99755688c5bf | 46 | } |
oscar5233 | 0:99755688c5bf | 47 | |
oscar5233 | 0:99755688c5bf | 48 | void cleanBuffer(char *buffer, int count) |
oscar5233 | 0:99755688c5bf | 49 | { |
oscar5233 | 0:99755688c5bf | 50 | for(int i=0; i < count; i++) { |
oscar5233 | 0:99755688c5bf | 51 | buffer[i] = '\0'; |
oscar5233 | 0:99755688c5bf | 52 | } |
oscar5233 | 0:99755688c5bf | 53 | } |
oscar5233 | 0:99755688c5bf | 54 | |
oscar5233 | 0:99755688c5bf | 55 | void sendCmd(char *cmd) |
oscar5233 | 0:99755688c5bf | 56 | { |
oscar5233 | 0:99755688c5bf | 57 | gprsSerial.puts(cmd); |
oscar5233 | 0:99755688c5bf | 58 | } |
oscar5233 | 0:99755688c5bf | 59 | |
oscar5233 | 0:99755688c5bf | 60 | int waitForResp(char *resp, int timeout) |
oscar5233 | 0:99755688c5bf | 61 | { |
oscar5233 | 0:99755688c5bf | 62 | int len = strlen(resp); |
oscar5233 | 0:99755688c5bf | 63 | int sum=0; |
oscar5233 | 0:99755688c5bf | 64 | timeCnt.start(); |
oscar5233 | 0:99755688c5bf | 65 | |
oscar5233 | 0:99755688c5bf | 66 | while(1) { |
oscar5233 | 0:99755688c5bf | 67 | if(gprsSerial.readable()) { |
oscar5233 | 0:99755688c5bf | 68 | char c = gprsSerial.getc(); |
oscar5233 | 0:99755688c5bf | 69 | sum = (c==resp[sum]) ? sum+1 : 0; |
oscar5233 | 0:99755688c5bf | 70 | if(sum == len)break; |
oscar5233 | 0:99755688c5bf | 71 | } |
oscar5233 | 0:99755688c5bf | 72 | if(timeCnt.read() > timeout) { // time out |
oscar5233 | 0:99755688c5bf | 73 | timeCnt.stop(); |
oscar5233 | 0:99755688c5bf | 74 | timeCnt.reset(); |
oscar5233 | 0:99755688c5bf | 75 | return -1; |
oscar5233 | 0:99755688c5bf | 76 | } |
oscar5233 | 0:99755688c5bf | 77 | } |
oscar5233 | 0:99755688c5bf | 78 | timeCnt.stop(); // stop timer |
oscar5233 | 0:99755688c5bf | 79 | timeCnt.reset(); // clear timer |
oscar5233 | 0:99755688c5bf | 80 | while(gprsSerial.readable()) { // display the other thing.. |
oscar5233 | 0:99755688c5bf | 81 | char c = gprsSerial.getc(); |
oscar5233 | 0:99755688c5bf | 82 | } |
oscar5233 | 0:99755688c5bf | 83 | |
oscar5233 | 0:99755688c5bf | 84 | return 0; |
oscar5233 | 0:99755688c5bf | 85 | } |
oscar5233 | 0:99755688c5bf | 86 | |
oscar5233 | 0:99755688c5bf | 87 | int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout) |
oscar5233 | 0:99755688c5bf | 88 | { |
oscar5233 | 0:99755688c5bf | 89 | sendCmd(cmd); |
oscar5233 | 0:99755688c5bf | 90 | pc.printf("%s\r\n", cmd); |
oscar5233 | 0:99755688c5bf | 91 | return waitForResp(resp,timeout); |
oscar5233 | 0:99755688c5bf | 92 | } |
oscar5233 | 0:99755688c5bf | 93 | |
oscar5233 | 0:99755688c5bf | 94 | int powerCheck(void) |
oscar5233 | 0:99755688c5bf | 95 | { |
oscar5233 | 0:99755688c5bf | 96 | return sendCmdAndWaitForResp("AT\r\n", "OK", 2); |
oscar5233 | 0:99755688c5bf | 97 | } |
oscar5233 | 0:99755688c5bf | 98 | |
oscar5233 | 0:99755688c5bf | 99 | int settingSMS(void) |
oscar5233 | 0:99755688c5bf | 100 | { |
oscar5233 | 0:99755688c5bf | 101 | if(0 != sendCmdAndWaitForResp("AT+CNMI=1,1\r\n", "OK", DEFAULT_TIMEOUT)) { |
oscar5233 | 0:99755688c5bf | 102 | return -1; |
oscar5233 | 0:99755688c5bf | 103 | } |
oscar5233 | 0:99755688c5bf | 104 | if(0 != sendCmdAndWaitForResp("AT+CMGF=0\r\n", "OK", DEFAULT_TIMEOUT)) { |
oscar5233 | 0:99755688c5bf | 105 | return -1; |
oscar5233 | 0:99755688c5bf | 106 | } |
oscar5233 | 0:99755688c5bf | 107 | return 0; |
oscar5233 | 0:99755688c5bf | 108 | } |
oscar5233 | 0:99755688c5bf | 109 | |
oscar5233 | 0:99755688c5bf | 110 | int init(void) |
oscar5233 | 0:99755688c5bf | 111 | { |
oscar5233 | 0:99755688c5bf | 112 | // for(int i = 0; i < 3; i++){ |
oscar5233 | 0:99755688c5bf | 113 | sendCmdAndWaitForResp("AT\r\n", "OK", DEFAULT_TIMEOUT); |
oscar5233 | 0:99755688c5bf | 114 | wait(0.5); |
oscar5233 | 0:99755688c5bf | 115 | // } |
oscar5233 | 0:99755688c5bf | 116 | |
oscar5233 | 0:99755688c5bf | 117 | if(0 != settingSMS()) { |
oscar5233 | 0:99755688c5bf | 118 | return -1; |
oscar5233 | 0:99755688c5bf | 119 | } |
oscar5233 | 0:99755688c5bf | 120 | return 0; |
oscar5233 | 0:99755688c5bf | 121 | } |
oscar5233 | 0:99755688c5bf | 122 | |
oscar5233 | 0:99755688c5bf | 123 | int sendSMS(char *number, char *data) |
oscar5233 | 0:99755688c5bf | 124 | { |
oscar5233 | 0:99755688c5bf | 125 | char cmd[64]; |
oscar5233 | 0:99755688c5bf | 126 | while(gprsSerial.readable()) { |
oscar5233 | 0:99755688c5bf | 127 | char c = gprsSerial.getc(); |
oscar5233 | 0:99755688c5bf | 128 | } |
oscar5233 | 0:99755688c5bf | 129 | //snprintf(cmd, sizeof(cmd),"AT+CMGS=\"%s\"\r\n",number); |
oscar5233 | 0:99755688c5bf | 130 | snprintf(cmd, sizeof(cmd),"AT+CMGS=%s\r\n",number); // ARREGLADO |
oscar5233 | 0:99755688c5bf | 131 | |
oscar5233 | 0:99755688c5bf | 132 | if(0 != sendCmdAndWaitForResp(cmd,">",DEFAULT_TIMEOUT)) { |
oscar5233 | 0:99755688c5bf | 133 | return -1; |
oscar5233 | 0:99755688c5bf | 134 | } |
oscar5233 | 0:99755688c5bf | 135 | wait(1); |
oscar5233 | 0:99755688c5bf | 136 | gprsSerial.puts(data); |
oscar5233 | 0:99755688c5bf | 137 | pc.printf("%s",data); // LO PUSIMOS****** |
oscar5233 | 0:99755688c5bf | 138 | gprsSerial.putc((char)0x1a); |
oscar5233 | 0:99755688c5bf | 139 | return 0; |
oscar5233 | 0:99755688c5bf | 140 | } |
oscar5233 | 0:99755688c5bf | 141 | |
oscar5233 | 0:99755688c5bf | 142 | int readSMS(char *message, int index) |
oscar5233 | 0:99755688c5bf | 143 | { |
oscar5233 | 0:99755688c5bf | 144 | int i = 0; |
oscar5233 | 0:99755688c5bf | 145 | char gprsBuffer[100]; |
oscar5233 | 0:99755688c5bf | 146 | char *p,*s; |
oscar5233 | 0:99755688c5bf | 147 | gprsSerial.printf("AT+CMGR=%d\r\n",index); |
oscar5233 | 0:99755688c5bf | 148 | cleanBuffer(gprsBuffer,100); |
oscar5233 | 0:99755688c5bf | 149 | readBuffer(gprsBuffer,100); |
oscar5233 | 0:99755688c5bf | 150 | if(NULL == ( s = strstr(gprsBuffer,"+CMGR"))) { |
oscar5233 | 0:99755688c5bf | 151 | return -1; |
oscar5233 | 0:99755688c5bf | 152 | } |
oscar5233 | 0:99755688c5bf | 153 | if(NULL != ( s = strstr(gprsBuffer,"+32"))) { |
oscar5233 | 0:99755688c5bf | 154 | p = s + 6; |
oscar5233 | 0:99755688c5bf | 155 | while((*p != '$')&&(i < SMS_MAX_LENGTH-1)) { |
oscar5233 | 0:99755688c5bf | 156 | message[i++] = *(p++); |
oscar5233 | 0:99755688c5bf | 157 | pc.printf("%c",*p); // ARREGLADO***** |
oscar5233 | 0:99755688c5bf | 158 | } |
oscar5233 | 0:99755688c5bf | 159 | message[i] = '\0'; |
oscar5233 | 0:99755688c5bf | 160 | } |
oscar5233 | 0:99755688c5bf | 161 | return 0; |
oscar5233 | 0:99755688c5bf | 162 | } |
oscar5233 | 0:99755688c5bf | 163 | |
oscar5233 | 0:99755688c5bf | 164 | int deleteSMS(int index) |
oscar5233 | 0:99755688c5bf | 165 | { |
oscar5233 | 0:99755688c5bf | 166 | char cmd[32]; |
oscar5233 | 0:99755688c5bf | 167 | snprintf(cmd,sizeof(cmd),"AT+CMGD=%d\r\n",index); |
oscar5233 | 0:99755688c5bf | 168 | sendCmd(cmd); |
oscar5233 | 0:99755688c5bf | 169 | return 0; |
oscar5233 | 0:99755688c5bf | 170 | } |
oscar5233 | 0:99755688c5bf | 171 | |
oscar5233 | 0:99755688c5bf | 172 | int getSMS(char* message) |
oscar5233 | 0:99755688c5bf | 173 | { |
oscar5233 | 0:99755688c5bf | 174 | if(NULL != messageBuffer) { |
oscar5233 | 0:99755688c5bf | 175 | strncpy(message,messageBuffer,SMS_MAX_LENGTH); |
oscar5233 | 0:99755688c5bf | 176 | } |
oscar5233 | 0:99755688c5bf | 177 | return 0; |
oscar5233 | 0:99755688c5bf | 178 | } |
oscar5233 | 0:99755688c5bf | 179 | |
oscar5233 | 0:99755688c5bf | 180 | int loopHandle(void) |
oscar5233 | 0:99755688c5bf | 181 | { |
oscar5233 | 0:99755688c5bf | 182 | char gprsBuffer[100]; |
oscar5233 | 0:99755688c5bf | 183 | int i; |
oscar5233 | 0:99755688c5bf | 184 | char *s = NULL; |
oscar5233 | 0:99755688c5bf | 185 | while(gprsSerial.readable()) { |
oscar5233 | 0:99755688c5bf | 186 | char c = gprsSerial.getc(); |
oscar5233 | 0:99755688c5bf | 187 | } |
oscar5233 | 0:99755688c5bf | 188 | wait(0.5); |
oscar5233 | 0:99755688c5bf | 189 | START: |
oscar5233 | 0:99755688c5bf | 190 | cleanBuffer(gprsBuffer,100); |
oscar5233 | 0:99755688c5bf | 191 | i = 0; |
oscar5233 | 0:99755688c5bf | 192 | while(1) { |
oscar5233 | 0:99755688c5bf | 193 | if(gprsSerial.readable()) { |
oscar5233 | 0:99755688c5bf | 194 | timeCnt.start(); // start timer |
oscar5233 | 0:99755688c5bf | 195 | while(1) { |
oscar5233 | 0:99755688c5bf | 196 | while (gprsSerial.readable()) { |
oscar5233 | 0:99755688c5bf | 197 | char c = gprsSerial.getc(); |
oscar5233 | 0:99755688c5bf | 198 | if (c == '\r' || c == '\n') c = '$'; |
oscar5233 | 0:99755688c5bf | 199 | gprsBuffer[i] = c; |
oscar5233 | 0:99755688c5bf | 200 | pc.printf("%c",gprsBuffer[i]); // NOSOTROS LO PUSIMOS****** |
oscar5233 | 0:99755688c5bf | 201 | i++; |
oscar5233 | 0:99755688c5bf | 202 | if(i > 100) { |
oscar5233 | 0:99755688c5bf | 203 | i = 0; |
oscar5233 | 0:99755688c5bf | 204 | break; |
oscar5233 | 0:99755688c5bf | 205 | } |
oscar5233 | 0:99755688c5bf | 206 | } |
oscar5233 | 0:99755688c5bf | 207 | if(timeCnt.read() > 2) { // time out |
oscar5233 | 0:99755688c5bf | 208 | timeCnt.stop(); |
oscar5233 | 0:99755688c5bf | 209 | timeCnt.reset(); |
oscar5233 | 0:99755688c5bf | 210 | break; |
oscar5233 | 0:99755688c5bf | 211 | } |
oscar5233 | 0:99755688c5bf | 212 | |
oscar5233 | 0:99755688c5bf | 213 | } |
oscar5233 | 0:99755688c5bf | 214 | break; |
oscar5233 | 0:99755688c5bf | 215 | } |
oscar5233 | 0:99755688c5bf | 216 | } |
oscar5233 | 0:99755688c5bf | 217 | if(NULL != (s = strstr(gprsBuffer,"+CMT"))) { //SMS: $$+CMTI: "SM",24$$ |
oscar5233 | 0:99755688c5bf | 218 | if(NULL != (s = strstr(gprsBuffer,"+32"))) { |
oscar5233 | 0:99755688c5bf | 219 | s += 6; |
oscar5233 | 0:99755688c5bf | 220 | int i = 0; |
oscar5233 | 0:99755688c5bf | 221 | cleanBuffer(messageBuffer,SMS_MAX_LENGTH); |
oscar5233 | 0:99755688c5bf | 222 | while((*s != '$')&&(i < SMS_MAX_LENGTH-1)) { |
oscar5233 | 0:99755688c5bf | 223 | messageBuffer[i++] = *(s++); |
oscar5233 | 0:99755688c5bf | 224 | pc.printf("%c",*s); // ARREGLADO***** |
oscar5233 | 0:99755688c5bf | 225 | } |
oscar5233 | 0:99755688c5bf | 226 | messageBuffer[i] = '\0'; |
oscar5233 | 0:99755688c5bf | 227 | return MESSAGE_SMS; |
oscar5233 | 0:99755688c5bf | 228 | } else { |
oscar5233 | 0:99755688c5bf | 229 | goto START; |
oscar5233 | 0:99755688c5bf | 230 | } |
oscar5233 | 0:99755688c5bf | 231 | } else { |
oscar5233 | 0:99755688c5bf | 232 | goto START; |
oscar5233 | 0:99755688c5bf | 233 | } |
oscar5233 | 0:99755688c5bf | 234 | } |
oscar5233 | 0:99755688c5bf | 235 | |
oscar5233 | 0:99755688c5bf | 236 | //////// MAIN |
oscar5233 | 0:99755688c5bf | 237 | |
oscar5233 | 0:99755688c5bf | 238 | int main(){ |
oscar5233 | 0:99755688c5bf | 239 | |
oscar5233 | 0:99755688c5bf | 240 | gprsSerial.baud(9600);//configura los baudios de la FRDMKL25Z en 9600 |
oscar5233 | 0:99755688c5bf | 241 | gprsSerial.format(8,Serial::None,1); //configura el formato de los datos de la UART |
oscar5233 | 0:99755688c5bf | 242 | |
oscar5233 | 0:99755688c5bf | 243 | Led1=Led2=Led3=1; |
oscar5233 | 0:99755688c5bf | 244 | |
oscar5233 | 0:99755688c5bf | 245 | init(); |
oscar5233 | 0:99755688c5bf | 246 | Led1=0; |
oscar5233 | 0:99755688c5bf | 247 | |
oscar5233 | 0:99755688c5bf | 248 | loopHandle(); |
oscar5233 | 0:99755688c5bf | 249 | |
oscar5233 | 0:99755688c5bf | 250 | |
oscar5233 | 0:99755688c5bf | 251 | while(1){ |
oscar5233 | 0:99755688c5bf | 252 | |
oscar5233 | 0:99755688c5bf | 253 | //ENVIAR |
oscar5233 | 0:99755688c5bf | 254 | |
oscar5233 | 0:99755688c5bf | 255 | if (button1.falling()){ |
oscar5233 | 0:99755688c5bf | 256 | |
oscar5233 | 0:99755688c5bf | 257 | Led2=0; |
oscar5233 | 0:99755688c5bf | 258 | //sendSMS("20","0011000A9103218548570000AA08416650DA0C8262"); |
oscar5233 | 0:99755688c5bf | 259 | |
oscar5233 | 0:99755688c5bf | 260 | }//If button1.falling |
oscar5233 | 0:99755688c5bf | 261 | |
oscar5233 | 0:99755688c5bf | 262 | //RECIBIR |
oscar5233 | 0:99755688c5bf | 263 | |
oscar5233 | 0:99755688c5bf | 264 | |
oscar5233 | 0:99755688c5bf | 265 | |
oscar5233 | 0:99755688c5bf | 266 | }//While principal |
oscar5233 | 0:99755688c5bf | 267 | } // Main |
oscar5233 | 0:99755688c5bf | 268 | |
oscar5233 | 0:99755688c5bf | 269 |