programa para probar recepcion de cadenas por parte de APP INVENTOR, tres suiches en modo toggle controlan encendido y apagado de tres colores

Dependencies:   mbed

Committer:
tony63
Date:
Tue Apr 14 02:05:54 2015 +0000
Revision:
0:4676a90107ca
Child:
1:d0a4ddc1bd88
Programa que transmite cadenas, util para verificar si APPINVENTOR recibe cadenas, tres entradas digitales suicheadas controlan en modo toggle, tres colores en la pantalla.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tony63 0:4676a90107ca 1 //programa para enviar cadenas de caracters y probarlas con app inventor
tony63 0:4676a90107ca 2 //el programa tambien recibe cadenas
tony63 0:4676a90107ca 3
tony63 0:4676a90107ca 4 #include "mbed.h"
tony63 0:4676a90107ca 5 #include "DebouncedIn.h"
tony63 0:4676a90107ca 6 #include "stdio.h"
tony63 0:4676a90107ca 7 #include "string.h"
tony63 0:4676a90107ca 8 Timer t;
tony63 0:4676a90107ca 9 DigitalOut LedVerde(LED2);
tony63 0:4676a90107ca 10 DigitalOut LedRojo(LED1);
tony63 0:4676a90107ca 11 DigitalOut LedAzul(LED3);
tony63 0:4676a90107ca 12 DebouncedIn button1(PTC12);
tony63 0:4676a90107ca 13 DebouncedIn button2(PTC13);
tony63 0:4676a90107ca 14 DebouncedIn button3(PTC16);
tony63 0:4676a90107ca 15 Serial GSM(PTE0,PTE1); //puertos del FRDM para el modem
tony63 0:4676a90107ca 16 Serial pc(USBTX,USBRX);
tony63 0:4676a90107ca 17 void Rx_interrupt();
tony63 0:4676a90107ca 18 int position=0;
tony63 0:4676a90107ca 19 int lenpack=6;
tony63 0:4676a90107ca 20 int longi=0;
tony63 0:4676a90107ca 21 char tel[10];
tony63 0:4676a90107ca 22 char DE[50];
tony63 0:4676a90107ca 23 char buffer[512];
tony63 0:4676a90107ca 24 char buffermsg[100];
tony63 0:4676a90107ca 25 char buffer1[13];
tony63 0:4676a90107ca 26 char mensaje[100];
tony63 0:4676a90107ca 27 char NUMBER[13];
tony63 0:4676a90107ca 28 short int index1;
tony63 0:4676a90107ca 29 short int index2;
tony63 0:4676a90107ca 30 short int index3;
tony63 0:4676a90107ca 31 int count;
tony63 0:4676a90107ca 32 int i = 0;
tony63 0:4676a90107ca 33 int c=0;
tony63 0:4676a90107ca 34 int cont=0;
tony63 0:4676a90107ca 35 unsigned char CtrlZ = 0x1A;
tony63 0:4676a90107ca 36 bool Flag = false;
tony63 0:4676a90107ca 37 char r[]="";
tony63 0:4676a90107ca 38 char msg[256];
tony63 0:4676a90107ca 39 char char1;
tony63 0:4676a90107ca 40 void FlushGSM(void) {
tony63 0:4676a90107ca 41 char1 = 0;
tony63 0:4676a90107ca 42 while (GSM.readable()){
tony63 0:4676a90107ca 43 char1 = GSM.getc();}
tony63 0:4676a90107ca 44 return;}
tony63 0:4676a90107ca 45
tony63 0:4676a90107ca 46 void callback() {
tony63 0:4676a90107ca 47
tony63 0:4676a90107ca 48 pc.printf("%c\n", GSM.getc());
tony63 0:4676a90107ca 49
tony63 0:4676a90107ca 50 }
tony63 0:4676a90107ca 51
tony63 0:4676a90107ca 52 int readBuffer(char *buffer,int count)
tony63 0:4676a90107ca 53 {
tony63 0:4676a90107ca 54 int i=0;
tony63 0:4676a90107ca 55 t.start();
tony63 0:4676a90107ca 56 while(1) {
tony63 0:4676a90107ca 57 while (GSM.readable()) {
tony63 0:4676a90107ca 58 char c = GSM.getc();
tony63 0:4676a90107ca 59 if (c == '\r' || c == '\n') c = '$';
tony63 0:4676a90107ca 60 buffer[i++] = c;
tony63 0:4676a90107ca 61 if(i > count)break;
tony63 0:4676a90107ca 62 }
tony63 0:4676a90107ca 63 if(i > count)break;
tony63 0:4676a90107ca 64 if(t.read() > 3) {
tony63 0:4676a90107ca 65 t.stop();
tony63 0:4676a90107ca 66 t.reset();
tony63 0:4676a90107ca 67 break;
tony63 0:4676a90107ca 68 }
tony63 0:4676a90107ca 69 }
tony63 0:4676a90107ca 70 wait(0.5);
tony63 0:4676a90107ca 71 while(GSM.readable()) {
tony63 0:4676a90107ca 72 char c = GSM.getc();
tony63 0:4676a90107ca 73 }
tony63 0:4676a90107ca 74 return 0;
tony63 0:4676a90107ca 75 }
tony63 0:4676a90107ca 76
tony63 0:4676a90107ca 77 void cleanBuffer(char *buffer, int count)
tony63 0:4676a90107ca 78 {
tony63 0:4676a90107ca 79 for(int i=0; i < count; i++) {
tony63 0:4676a90107ca 80 buffer[i] = '\0';
tony63 0:4676a90107ca 81 }
tony63 0:4676a90107ca 82 }
tony63 0:4676a90107ca 83
tony63 0:4676a90107ca 84 void sendCmd(char *cmd)
tony63 0:4676a90107ca 85 {
tony63 0:4676a90107ca 86 GSM.puts(cmd);
tony63 0:4676a90107ca 87 }
tony63 0:4676a90107ca 88
tony63 0:4676a90107ca 89 int waitForResp(char *resp, int timeout)
tony63 0:4676a90107ca 90 {
tony63 0:4676a90107ca 91 int len = strlen(resp);
tony63 0:4676a90107ca 92 int sum=0;
tony63 0:4676a90107ca 93 t.start();
tony63 0:4676a90107ca 94
tony63 0:4676a90107ca 95 while(1) {
tony63 0:4676a90107ca 96 if(GSM.readable()) {
tony63 0:4676a90107ca 97 char c = GSM.getc();
tony63 0:4676a90107ca 98 sum = (c==resp[sum]) ? sum+1 : 0;
tony63 0:4676a90107ca 99 if(sum == len)break;
tony63 0:4676a90107ca 100 }
tony63 0:4676a90107ca 101 if(t.read() > timeout) {
tony63 0:4676a90107ca 102 t.stop();
tony63 0:4676a90107ca 103 t.reset();
tony63 0:4676a90107ca 104 return -1;
tony63 0:4676a90107ca 105 }
tony63 0:4676a90107ca 106 }
tony63 0:4676a90107ca 107 t.stop();
tony63 0:4676a90107ca 108 t.reset();
tony63 0:4676a90107ca 109 while(GSM.readable()) {
tony63 0:4676a90107ca 110 char c = GSM.getc();
tony63 0:4676a90107ca 111 }
tony63 0:4676a90107ca 112
tony63 0:4676a90107ca 113 return 0;
tony63 0:4676a90107ca 114 }
tony63 0:4676a90107ca 115
tony63 0:4676a90107ca 116 int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout)
tony63 0:4676a90107ca 117 {
tony63 0:4676a90107ca 118 sendCmd(cmd);
tony63 0:4676a90107ca 119 return waitForResp(resp,timeout);
tony63 0:4676a90107ca 120 }
tony63 0:4676a90107ca 121
tony63 0:4676a90107ca 122 int powerCheck(void)
tony63 0:4676a90107ca 123 {
tony63 0:4676a90107ca 124 return sendCmdAndWaitForResp("AT\r\n", "OK", 2);
tony63 0:4676a90107ca 125 }
tony63 0:4676a90107ca 126
tony63 0:4676a90107ca 127 int checkSIMStatus(void)
tony63 0:4676a90107ca 128 {
tony63 0:4676a90107ca 129 char gprsBuffer[30];
tony63 0:4676a90107ca 130 int count = 0;
tony63 0:4676a90107ca 131 cleanBuffer(gprsBuffer,30);
tony63 0:4676a90107ca 132 while(count < 3) {
tony63 0:4676a90107ca 133 sendCmd("AT+CPIN?\r\n");
tony63 0:4676a90107ca 134 readBuffer(gprsBuffer,30);
tony63 0:4676a90107ca 135 if((NULL != strstr(gprsBuffer,"+CPIN: READY"))) {
tony63 0:4676a90107ca 136 break;
tony63 0:4676a90107ca 137 }
tony63 0:4676a90107ca 138 count++;
tony63 0:4676a90107ca 139 wait(1);
tony63 0:4676a90107ca 140 }
tony63 0:4676a90107ca 141
tony63 0:4676a90107ca 142 if(count == 3) {
tony63 0:4676a90107ca 143 return -1;
tony63 0:4676a90107ca 144 }
tony63 0:4676a90107ca 145 return 0;
tony63 0:4676a90107ca 146 }
tony63 0:4676a90107ca 147
tony63 0:4676a90107ca 148 int checkSignalStrength(void)
tony63 0:4676a90107ca 149 {
tony63 0:4676a90107ca 150 char gprsBuffer[100];
tony63 0:4676a90107ca 151 int index,count = 0;
tony63 0:4676a90107ca 152 cleanBuffer(gprsBuffer,100);
tony63 0:4676a90107ca 153 while(count < 3) {
tony63 0:4676a90107ca 154 sendCmd("AT+CSQ\r\n");
tony63 0:4676a90107ca 155 readBuffer(gprsBuffer,25);
tony63 0:4676a90107ca 156 if(sscanf(gprsBuffer, "AT+CSQ$$$$+CSQ: %d", &index)>0) {
tony63 0:4676a90107ca 157 break;
tony63 0:4676a90107ca 158 }
tony63 0:4676a90107ca 159 count++;
tony63 0:4676a90107ca 160 wait(1);
tony63 0:4676a90107ca 161 }
tony63 0:4676a90107ca 162 if(count == 3) {
tony63 0:4676a90107ca 163 return -1;
tony63 0:4676a90107ca 164 }
tony63 0:4676a90107ca 165 return index;
tony63 0:4676a90107ca 166 }
tony63 0:4676a90107ca 167
tony63 0:4676a90107ca 168 int init()
tony63 0:4676a90107ca 169 {
tony63 0:4676a90107ca 170 for(int i = 0; i < 3; i++){
tony63 0:4676a90107ca 171 sendCmdAndWaitForResp("AT\r\n", "OK", 1);
tony63 0:4676a90107ca 172 wait(0.5);
tony63 0:4676a90107ca 173 }
tony63 0:4676a90107ca 174 if(0 != checkSIMStatus()) {
tony63 0:4676a90107ca 175 return -1;
tony63 0:4676a90107ca 176 }
tony63 0:4676a90107ca 177 if(checkSignalStrength()<1) {
tony63 0:4676a90107ca 178 return -1;
tony63 0:4676a90107ca 179 }
tony63 0:4676a90107ca 180
tony63 0:4676a90107ca 181 GSM.attach(&Rx_interrupt, Serial::RxIrq);
tony63 0:4676a90107ca 182 return 0;
tony63 0:4676a90107ca 183 }
tony63 0:4676a90107ca 184
tony63 0:4676a90107ca 185 int readSMSpdu(char *message, int index)
tony63 0:4676a90107ca 186 {
tony63 0:4676a90107ca 187 int i = 0;
tony63 0:4676a90107ca 188 char gprsBuffer[100];
tony63 0:4676a90107ca 189 char *p,*s;
tony63 0:4676a90107ca 190 GSM.printf("AT+CMGR=%d\r\n",index);
tony63 0:4676a90107ca 191 cleanBuffer(gprsBuffer,100);
tony63 0:4676a90107ca 192 readBuffer(gprsBuffer,100);
tony63 0:4676a90107ca 193 if(NULL == ( s = strstr(gprsBuffer,"+CMGR"))) {
tony63 0:4676a90107ca 194 return -1;
tony63 0:4676a90107ca 195 }
tony63 0:4676a90107ca 196 if(NULL != ( s = strstr(gprsBuffer,"+32"))) {
tony63 0:4676a90107ca 197 p = s + 6;
tony63 0:4676a90107ca 198 while((*p != '$')&&(i < 5)) {
tony63 0:4676a90107ca 199 message[i++] = *(p++);
tony63 0:4676a90107ca 200 }
tony63 0:4676a90107ca 201 message[i] = '\0';
tony63 0:4676a90107ca 202 }
tony63 0:4676a90107ca 203 return 0;
tony63 0:4676a90107ca 204 }
tony63 0:4676a90107ca 205
tony63 0:4676a90107ca 206 int deleteSMS(int index)
tony63 0:4676a90107ca 207 {
tony63 0:4676a90107ca 208 char cmd[32];
tony63 0:4676a90107ca 209 snprintf(cmd,sizeof(cmd),"AT+CMGD=%d\r\n",index);
tony63 0:4676a90107ca 210 sendCmd(cmd);
tony63 0:4676a90107ca 211 return 0;
tony63 0:4676a90107ca 212 }
tony63 0:4676a90107ca 213
tony63 0:4676a90107ca 214 void Rx_interrupt(){
tony63 0:4676a90107ca 215 }
tony63 0:4676a90107ca 216
tony63 0:4676a90107ca 217 int main(void)
tony63 0:4676a90107ca 218 {
tony63 0:4676a90107ca 219 LedVerde=1;
tony63 0:4676a90107ca 220 LedRojo=1;
tony63 0:4676a90107ca 221 LedAzul=1;
tony63 0:4676a90107ca 222 GSM.baud(9600);
tony63 0:4676a90107ca 223 GSM.format(8,Serial::None,1);
tony63 0:4676a90107ca 224
tony63 0:4676a90107ca 225
tony63 0:4676a90107ca 226 while(1){
tony63 0:4676a90107ca 227 if (button1.falling())
tony63 0:4676a90107ca 228 {
tony63 0:4676a90107ca 229 index1=!index1;
tony63 0:4676a90107ca 230 if (index1==0){
tony63 0:4676a90107ca 231 GSM.printf("VERDEON");}
tony63 0:4676a90107ca 232 else{
tony63 0:4676a90107ca 233 GSM.printf("VERDEOF");
tony63 0:4676a90107ca 234 }
tony63 0:4676a90107ca 235 }
tony63 0:4676a90107ca 236 if (button2.falling())
tony63 0:4676a90107ca 237 {
tony63 0:4676a90107ca 238 index2=!index2;
tony63 0:4676a90107ca 239 if (index2==0){
tony63 0:4676a90107ca 240 GSM.printf("ROJOON");}
tony63 0:4676a90107ca 241 else{
tony63 0:4676a90107ca 242 GSM.printf("ROJOOF");
tony63 0:4676a90107ca 243 }
tony63 0:4676a90107ca 244 }
tony63 0:4676a90107ca 245
tony63 0:4676a90107ca 246 if (button3.falling())
tony63 0:4676a90107ca 247 {
tony63 0:4676a90107ca 248 index3=!index3;
tony63 0:4676a90107ca 249 if (index3==0){
tony63 0:4676a90107ca 250 GSM.printf("AZULON");}
tony63 0:4676a90107ca 251 else{
tony63 0:4676a90107ca 252 GSM.printf("AZULOF");
tony63 0:4676a90107ca 253 }
tony63 0:4676a90107ca 254 }
tony63 0:4676a90107ca 255
tony63 0:4676a90107ca 256
tony63 0:4676a90107ca 257
tony63 0:4676a90107ca 258
tony63 0:4676a90107ca 259
tony63 0:4676a90107ca 260
tony63 0:4676a90107ca 261
tony63 0:4676a90107ca 262 if (GSM.readable()) {
tony63 0:4676a90107ca 263 readBuffer(buffer,100);
tony63 0:4676a90107ca 264 pc.printf("buffer= %s\n\r ",buffer);
tony63 0:4676a90107ca 265 pc.printf("buffer= %c %c\n\r ",buffer[10],buffer[11]);
tony63 0:4676a90107ca 266 if(buffer[67]=='A'){for(i=0;i<86;i++)
tony63 0:4676a90107ca 267 {buffermsg[i]=buffer[i];}
tony63 0:4676a90107ca 268 pc.printf("mensaje= %s\n\r ",buffermsg);
tony63 0:4676a90107ca 269 pc.printf("mensaje[72]= %c mensaje[73]=%c\n\r ",buffermsg[72],buffermsg[73]);
tony63 0:4676a90107ca 270 buffer[67]='c';
tony63 0:4676a90107ca 271 }
tony63 0:4676a90107ca 272
tony63 0:4676a90107ca 273 if(buffer[10]=='S'&& buffer[11]=='M'){
tony63 0:4676a90107ca 274 for(i=0;i<5;i++)
tony63 0:4676a90107ca 275 {buffer1[i]=buffer[2+i];}
tony63 0:4676a90107ca 276 pc.printf("buffer1= %s\n\r ",buffer1);
tony63 0:4676a90107ca 277 buffer[10]='c';
tony63 0:4676a90107ca 278 buffer[11]='c';
tony63 0:4676a90107ca 279 }
tony63 0:4676a90107ca 280 if(buffer1[3]=='T'){pc.printf("AT+CMGL=0\n\r");
tony63 0:4676a90107ca 281 wait(0.5);
tony63 0:4676a90107ca 282 GSM.printf("AT+CMGL=0\r\n");
tony63 0:4676a90107ca 283 buffer1[3]='p';
tony63 0:4676a90107ca 284 }
tony63 0:4676a90107ca 285
tony63 0:4676a90107ca 286
tony63 0:4676a90107ca 287 // CC3219642FCBC965 ESTO SIGNIFICA "Led verde" si mandan ese mensaje de texto se prende el led azul
tony63 0:4676a90107ca 288
tony63 0:4676a90107ca 289 if(buffermsg[70]=='C' && buffermsg[71]=='C' && buffermsg[72]=='3' && buffermsg[73]=='2' && buffermsg[74]=='1' && buffermsg[75]=='9' && buffermsg[76]=='6' && buffermsg[77]=='4' && buffermsg[78]=='2' && buffermsg[79]=='F' && buffermsg[80]=='C' && buffermsg[81]=='B' && buffermsg[82]=='C' && buffermsg[83]=='9' && buffermsg[84]=='6' && buffermsg[85]=='5'){LedAzul=0;}
tony63 0:4676a90107ca 290 if(buffermsg[72]=='7' && buffermsg[73]=='3'){LedAzul=1;} //apaga con Lgeverde
tony63 0:4676a90107ca 291
tony63 0:4676a90107ca 292
tony63 0:4676a90107ca 293 }
tony63 0:4676a90107ca 294 }
tony63 0:4676a90107ca 295 }