h

Dependencies:   DebouncedIn mbed

Committer:
oscar5233
Date:
Fri Dec 05 00:57:57 2014 +0000
Revision:
0:99755688c5bf
k

Who changed what in which revision?

UserRevisionLine numberNew 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