Código para enviar un valor entero a binario para monitorear una variable con ayuda de app inventor
Fork of VOLTIMETRO1 by
Diff: main.cpp
- Revision:
- 0:4676a90107ca
- Child:
- 1:d0a4ddc1bd88
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Apr 14 02:05:54 2015 +0000 @@ -0,0 +1,295 @@ +//programa para enviar cadenas de caracters y probarlas con app inventor +//el programa tambien recibe cadenas + +#include "mbed.h" +#include "DebouncedIn.h" +#include "stdio.h" +#include "string.h" +Timer t; +DigitalOut LedVerde(LED2); +DigitalOut LedRojo(LED1); +DigitalOut LedAzul(LED3); +DebouncedIn button1(PTC12); +DebouncedIn button2(PTC13); +DebouncedIn button3(PTC16); +Serial GSM(PTE0,PTE1); //puertos del FRDM para el modem +Serial pc(USBTX,USBRX); +void Rx_interrupt(); +int position=0; +int lenpack=6; +int longi=0; +char tel[10]; +char DE[50]; +char buffer[512]; +char buffermsg[100]; +char buffer1[13]; +char mensaje[100]; +char NUMBER[13]; +short int index1; +short int index2; +short int index3; +int count; +int i = 0; +int c=0; +int cont=0; +unsigned char CtrlZ = 0x1A; +bool Flag = false; +char r[]=""; +char msg[256]; +char char1; +void FlushGSM(void) { +char1 = 0; + while (GSM.readable()){ + char1 = GSM.getc();} + return;} + +void callback() { + + pc.printf("%c\n", GSM.getc()); + +} + +int readBuffer(char *buffer,int count) +{ + int i=0; + t.start(); + while(1) { + while (GSM.readable()) { + char c = GSM.getc(); + if (c == '\r' || c == '\n') c = '$'; + buffer[i++] = c; + if(i > count)break; + } + if(i > count)break; + if(t.read() > 3) { + t.stop(); + t.reset(); + break; + } + } + wait(0.5); + while(GSM.readable()) { + char c = GSM.getc(); + } + return 0; +} + +void cleanBuffer(char *buffer, int count) +{ + for(int i=0; i < count; i++) { + buffer[i] = '\0'; + } +} + +void sendCmd(char *cmd) +{ + GSM.puts(cmd); +} + +int waitForResp(char *resp, int timeout) +{ + int len = strlen(resp); + int sum=0; + t.start(); + + while(1) { + if(GSM.readable()) { + char c = GSM.getc(); + sum = (c==resp[sum]) ? sum+1 : 0; + if(sum == len)break; + } + if(t.read() > timeout) { + t.stop(); + t.reset(); + return -1; + } + } + t.stop(); + t.reset(); + while(GSM.readable()) { + char c = GSM.getc(); + } + + return 0; +} + +int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout) +{ + sendCmd(cmd); + return waitForResp(resp,timeout); +} + +int powerCheck(void) +{ + return sendCmdAndWaitForResp("AT\r\n", "OK", 2); +} + +int checkSIMStatus(void) +{ + char gprsBuffer[30]; + int count = 0; + cleanBuffer(gprsBuffer,30); + while(count < 3) { + sendCmd("AT+CPIN?\r\n"); + readBuffer(gprsBuffer,30); + if((NULL != strstr(gprsBuffer,"+CPIN: READY"))) { + break; + } + count++; + wait(1); + } + + if(count == 3) { + return -1; + } + return 0; +} + +int checkSignalStrength(void) +{ + char gprsBuffer[100]; + int index,count = 0; + cleanBuffer(gprsBuffer,100); + while(count < 3) { + sendCmd("AT+CSQ\r\n"); + readBuffer(gprsBuffer,25); + if(sscanf(gprsBuffer, "AT+CSQ$$$$+CSQ: %d", &index)>0) { + break; + } + count++; + wait(1); + } + if(count == 3) { + return -1; + } + return index; +} + +int init() +{ + for(int i = 0; i < 3; i++){ + sendCmdAndWaitForResp("AT\r\n", "OK", 1); + wait(0.5); + } + if(0 != checkSIMStatus()) { + return -1; + } + if(checkSignalStrength()<1) { + return -1; + } + + GSM.attach(&Rx_interrupt, Serial::RxIrq); + return 0; +} + +int readSMSpdu(char *message, int index) +{ + int i = 0; + char gprsBuffer[100]; + char *p,*s; + GSM.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 < 5)) { + message[i++] = *(p++); + } + 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; +} + +void Rx_interrupt(){ + } + +int main(void) + { + LedVerde=1; + LedRojo=1; + LedAzul=1; + GSM.baud(9600); + GSM.format(8,Serial::None,1); + + + while(1){ + if (button1.falling()) + { + index1=!index1; + if (index1==0){ + GSM.printf("VERDEON");} + else{ + GSM.printf("VERDEOF"); + } + } + if (button2.falling()) + { + index2=!index2; + if (index2==0){ + GSM.printf("ROJOON");} + else{ + GSM.printf("ROJOOF"); + } + } + + if (button3.falling()) + { + index3=!index3; + if (index3==0){ + GSM.printf("AZULON");} + else{ + GSM.printf("AZULOF"); + } + } + + + + + + + + if (GSM.readable()) { + readBuffer(buffer,100); + pc.printf("buffer= %s\n\r ",buffer); + pc.printf("buffer= %c %c\n\r ",buffer[10],buffer[11]); + if(buffer[67]=='A'){for(i=0;i<86;i++) + {buffermsg[i]=buffer[i];} + pc.printf("mensaje= %s\n\r ",buffermsg); + pc.printf("mensaje[72]= %c mensaje[73]=%c\n\r ",buffermsg[72],buffermsg[73]); + buffer[67]='c'; + } + + if(buffer[10]=='S'&& buffer[11]=='M'){ + for(i=0;i<5;i++) + {buffer1[i]=buffer[2+i];} + pc.printf("buffer1= %s\n\r ",buffer1); + buffer[10]='c'; + buffer[11]='c'; + } +if(buffer1[3]=='T'){pc.printf("AT+CMGL=0\n\r"); + wait(0.5); + GSM.printf("AT+CMGL=0\r\n"); + buffer1[3]='p'; + } + + +// CC3219642FCBC965 ESTO SIGNIFICA "Led verde" si mandan ese mensaje de texto se prende el led azul + +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;} +if(buffermsg[72]=='7' && buffermsg[73]=='3'){LedAzul=1;} //apaga con Lgeverde + + + } +} +} \ No newline at end of file