Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:4676a90107ca, 2015-04-14 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |