MODEM SIM900 socket websocket and command sms
Dependencies: Pulse SDFileSystem TinyJpgDec mbed-rtos mbed
main.cpp
- Committer:
- metabi814
- Date:
- 2015-06-12
- Revision:
- 0:214db1fdfc95
File content as of revision 0:214db1fdfc95:
#include "mbed.h" #include "modem.h" #include "rtos.h" #include "math.h" /* DEFINICION DE PUERTOS */ DigitalOut led1(LED1); DigitalOut power(PA_13); DigitalOut sound(PA_14); /* */ Serial pc(USBTX,USBRX); char res[32]; Modem modem(PA_11,PA_12,19200); /*Sortie Digital */ DigitalOut ch1(PC_3); DigitalOut ch2(PC_2); DigitalOut ch3(PH_1); DigitalOut ch4(PH_0); DigitalOut ch5(PC_15); DigitalOut ch6(PC_14); DigitalOut ch7(PC_13); DigitalOut ch8(PB_7); /*Entre analogic */ AnalogIn tmp1(PC_0); AnalogIn tmp2(PC_1); AnalogIn tmp3(PB_0); AnalogIn tmp4(PA_4); AnalogIn tmp5(PA_1); AnalogIn light(PA_0); /*variables globales */ int st[8]= {0}; // state de relay //double ADC[6]= {0}; // sensor temperature et 1 sensor lumiere ADC[5] int x; class sim900 { public: int on(void); int off(void); void speak(int tmp); int relay(int rel,int state,int seg); //1 gsm , 2 gprs float read_Temp(int n_sensor); }; class gprs { public: }; class sms:sim900 { public: int send_m(char *num,char *text); int read_m(void); int sms_cmd(void); }; /*definicion de clases*/ int sim900::on() { int i=3; i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD); if(i==0) { led1=1; speak(2); return 0; //ok encendido } else { power=1; wait(0.5); power=0; wait(3); i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD); if(i==0) { led1=1; speak(2); } else { led1=0; speak(4); return -1; } return 0; } } int sim900::off() { int i=3; i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD); if(i==0) { speak(4); power=1; wait(1); power=0; led1=0; return 0; //ok encendido } else { i=modem.sendCmdAndWaitForResp("AT\r", "OK", DEFAULT_TIMEOUT,CMD); if(i==0) { speak(4); power=1; wait(1); power=0; led1=0; return 0; //ok encendido } else { led1=0; speak(4); } return -1; // no apagado } } void sim900::speak(int tmp) { for(int i=0; i<tmp; i++) { sound=1; wait(0.3); sound=0; wait(0.3); } } int sim900::relay(int rel,int state,int seg) { switch (rel) { case 1: ch1=state; break; case 2: ch2=state; break; case 3: ch3=state; break; case 4: ch4=state; break; case 5: ch5=state; break; case 6: ch6=state; break; case 7: ch7=state; break; case 8: ch8=state; break; } wait(1); ch1=0; ch2=0; ch3=0; ch4=0; return 0; } float sim900::read_Temp(int n_sensor) { double tr,y,temp; uint16_t meas=0; float Valim=3300; float ADCres=65535; double Result_V = 0; double MinStepRes = 0; meas=tmp1.read_u16(); switch (n_sensor) { case 1: meas=tmp1.read_u16(); break; case 2: meas=tmp2.read_u16(); break; case 3: meas=tmp3.read_u16(); break; case 4: meas=tmp4.read_u16(); break; case 5: meas=tmp5.read_u16(); break; case 6: meas=light.read_u16(); break; } MinStepRes = (Valim / ADCres); Result_V = ((MinStepRes * meas))/1000.0; tr=(Result_V*47000.0)/(3.3-Result_V); y=log(tr/47000.0); y=(1.0/298.15)+(y*(1.0/4450.0)); temp=1.0/y; temp=temp-273.15; pc.printf("Temp=%f\r\n",temp); return temp; } int sms::send_m(char *num,char *text) { char aux_string[22]= {0}; int answer; modem.sendCmd("AT+CMGF=1\r"); wait(1); sprintf(aux_string,"AT+CMGS=\"%s\"\r",num); modem.sendCmd(aux_string); wait(1); modem.sendCmd(text); wait(1); answer=modem.sendCmdAndWaitForResp("\x1A", "OK", DEFAULT_TIMEOUT,CMD); if(answer==0) { pc.printf("message envoye"); } else { pc.printf("erreur ctrl z"); } return 0; } int sms::read_m() { char m[200]= {0}; char *p; char CH1[5]= {0},CH2[5]= {0},CH3[5]= {0},CH4[5]= {0},CH5[5]= {0},CH6[5]= {0},CH7[5]= {0},CH8[1]= {0}; char phone_number[]="+33000000000"; int r; r=modem.sendCmdAndWaitForResp("AT+CMGR=1\r","+CMGR:",DEFAULT_TIMEOUT,CMD); if(r==0) { modem.readBuffer(m,200,1); // leer buffer y guardar en array m[]. if(NULL!=(p=strstr(m,"+33"))) { strncpy(phone_number,p,12); pc.puts(phone_number); } if(NULL!=(p=strstr(m,"CH1="))) { strncpy(CH1,p+4,1); st[0]=atoi(CH1); relay(1,st[0],1); pc.puts(CH1); } if(NULL!=(p=strstr(m,"CH2="))) { strncpy(CH2,p+4,1); st[1]=atoi(CH2); relay(2,st[1],1); pc.puts(CH2); } if(NULL!=(p=strstr(m,"CH3="))) { strncpy(CH3,p+4,1); st[2]=atoi(CH3); relay(3,st[2],1); pc.puts(CH3); } if(NULL!=(p=strstr(m,"CH4="))) { strncpy(CH4,p+4,1); st[3]=atoi(CH4); relay(4,st[3],1); pc.puts(CH4); } if(NULL!=(p=strstr(m,"CH5="))) { strncpy(CH5,p+4,1); st[4]=atoi(CH5); relay(5,st[0],1); pc.puts(CH5); } if(NULL!=(p=strstr(m,"CH6="))) { strncpy(CH6,p+4,1); st[5]=atoi(CH6); relay(6,st[5],1); pc.puts(CH6); } if(NULL!=(p=strstr(m,"CH7="))) { strncpy(CH7,p+4,1); st[6]=atoi(CH7); relay(7,st[6],1); pc.puts(CH7); } if(NULL!=(p=strstr(m,"CH8="))) { strncpy(CH8,p+4,1); st[7]=atoi(CH8); relay(8,st[7],1); pc.puts(CH8); } modem.sendCmd("AT+CMGD=1\r"); send_m(phone_number,"comando recibido\r"); modem.cleanBuffer(m,200); } //pc.printf("%s",m); return 0; } int main() { sim900 sim; // float temperatura; sms sms1; modem.sendCmd("AT+CNMI=3,1,0,0\r"); modem.sendCmd("AT+ECHO\r"); x=sim.on(); pc.printf("%d",x); while(true) { sms1.read_m(); sim.read_Temp(2); wait(1); } //x=sim.off(); //pc.printf("%d",x); }