+ Este programa funciona con el modem GSM en un celular SIEMENS A56i. + Reconoce el mensaje 'Voltaje' y devuelve un mensaje a un numero especificado el voltaje sensado en PTB0 (ADC). + Reconoce el mensaje 'Pwm####' siendo #### un valor entre 0000 y 1000 y activa la salida PWM PTE20 con su ciclo de dureza en este rango. + El conector se distingue asi: - Cable verde es RX conectelo a PTE0. - Cable blanco es TX conectelo a PTE1.

Dependencies:   mbed

Fork of ALARMA_FINCA_GSM7 by Gustavo Ramirez

Committer:
robinal
Date:
Fri Dec 01 15:21:43 2017 +0000
Revision:
3:b4f539697a46
Parent:
2:b249143245d8
+ Este programa funciona con el modem GSM en un celular SIEMENS A56i.;     + Reconoce el mensaje 'Voltaje' y devuelve un mensaje a un numero ;       especificado el voltaje sensado en PTB0 (ADC).;     + Reconoce el mensaje 'Pwm####' siendo #### un valor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
robinal 2:b249143245d8 1 /*
robinal 2:b249143245d8 2 + Este programa funciona con el modem GSM en un celular SIEMENS A56i.
robinal 2:b249143245d8 3 + Reconoce el mensaje 'Voltaje' y devuelve un mensaje a un numero
robinal 2:b249143245d8 4 especificado el voltaje sensado en PTB0 (ADC).
robinal 2:b249143245d8 5 + Reconoce el mensaje 'Pwm####' siendo #### un valor entre 0000 y 1000 y
robinal 2:b249143245d8 6 activa la salida PWM PTE20 con su ciclo de dureza en este rango.
robinal 2:b249143245d8 7 + El conector se distingue asi:
robinal 2:b249143245d8 8 - Cable verde es RX conectelo a PTE0.
robinal 2:b249143245d8 9 - Cable blanco es TX conectelo a PTE1.
robinal 2:b249143245d8 10
robinal 2:b249143245d8 11 + Realizado por: Carolina Velez Castaño
robinal 2:b249143245d8 12 Daniel Sebastian Múnera Toro
robinal 2:b249143245d8 13 Robinson Sneider Álvarez Valle
robinal 2:b249143245d8 14
robinal 2:b249143245d8 15 + Universidad Nacional de Colombia sede Medellín
tony63 0:f7aa7972da4d 16 */
tony63 0:f7aa7972da4d 17
tony63 0:f7aa7972da4d 18 #include "mbed.h"
tony63 0:f7aa7972da4d 19 #include "stdio.h"
tony63 0:f7aa7972da4d 20 #include "string.h"
robinal 2:b249143245d8 21 #include <math.h>
tony63 0:f7aa7972da4d 22
tony63 0:f7aa7972da4d 23 int i,ret;
robinal 2:b249143245d8 24 int K,C,LENOUT,LENIN,LENOUT1, LENIN1, LENOUT2, LENIN2, ind;
tony63 0:f7aa7972da4d 25 Timer t;
robinal 2:b249143245d8 26
robinal 2:b249143245d8 27 DigitalOut LedRojo(LED1,1);
robinal 2:b249143245d8 28 DigitalOut LedVerde(LED2,1);
robinal 2:b249143245d8 29 DigitalOut LedAzul(LED3,1);
robinal 2:b249143245d8 30
tony63 0:f7aa7972da4d 31 Serial GSM(PTE0,PTE1); //Configura puerto UART de la FRDMKL25Z
tony63 0:f7aa7972da4d 32 Serial pc(USBTX,USBRX);//Configura puerto USB a la consola serial del PC conectado.
robinal 2:b249143245d8 33
robinal 2:b249143245d8 34 AnalogIn input0(PTB0);
robinal 2:b249143245d8 35 PwmOut pwm0(PTE20);
robinal 2:b249143245d8 36
robinal 2:b249143245d8 37 char msg[15];
robinal 2:b249143245d8 38 char msg0[13];
robinal 2:b249143245d8 39 char msg1[7];
robinal 2:b249143245d8 40 char msg2[9];
robinal 2:b249143245d8 41 char analogStr[20];
robinal 2:b249143245d8 42 char gs[20];
robinal 2:b249143245d8 43 char input0_char[10];
robinal 2:b249143245d8 44
robinal 2:b249143245d8 45 char DE1[255];
robinal 2:b249143245d8 46 char DS1[255];
robinal 2:b249143245d8 47 char DE2[255];
robinal 2:b249143245d8 48 char DS2[255];
robinal 2:b249143245d8 49 char buffer[512];
tony63 1:9dc429267e43 50 char resp[6];
robinal 2:b249143245d8 51 char tam[2];
robinal 2:b249143245d8 52 char mensaje[100];
robinal 2:b249143245d8 53 char buf[100];
robinal 2:b249143245d8 54
robinal 2:b249143245d8 55 char tel[10] = {'0','3','3','5','4','5','2','1','5','8'};
robinal 2:b249143245d8 56 char relle1[10] = {'0','0','1','1','0','0','0','A','9','1'};
robinal 2:b249143245d8 57 char relle2[6] = {'0','0','0','0','A','A'};
robinal 2:b249143245d8 58 char message[] = "0011000A9103354521580000AA03";
robinal 2:b249143245d8 59
robinal 2:b249143245d8 60 //******************************FUNCIONES EN C**********************************
robinal 2:b249143245d8 61
robinal 2:b249143245d8 62 /*******************************************************************************
robinal 2:b249143245d8 63 Funciones para el formato PDU
robinal 2:b249143245d8 64 *******************************************************************************/
robinal 2:b249143245d8 65
robinal 2:b249143245d8 66 /*******************************************************************************
robinal 2:b249143245d8 67 Lee todo un bufer hasta encontrar CR o LF y el resto lo rellena de '$',
robinal 2:b249143245d8 68 count es lo que va a leer; Lo leido lo mete en buffer que es una cadena
robinal 2:b249143245d8 69 previamente definida incorpora medida de tiempo si se demora mas de tres
robinal 2:b249143245d8 70 segundos retorna fracaso con -1
robinal 2:b249143245d8 71 *******************************************************************************/
robinal 2:b249143245d8 72 int readBuffer(char *buffer,int count){
tony63 0:f7aa7972da4d 73 int i=0;
tony63 0:f7aa7972da4d 74 t.start(); // start timer
tony63 0:f7aa7972da4d 75 while(1) {
tony63 0:f7aa7972da4d 76 while (GSM.readable()) {
tony63 0:f7aa7972da4d 77 char c = GSM.getc();
tony63 0:f7aa7972da4d 78 if (c == '\r' || c == '\n') c = '$';
tony63 0:f7aa7972da4d 79 buffer[i++] = c;
tony63 0:f7aa7972da4d 80 if(i > count)break;
tony63 0:f7aa7972da4d 81 }
tony63 0:f7aa7972da4d 82 if(i > count)break;
tony63 1:9dc429267e43 83 if(t.read() > 5) {
tony63 0:f7aa7972da4d 84 t.stop();
tony63 0:f7aa7972da4d 85 t.reset();
tony63 0:f7aa7972da4d 86 break;
tony63 0:f7aa7972da4d 87 }
tony63 0:f7aa7972da4d 88 }
tony63 0:f7aa7972da4d 89 wait(0.5);
tony63 0:f7aa7972da4d 90 while(GSM.readable()) { // display the other thing..
tony63 0:f7aa7972da4d 91 char c = GSM.getc();
tony63 0:f7aa7972da4d 92 }
tony63 0:f7aa7972da4d 93 return 0;
tony63 0:f7aa7972da4d 94 }
robinal 2:b249143245d8 95
robinal 2:b249143245d8 96
robinal 2:b249143245d8 97 /*******************************************************************************
robinal 2:b249143245d8 98 Limpia o borra todo un "buffer" de tamaño "count" lo revisa elemento por
robinal 2:b249143245d8 99 elemento y le mete el caracter null que indica fin de cadena no retorna nada
robinal 2:b249143245d8 100 *******************************************************************************/
robinal 2:b249143245d8 101 void cleanBuffer(char *buffer, int count){
tony63 0:f7aa7972da4d 102 for(int i=0; i < count; i++) {
tony63 1:9dc429267e43 103 buffer[i] = 0;
tony63 0:f7aa7972da4d 104 }
tony63 0:f7aa7972da4d 105 }
robinal 2:b249143245d8 106
robinal 2:b249143245d8 107 /*******************************************************************************
robinal 2:b249143245d8 108 Envia un comando parametrizado como cadena puede ser un comando tipo AT
robinal 2:b249143245d8 109 *******************************************************************************/
robinal 2:b249143245d8 110 void sendCmd(char *cmd){
tony63 0:f7aa7972da4d 111 GSM.puts(cmd);
tony63 0:f7aa7972da4d 112 }
robinal 2:b249143245d8 113
robinal 2:b249143245d8 114 /*******************************************************************************
robinal 2:b249143245d8 115 Espera la respuesta de un comando que debe ser identica a la cadena "resp" y
robinal 2:b249143245d8 116 un tiempo 'timeout' si todo sale bien retorna un cero que en la programacion
robinal 2:b249143245d8 117 hay que validar si algo sale mal (no se parece o se demora mucho) retorna -1
robinal 2:b249143245d8 118 que debera validarse con alguna expresion logica
robinal 2:b249143245d8 119 *******************************************************************************/
robinal 2:b249143245d8 120 int waitForResp(char *resp, int timeout){
tony63 0:f7aa7972da4d 121 int len = strlen(resp);
tony63 0:f7aa7972da4d 122 int sum=0;
tony63 0:f7aa7972da4d 123 t.start();
tony63 0:f7aa7972da4d 124
tony63 0:f7aa7972da4d 125 while(1) {
tony63 0:f7aa7972da4d 126 if(GSM.readable()) {
tony63 0:f7aa7972da4d 127 char c = GSM.getc();
tony63 0:f7aa7972da4d 128 sum = (c==resp[sum]) ? sum+1 : 0;// esta linea de C# sum se incrementa o se hace cero segun c
tony63 0:f7aa7972da4d 129 if(sum == len)break; //ya acabo se sale
tony63 0:f7aa7972da4d 130 }
tony63 0:f7aa7972da4d 131 if(t.read() > timeout) { // time out chequea el tiempo minimo antes de salir perdiendo
tony63 0:f7aa7972da4d 132 t.stop();
tony63 0:f7aa7972da4d 133 t.reset();
tony63 0:f7aa7972da4d 134 return -1;
tony63 0:f7aa7972da4d 135 }
tony63 0:f7aa7972da4d 136 }
tony63 0:f7aa7972da4d 137 t.stop(); // stop timer antes de retornar
tony63 0:f7aa7972da4d 138 t.reset(); // clear timer
tony63 0:f7aa7972da4d 139 while(GSM.readable()) { // display the other thing..
tony63 0:f7aa7972da4d 140 char c = GSM.getc();
tony63 0:f7aa7972da4d 141 }
tony63 0:f7aa7972da4d 142
tony63 0:f7aa7972da4d 143 return 0;
tony63 0:f7aa7972da4d 144 }
robinal 2:b249143245d8 145
robinal 2:b249143245d8 146 /*******************************************************************************
robinal 2:b249143245d8 147 Se encarga de enviar el comando y esperar la respuesta si todo sale bien
robinal 2:b249143245d8 148 retorna un cero(herencia de las funciones contenedoras) que en la
robinal 2:b249143245d8 149 programacion hay que validar con alguna expresion logica
robinal 2:b249143245d8 150 *******************************************************************************/
robinal 2:b249143245d8 151 int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout){
tony63 0:f7aa7972da4d 152 sendCmd(cmd);
tony63 0:f7aa7972da4d 153 return waitForResp(resp,timeout);
tony63 0:f7aa7972da4d 154 }
robinal 2:b249143245d8 155
robinal 2:b249143245d8 156 /*******************************************************************************
robinal 2:b249143245d8 157 Chequea que el modem este vivo envia AT y le contesta con OK y espera 2
robinal 2:b249143245d8 158 segundos
robinal 2:b249143245d8 159 *******************************************************************************/
robinal 2:b249143245d8 160 int powerCheck(void){
tony63 0:f7aa7972da4d 161 return sendCmdAndWaitForResp("AT\r\n", "OK", 2);
tony63 0:f7aa7972da4d 162 }
tony63 0:f7aa7972da4d 163
robinal 2:b249143245d8 164 /*******************************************************************************
robinal 2:b249143245d8 165 Chequea el estado de la sim card y si todo sale bien retorna un cero que en
robinal 2:b249143245d8 166 la programacion hay que validar con alguna expresion logica
robinal 2:b249143245d8 167 *******************************************************************************/
robinal 2:b249143245d8 168 int checkSIMStatus(void){
tony63 0:f7aa7972da4d 169 char gprsBuffer[30];
tony63 0:f7aa7972da4d 170 int count = 0;
tony63 0:f7aa7972da4d 171 cleanBuffer(gprsBuffer,30);
tony63 0:f7aa7972da4d 172 while(count < 3) {
tony63 0:f7aa7972da4d 173 sendCmd("AT+CPIN?\r\n");
tony63 0:f7aa7972da4d 174 readBuffer(gprsBuffer,30);
tony63 0:f7aa7972da4d 175 if((NULL != strstr(gprsBuffer,"+CPIN: READY"))) {
tony63 0:f7aa7972da4d 176 break;
tony63 0:f7aa7972da4d 177 }
tony63 0:f7aa7972da4d 178 count++;
tony63 0:f7aa7972da4d 179 wait(1);
tony63 0:f7aa7972da4d 180 }
tony63 0:f7aa7972da4d 181
tony63 0:f7aa7972da4d 182 if(count == 3) {
tony63 0:f7aa7972da4d 183 return -1;
tony63 0:f7aa7972da4d 184 }
tony63 0:f7aa7972da4d 185 return 0;
tony63 0:f7aa7972da4d 186 }
robinal 2:b249143245d8 187
robinal 2:b249143245d8 188 /*******************************************************************************
robinal 2:b249143245d8 189 Chequea la calidad de la señal y si todo sale bien retorna con el valor de
robinal 2:b249143245d8 190 señal util o un -1 si no es aceptable, en la programacion hay que validar
robinal 2:b249143245d8 191 con alguna expresion logica
robinal 2:b249143245d8 192 *******************************************************************************/
robinal 2:b249143245d8 193 int checkSignalStrength(void){
tony63 0:f7aa7972da4d 194 char gprsBuffer[100];
tony63 0:f7aa7972da4d 195 int index,count = 0;
tony63 0:f7aa7972da4d 196 cleanBuffer(gprsBuffer,100);
tony63 0:f7aa7972da4d 197 while(count < 3) {
tony63 0:f7aa7972da4d 198 sendCmd("AT+CSQ\r\n");
tony63 0:f7aa7972da4d 199 readBuffer(gprsBuffer,25);
tony63 0:f7aa7972da4d 200 if(sscanf(gprsBuffer, "AT+CSQ$$$$+CSQ: %d", &index)>0) {
tony63 0:f7aa7972da4d 201 break;
tony63 0:f7aa7972da4d 202 }
tony63 0:f7aa7972da4d 203 count++;
tony63 0:f7aa7972da4d 204 wait(1);
tony63 0:f7aa7972da4d 205 }
tony63 0:f7aa7972da4d 206 if(count == 3) {
tony63 0:f7aa7972da4d 207 return -1;
tony63 0:f7aa7972da4d 208 }
tony63 0:f7aa7972da4d 209 return index;
tony63 0:f7aa7972da4d 210 }
tony63 0:f7aa7972da4d 211
robinal 2:b249143245d8 212 /*******************************************************************************
robinal 2:b249143245d8 213 Inicializa el modem
robinal 2:b249143245d8 214 *******************************************************************************/
robinal 2:b249143245d8 215 int init(){
tony63 0:f7aa7972da4d 216 if (0 != sendCmdAndWaitForResp("AT\r\n", "OK", 5)){
tony63 0:f7aa7972da4d 217 return -1;
robinal 2:b249143245d8 218 }
tony63 0:f7aa7972da4d 219 if (0 != sendCmdAndWaitForResp("AT+CNMI=1,1\r\n", "OK", 5)){
tony63 0:f7aa7972da4d 220 return -1;
robinal 2:b249143245d8 221 }
tony63 0:f7aa7972da4d 222 if (0 != sendCmdAndWaitForResp("AT+CMGF=0\r\n", "OK", 5)){
tony63 0:f7aa7972da4d 223 return -1;
robinal 2:b249143245d8 224 }
tony63 0:f7aa7972da4d 225 if (0 != sendCmdAndWaitForResp("AT+CBST=0,0,1\r\n", "OK", 5)){
tony63 0:f7aa7972da4d 226 return -1;
robinal 2:b249143245d8 227 }
robinal 2:b249143245d8 228 return 0;
robinal 2:b249143245d8 229 }
robinal 2:b249143245d8 230
robinal 2:b249143245d8 231
robinal 2:b249143245d8 232 /*******************************************************************************
robinal 2:b249143245d8 233 Funciones para el manejo de las cadenas
robinal 2:b249143245d8 234 *******************************************************************************/
robinal 2:b249143245d8 235
robinal 2:b249143245d8 236 /*******************************************************************************
robinal 2:b249143245d8 237 Pasa de septetos a octetos
robinal 2:b249143245d8 238 *******************************************************************************/
robinal 2:b249143245d8 239 void SepToOct(char *DE, char *DS){
robinal 2:b249143245d8 240 LENIN = strlen(DE); // Se mide el tamaño de la cadena de entrada
robinal 2:b249143245d8 241 int K=0;int C=0; int i=0;
robinal 2:b249143245d8 242 for (i=0;i < LENIN;i++){
robinal 2:b249143245d8 243 DS[i]=DE[i+C]>>K | DE[i+C+1]<<(7-K);
robinal 2:b249143245d8 244 if (DS[i]==0x00) {LENOUT=i; goto salir99;} // Fin de la transformacion
robinal 2:b249143245d8 245 K++;
robinal 2:b249143245d8 246 if (K==7) {K=0;C++;} // Se chequea que ya se acabaron los bits en un ciclo de conversion.
robinal 2:b249143245d8 247 }
robinal 2:b249143245d8 248 salir99:
robinal 2:b249143245d8 249 for (i=0;i<LENOUT;i++){
robinal 2:b249143245d8 250 DS[i]=DS[i]&0x000000FF;
tony63 0:f7aa7972da4d 251 }
robinal 2:b249143245d8 252 return;
robinal 2:b249143245d8 253 }
tony63 0:f7aa7972da4d 254
robinal 2:b249143245d8 255 /*******************************************************************************
robinal 2:b249143245d8 256 Pasa de octetos a septetos
robinal 2:b249143245d8 257 *******************************************************************************/
robinal 2:b249143245d8 258 void OctToSep(char *DE, char *DS){
robinal 2:b249143245d8 259 int LENIN = strlen(DE);
robinal 2:b249143245d8 260 int LENOUT = LENIN*8/7;
robinal 2:b249143245d8 261 K = 7;
robinal 2:b249143245d8 262 C = 0;
robinal 2:b249143245d8 263 DS[0] = DE[0] & 0x7F; // la primera sola
robinal 2:b249143245d8 264 for (i=1;i < LENOUT;i++){ // inicia el algoritmo
robinal 2:b249143245d8 265 DS[i]=(DE[i-1-C]>>K | DE[i-C]<<(8-K))& 0x7F; //valido para todos
robinal 2:b249143245d8 266 if (K==0) {K=8;C++;}
robinal 2:b249143245d8 267 K--;
robinal 2:b249143245d8 268 }
robinal 2:b249143245d8 269 return;
robinal 2:b249143245d8 270 }
robinal 2:b249143245d8 271
robinal 2:b249143245d8 272 //*****************SE INICIA EL PROGRAMA PRINCIPAL******************************
robinal 2:b249143245d8 273 int main(){
robinal 2:b249143245d8 274 LedRojo = 0;
robinal 2:b249143245d8 275 LedVerde = 1;
robinal 2:b249143245d8 276 LedAzul = 1;
robinal 2:b249143245d8 277
robinal 2:b249143245d8 278 pwm0 = 0;
tony63 0:f7aa7972da4d 279
robinal 2:b249143245d8 280 //****************CONFIGURAMOS EL MODEM GSM (TELEFONO CELULAR SIEMENS A56i)
robinal 2:b249143245d8 281 inicio1:
tony63 0:f7aa7972da4d 282 ret = init();
tony63 0:f7aa7972da4d 283 if(ret==0){
robinal 2:b249143245d8 284 LedRojo = 1;
robinal 2:b249143245d8 285 LedVerde = 0;
robinal 2:b249143245d8 286 LedAzul = 1;
tony63 0:f7aa7972da4d 287 }
tony63 0:f7aa7972da4d 288 else{
robinal 2:b249143245d8 289 wait(5);
robinal 2:b249143245d8 290 goto inicio1;
tony63 0:f7aa7972da4d 291 }
robinal 2:b249143245d8 292
robinal 2:b249143245d8 293 while(1){
robinal 2:b249143245d8 294 // Inicia la recepcion de un mensaje de texto
robinal 2:b249143245d8 295 if (GSM.readable()){
tony63 1:9dc429267e43 296 readBuffer(buffer,6);
tony63 0:f7aa7972da4d 297 pc.printf("%s\r\n",buffer);
robinal 2:b249143245d8 298 for(i=0;i<5;i++){
robinal 2:b249143245d8 299 resp[i]=buffer[i];
tony63 0:f7aa7972da4d 300 }
tony63 0:f7aa7972da4d 301 pc.printf("%s\r\n",resp);
robinal 2:b249143245d8 302 if(strcmp("$$+CM",resp) == 0){ // Compara respuesta con "+CMTI"
robinal 2:b249143245d8 303 pc.printf("Llego MSG\r\n");
tony63 1:9dc429267e43 304 cleanBuffer(buffer,6);
robinal 2:b249143245d8 305 GSM.printf("AT+CMGL=0"); // Envio comando para leer mensaje
robinal 2:b249143245d8 306 GSM.putc(0x0D); // Envio de caracterer \n
tony63 0:f7aa7972da4d 307 pc.printf("AT+CMGL=0\r\n");
robinal 2:b249143245d8 308 loop1:
robinal 2:b249143245d8 309 if (GSM.readable()){
tony63 1:9dc429267e43 310 readBuffer(buffer,100);
tony63 1:9dc429267e43 311 pc.printf("%s\r\n",buffer);
tony63 1:9dc429267e43 312 goto seguir1;
robinal 2:b249143245d8 313 }
robinal 2:b249143245d8 314 goto loop1;
robinal 2:b249143245d8 315 seguir1:
robinal 2:b249143245d8 316 //leer telefono
robinal 2:b249143245d8 317 for(i=0;i<10;i++){
robinal 2:b249143245d8 318 tel[i]=buffer[i+50];
robinal 2:b249143245d8 319 }
robinal 2:b249143245d8 320 pc.printf("%s-\r\n",tel);
robinal 2:b249143245d8 321
robinal 2:b249143245d8 322 // Leer tamaño
robinal 2:b249143245d8 323 for(i=0;i<2;i++){
robinal 2:b249143245d8 324 tam[i]=buffer[i+78];
robinal 2:b249143245d8 325 }
robinal 2:b249143245d8 326 pc.printf("%s-\r\n",tam);
robinal 2:b249143245d8 327
robinal 2:b249143245d8 328 // Leer mensaje
robinal 2:b249143245d8 329 for(i=0;i<14;i++){
robinal 2:b249143245d8 330 msg[i]=buffer[i+80];
robinal 2:b249143245d8 331 }
robinal 2:b249143245d8 332 pc.printf("%s-\r\n",msg);
robinal 2:b249143245d8 333
robinal 2:b249143245d8 334 // Dividir mensaje, facilita comparación de tramas
robinal 2:b249143245d8 335 for(i=0;i<12;i++){ // Solo guarda 12 posiciones del
robinal 2:b249143245d8 336 msg0[i]=buffer[i+80];; // mensaje porque los ultimos dos
robinal 2:b249143245d8 337 } // caracteres pueden dañar la
robinal 2:b249143245d8 338 pc.printf("%s-\r\n",msg0); // comparación por los cambios del
robinal 2:b249143245d8 339 // operador.
robinal 2:b249143245d8 340 for(i=0;i<6;i++){
robinal 2:b249143245d8 341 msg1[i]=buffer[i+80];;
robinal 2:b249143245d8 342 }
robinal 2:b249143245d8 343 pc.printf("%s-\r\n",msg1);
robinal 2:b249143245d8 344 for(i=0;i<8;i++){
robinal 2:b249143245d8 345 msg2[i]=buffer[i+86];;
robinal 2:b249143245d8 346 }
robinal 2:b249143245d8 347 pc.printf("%s-\r\n",msg2);
robinal 2:b249143245d8 348
robinal 2:b249143245d8 349 GSM.printf("AT+CMGD=0"); // Envio comando para borrar mensaje
robinal 2:b249143245d8 350 GSM.putc(0x0D); // Envio de caracter \n
robinal 2:b249143245d8 351 wait(1);
robinal 2:b249143245d8 352 GSM.printf("AT+CMGD=1"); // Envio comando para borrar mensaje
robinal 2:b249143245d8 353 GSM.putc(0x0D); // Envio de caracter \n
robinal 2:b249143245d8 354 wait(1);
robinal 2:b249143245d8 355
robinal 2:b249143245d8 356 // Comparar mensaje
robinal 2:b249143245d8 357 /*
robinal 2:b249143245d8 358 Cadenas compara 'Voltaje'
robinal 2:b249143245d8 359 D6379B1E569701
robinal 2:b249143245d8 360 D6379B1E56971B
robinal 2:b249143245d8 361 */
robinal 2:b249143245d8 362 if(strcmp("D6379B1E5697",msg0) == 0){ // Compara con "Voltaje"
robinal 2:b249143245d8 363 LedRojo = 1;
robinal 2:b249143245d8 364 LedVerde = 1;
robinal 2:b249143245d8 365 LedAzul = 0;
robinal 2:b249143245d8 366
robinal 2:b249143245d8 367 sprintf(input0_char,"%.2f",input0.read()*3.3);
robinal 2:b249143245d8 368 cleanBuffer(gs,20);
robinal 2:b249143245d8 369 SepToOct(input0_char,gs);
robinal 2:b249143245d8 370 //pc.printf("%s\n",input0_char);
robinal 2:b249143245d8 371
robinal 2:b249143245d8 372 // Envio del mensaje
robinal 2:b249143245d8 373 GSM.printf("AT+CMGS=16\n\r");
robinal 2:b249143245d8 374 wait_ms(200);
robinal 2:b249143245d8 375 GSM.printf(message); // Imprime cabecera
robinal 2:b249143245d8 376 for (i=0;i<3;i++){
robinal 2:b249143245d8 377 GSM.printf("%2X",gs[i]&0x000000FF); // Imprime conversión
tony63 1:9dc429267e43 378 }
robinal 2:b249143245d8 379 wait_ms(200);
robinal 2:b249143245d8 380 GSM.putc((char)0x1A);
robinal 2:b249143245d8 381 wait(10);
robinal 2:b249143245d8 382
robinal 2:b249143245d8 383 ///si el operador contesta con mensaje borrar de nuevo
robinal 2:b249143245d8 384 GSM.printf("AT+CMGD=0");//envio comando para borrar mensaje
robinal 2:b249143245d8 385 GSM.putc(0x0D); //envio de caracter \n
robinal 2:b249143245d8 386 wait(1);
robinal 2:b249143245d8 387 GSM.printf("AT+CMGD=1");//envio comando para borrar mensaje
robinal 2:b249143245d8 388 GSM.putc(0x0D); //envio de caracter \n
robinal 2:b249143245d8 389 wait(1);
robinal 2:b249143245d8 390
robinal 2:b249143245d8 391 //wait(5);
robinal 2:b249143245d8 392 LedRojo = 1;
robinal 2:b249143245d8 393 LedVerde = 0;
robinal 2:b249143245d8 394 LedAzul = 1;
tony63 0:f7aa7972da4d 395 }
robinal 2:b249143245d8 396
robinal 2:b249143245d8 397 /*
robinal 2:b249143245d8 398 Cadenas compara 'Pwm000'
robinal 2:b249143245d8 399 D07B1B0683C100
robinal 2:b249143245d8 400 D07B1B0683C11A
robinal 2:b249143245d8 401 */
robinal 2:b249143245d8 402 if(strcmp("D07B1B",msg1) == 0){ // Compara con "Pwm"
robinal 2:b249143245d8 403 cleanBuffer(gs,20);
robinal 2:b249143245d8 404 OctToSep(msg2,gs);
robinal 2:b249143245d8 405
robinal 2:b249143245d8 406 pwm0 = gs[0]/100.0;
robinal 2:b249143245d8 407
robinal 2:b249143245d8 408 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 409 wait(1);
robinal 2:b249143245d8 410 LedRojo = 1; LedVerde = 1; LedAzul = 1;
robinal 2:b249143245d8 411 wait(1);
robinal 2:b249143245d8 412 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 413 wait(1);
robinal 2:b249143245d8 414 LedRojo = 1; LedVerde = 1; LedAzul = 1;
robinal 2:b249143245d8 415 wait(1);
robinal 2:b249143245d8 416 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 417 wait(1);
robinal 2:b249143245d8 418 LedRojo = 1; LedVerde = 1; LedAzul = 1;
robinal 2:b249143245d8 419 wait(1);
robinal 2:b249143245d8 420 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 421 wait(1);
robinal 2:b249143245d8 422 LedRojo = 1; LedVerde = 1; LedAzul = 1;
robinal 2:b249143245d8 423 wait(1);
robinal 2:b249143245d8 424 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 425 wait(1);
robinal 2:b249143245d8 426 LedRojo = 1; LedVerde = 0; LedAzul = 1;
robinal 2:b249143245d8 427 }
robinal 2:b249143245d8 428
robinal 2:b249143245d8 429 if(strcmp("D07B3B",msg1) == 0){ // Compara con "Pwm1000"
robinal 2:b249143245d8 430 pwm0 = 1;
robinal 2:b249143245d8 431
robinal 2:b249143245d8 432 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 433 wait(.5);
robinal 2:b249143245d8 434 LedRojo = 1; LedVerde = 1; LedAzul = 1;
robinal 2:b249143245d8 435 wait(.5);
robinal 2:b249143245d8 436 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 437 wait(.5);
robinal 2:b249143245d8 438 LedRojo = 1; LedVerde = 1; LedAzul = 1;
robinal 2:b249143245d8 439 wait(.5);
robinal 2:b249143245d8 440 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 441 wait(.5);
robinal 2:b249143245d8 442 LedRojo = 1; LedVerde = 1; LedAzul = 1;
robinal 2:b249143245d8 443 wait(.5);
robinal 2:b249143245d8 444 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 445 wait(.5);
robinal 2:b249143245d8 446 LedRojo = 1; LedVerde = 1; LedAzul = 1;
robinal 2:b249143245d8 447 wait(.5);
robinal 2:b249143245d8 448 LedRojo = 1; LedVerde = 1; LedAzul = 0;
robinal 2:b249143245d8 449 wait(.5);
robinal 2:b249143245d8 450 LedRojo = 1; LedVerde = 0; LedAzul = 1;
robinal 2:b249143245d8 451 }
robinal 2:b249143245d8 452
robinal 2:b249143245d8 453 cleanBuffer(buffer,100);
tony63 0:f7aa7972da4d 454 }
tony63 0:f7aa7972da4d 455 }
robinal 2:b249143245d8 456 }
robinal 2:b249143245d8 457 }