Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MAX_DATA_LINES 5
- #define TEXT_BUFFER 256
- String smsArr[MAX_DATA_LINES];
- int smsArrIndex;
- char sbuff[TEXT_BUFFER];
- char inchar;
- int count;
- int smsIndex;
- boolean found=false;
- int led = 13;
- int onModulePin = 2; // the pin to switch on the module (without press on button)
- void switchModule(){
- digitalWrite(onModulePin,HIGH);
- delay(2000);
- digitalWrite(onModulePin,LOW);
- }
- void setup(){
- Serial.begin(115200); // UART baud rate
- pinMode(led, OUTPUT);
- pinMode(onModulePin, OUTPUT);
- switchModule(); // switches the module ON
- Serial.println("SWITCHING ON");
- for (int i=25;i>0;i--){
- Serial.println(i);
- delay(1000);
- }
- Serial.println("AT+CMGF=1"); // sets the SMS mode to text
- delay(100);
- Serial.println("AT+CNMI=2,1,0,0,0"); // sets the SMS mode to text
- while(Serial.read()!='K');
- Serial.println("AT+CPMS=\"SM\",\"SM\",\"SM\""); //selects SIM memory
- while(Serial.read()!='K');
- Serial.println("DELETING...");
- Serial.println("AT+CMGD=,4");
- while(Serial.read()!='K');
- Serial.println("READY...");
- Serial.flush();
- }
- void loop(){
- do{
- count=0;
- while(true){
- while(!Serial.available());
- inchar=Serial.read();
- if(inchar==10||inchar==13)
- break;
- sbuff[count]=inchar;
- count++;
- }
- sbuff[count]='\0';
- }while(!startsWith(sbuff,"+CMTI:"));
- char tmp[4];
- int offset=String(sbuff).indexOf(",")+1;
- tmp[0]=sbuff[offset];
- tmp[1]=sbuff[offset+1];
- tmp[2]=sbuff[offset+2];
- tmp[3]=sbuff[offset+3];
- smsIndex=atoi(tmp);
- readSMS();
- }
- boolean startsWith(String string, char key[]){
- return string.startsWith(key);
- }
- boolean startsWith(char string[], char key[]){
- for(int i=0;i<sizeof(key);i++){
- if(string[i]!=key[i])
- return false;
- }
- return true;
- }
- void readSMS(){
- //Serial.println("Reading sms");
- String s="AT+CMGR=";
- s=s+smsIndex;
- Serial.println(s);
- smsArrIndex=0;
- found=false;
- do{
- String tmp;
- do{
- count=0;
- while(true){
- while(!Serial.available());
- inchar=Serial.read();
- if(inchar==10||inchar==13)
- break;
- sbuff[count]=inchar;
- count++;
- }
- sbuff[count]='\0';
- tmp=String(sbuff);
- if(startsWith(tmp,"+CMGR:"))
- found=true;
- }while(!startsWith(tmp,"+CMGR:")&&!found);
- smsArr[smsArrIndex]=String(sbuff);
- Serial.print("PACKET Return ");
- Serial.print(smsArrIndex);
- Serial.print(" :");
- Serial.println(smsArr[smsArrIndex]);
- smsArrIndex++;
- }while(!(startsWith(smsArr[smsArrIndex-1],"OK")||startsWith(smsArr[smsArrIndex-1],"ERROR"))&&smsArrIndex<=MAX_DATA_LINES);
- smsArrIndex--;
- if(startsWith(smsArr[smsArrIndex],"ERROR")){
- Serial.println("Error has occured with AT+CMGR=1");
- }
- else if(startsWith(smsArr[smsArrIndex],"OK")){
- if(startsWith(smsArr[0],"+CMGR:")){
- Serial.print("Number: ");
- int offset=smsArr[0].indexOf(",")+4;
- Serial.println(smsArr[0].substring(offset,offset+10));
- }
- Serial.print("MSG: ");
- Serial.println(smsArr[1]);
- }
- else{
- Serial.println("Error with returned data length");
- for(int i=0;i<MAX_DATA_LINES;i++)
- Serial.println(smsArr[i]);
- }
- //Serial.println("AT+CMGD=1");
- //Serial.println("----FINISH-----");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement