h
Dependencies: DebouncedIn mbed
main.cpp
- Committer:
- oscar5233
- Date:
- 2014-12-05
- Revision:
- 0:99755688c5bf
File content as of revision 0:99755688c5bf:
#include "mbed.h" #include "DebouncedIn.h" #include "stdio.h" #include "string.h" #define DEFAULT_TIMEOUT 5 #define SMS_MAX_LENGTH 16 #define MESSAGE_SMS 1 // DECLARACION VARIABLES DigitalOut Led1(LED1); DigitalOut Led2(LED2); DigitalOut Led3(LED3); DebouncedIn button1(PTC12); //señal que inicia el envio del mensaje Serial gprsSerial(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z Serial pc(USBTX,USBRX);//Configura puerto USB a la consola serial del PC conectado. Timer timeCnt; char messageBuffer[SMS_MAX_LENGTH]; ///////// FUNCIONES int readBuffer(char *buffer,int count) { int i = 0; timeCnt.start(); // start timer while(1) { while (gprsSerial.readable()) { char c = gprsSerial.getc(); if (c == '\r' || c == '\n') c = '$'; buffer[i++] = c; if(i > count)break; } if(i > count)break; if(timeCnt.read() > DEFAULT_TIMEOUT) { timeCnt.stop(); timeCnt.reset(); break; } } wait(0.5); while(gprsSerial.readable()) { // display the other thing.. char c = gprsSerial.getc(); } return 0; } void cleanBuffer(char *buffer, int count) { for(int i=0; i < count; i++) { buffer[i] = '\0'; } } void sendCmd(char *cmd) { gprsSerial.puts(cmd); } int waitForResp(char *resp, int timeout) { int len = strlen(resp); int sum=0; timeCnt.start(); while(1) { if(gprsSerial.readable()) { char c = gprsSerial.getc(); sum = (c==resp[sum]) ? sum+1 : 0; if(sum == len)break; } if(timeCnt.read() > timeout) { // time out timeCnt.stop(); timeCnt.reset(); return -1; } } timeCnt.stop(); // stop timer timeCnt.reset(); // clear timer while(gprsSerial.readable()) { // display the other thing.. char c = gprsSerial.getc(); } return 0; } int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout) { sendCmd(cmd); pc.printf("%s\r\n", cmd); return waitForResp(resp,timeout); } int powerCheck(void) { return sendCmdAndWaitForResp("AT\r\n", "OK", 2); } int settingSMS(void) { if(0 != sendCmdAndWaitForResp("AT+CNMI=1,1\r\n", "OK", DEFAULT_TIMEOUT)) { return -1; } if(0 != sendCmdAndWaitForResp("AT+CMGF=0\r\n", "OK", DEFAULT_TIMEOUT)) { return -1; } return 0; } int init(void) { // for(int i = 0; i < 3; i++){ sendCmdAndWaitForResp("AT\r\n", "OK", DEFAULT_TIMEOUT); wait(0.5); // } if(0 != settingSMS()) { return -1; } return 0; } int sendSMS(char *number, char *data) { char cmd[64]; while(gprsSerial.readable()) { char c = gprsSerial.getc(); } //snprintf(cmd, sizeof(cmd),"AT+CMGS=\"%s\"\r\n",number); snprintf(cmd, sizeof(cmd),"AT+CMGS=%s\r\n",number); // ARREGLADO if(0 != sendCmdAndWaitForResp(cmd,">",DEFAULT_TIMEOUT)) { return -1; } wait(1); gprsSerial.puts(data); pc.printf("%s",data); // LO PUSIMOS****** gprsSerial.putc((char)0x1a); return 0; } int readSMS(char *message, int index) { int i = 0; char gprsBuffer[100]; char *p,*s; gprsSerial.printf("AT+CMGR=%d\r\n",index); cleanBuffer(gprsBuffer,100); readBuffer(gprsBuffer,100); if(NULL == ( s = strstr(gprsBuffer,"+CMGR"))) { return -1; } if(NULL != ( s = strstr(gprsBuffer,"+32"))) { p = s + 6; while((*p != '$')&&(i < SMS_MAX_LENGTH-1)) { message[i++] = *(p++); pc.printf("%c",*p); // ARREGLADO***** } message[i] = '\0'; } return 0; } int deleteSMS(int index) { char cmd[32]; snprintf(cmd,sizeof(cmd),"AT+CMGD=%d\r\n",index); sendCmd(cmd); return 0; } int getSMS(char* message) { if(NULL != messageBuffer) { strncpy(message,messageBuffer,SMS_MAX_LENGTH); } return 0; } int loopHandle(void) { char gprsBuffer[100]; int i; char *s = NULL; while(gprsSerial.readable()) { char c = gprsSerial.getc(); } wait(0.5); START: cleanBuffer(gprsBuffer,100); i = 0; while(1) { if(gprsSerial.readable()) { timeCnt.start(); // start timer while(1) { while (gprsSerial.readable()) { char c = gprsSerial.getc(); if (c == '\r' || c == '\n') c = '$'; gprsBuffer[i] = c; pc.printf("%c",gprsBuffer[i]); // NOSOTROS LO PUSIMOS****** i++; if(i > 100) { i = 0; break; } } if(timeCnt.read() > 2) { // time out timeCnt.stop(); timeCnt.reset(); break; } } break; } } if(NULL != (s = strstr(gprsBuffer,"+CMT"))) { //SMS: $$+CMTI: "SM",24$$ if(NULL != (s = strstr(gprsBuffer,"+32"))) { s += 6; int i = 0; cleanBuffer(messageBuffer,SMS_MAX_LENGTH); while((*s != '$')&&(i < SMS_MAX_LENGTH-1)) { messageBuffer[i++] = *(s++); pc.printf("%c",*s); // ARREGLADO***** } messageBuffer[i] = '\0'; return MESSAGE_SMS; } else { goto START; } } else { goto START; } } //////// MAIN int main(){ gprsSerial.baud(9600);//configura los baudios de la FRDMKL25Z en 9600 gprsSerial.format(8,Serial::None,1); //configura el formato de los datos de la UART Led1=Led2=Led3=1; init(); Led1=0; loopHandle(); while(1){ //ENVIAR if (button1.falling()){ Led2=0; //sendSMS("20","0011000A9103218548570000AA08416650DA0C8262"); }//If button1.falling //RECIBIR }//While principal } // Main