Advertisement
otakus

Untitled

Jul 7th, 2012
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.43 KB | None | 0 0
  1. #define MAX_DATA_LINES 5
  2. #define TEXT_BUFFER 256
  3.  
  4.  
  5. String smsArr[MAX_DATA_LINES];
  6. int smsArrIndex;
  7. char sbuff[TEXT_BUFFER];
  8. char inchar;
  9. int count;
  10. int smsIndex;
  11. boolean found=false;
  12.  
  13. int led = 13;
  14. int onModulePin = 2; // the pin to switch on the module (without press on button)
  15.  
  16. void switchModule(){
  17. digitalWrite(onModulePin,HIGH);
  18. delay(2000);
  19. digitalWrite(onModulePin,LOW);
  20. }
  21.  
  22. void setup(){
  23. Serial.begin(115200); // UART baud rate
  24. pinMode(led, OUTPUT);
  25. pinMode(onModulePin, OUTPUT);
  26. switchModule(); // switches the module ON
  27. Serial.println("SWITCHING ON");
  28.  
  29. for (int i=25;i>0;i--){
  30. Serial.println(i);
  31. delay(1000);
  32. }
  33.  
  34. Serial.println("AT+CMGF=1"); // sets the SMS mode to text
  35. delay(100);
  36. Serial.println("AT+CNMI=2,1,0,0,0"); // sets the SMS mode to text
  37. while(Serial.read()!='K');
  38. Serial.println("AT+CPMS=\"SM\",\"SM\",\"SM\""); //selects SIM memory
  39. while(Serial.read()!='K');
  40. Serial.println("DELETING...");
  41. Serial.println("AT+CMGD=,4");
  42. while(Serial.read()!='K');
  43. Serial.println("READY...");
  44. Serial.flush();
  45. }
  46.  
  47. void loop(){
  48. do{
  49. count=0;
  50. while(true){
  51. while(!Serial.available());
  52. inchar=Serial.read();
  53. if(inchar==10||inchar==13)
  54. break;
  55. sbuff[count]=inchar;
  56. count++;
  57. }
  58. sbuff[count]='\0';
  59. }while(!startsWith(sbuff,"+CMTI:"));
  60. char tmp[4];
  61. int offset=String(sbuff).indexOf(",")+1;
  62. tmp[0]=sbuff[offset];
  63. tmp[1]=sbuff[offset+1];
  64. tmp[2]=sbuff[offset+2];
  65. tmp[3]=sbuff[offset+3];
  66. smsIndex=atoi(tmp);
  67. readSMS();
  68.  
  69. }
  70.  
  71. boolean startsWith(String string, char key[]){
  72. return string.startsWith(key);
  73. }
  74.  
  75. boolean startsWith(char string[], char key[]){
  76. for(int i=0;i<sizeof(key);i++){
  77. if(string[i]!=key[i])
  78. return false;
  79. }
  80. return true;
  81. }
  82.  
  83. void readSMS(){
  84. //Serial.println("Reading sms");
  85. String s="AT+CMGR=";
  86. s=s+smsIndex;
  87. Serial.println(s);
  88. smsArrIndex=0;
  89. found=false;
  90. do{
  91. String tmp;
  92. do{
  93. count=0;
  94. while(true){
  95. while(!Serial.available());
  96. inchar=Serial.read();
  97. if(inchar==10||inchar==13)
  98. break;
  99. sbuff[count]=inchar;
  100. count++;
  101. }
  102. sbuff[count]='\0';
  103. tmp=String(sbuff);
  104. if(startsWith(tmp,"+CMGR:"))
  105. found=true;
  106. }while(!startsWith(tmp,"+CMGR:")&&!found);
  107.  
  108. smsArr[smsArrIndex]=String(sbuff);
  109. Serial.print("PACKET Return ");
  110. Serial.print(smsArrIndex);
  111. Serial.print(" :");
  112. Serial.println(smsArr[smsArrIndex]);
  113. smsArrIndex++;
  114. }while(!(startsWith(smsArr[smsArrIndex-1],"OK")||startsWith(smsArr[smsArrIndex-1],"ERROR"))&&smsArrIndex<=MAX_DATA_LINES);
  115. smsArrIndex--;
  116. if(startsWith(smsArr[smsArrIndex],"ERROR")){
  117. Serial.println("Error has occured with AT+CMGR=1");
  118. }
  119. else if(startsWith(smsArr[smsArrIndex],"OK")){
  120. if(startsWith(smsArr[0],"+CMGR:")){
  121. Serial.print("Number: ");
  122. int offset=smsArr[0].indexOf(",")+4;
  123. Serial.println(smsArr[0].substring(offset,offset+10));
  124. }
  125. Serial.print("MSG: ");
  126. Serial.println(smsArr[1]);
  127. }
  128. else{
  129. Serial.println("Error with returned data length");
  130. for(int i=0;i<MAX_DATA_LINES;i++)
  131. Serial.println(smsArr[i]);
  132. }
  133.  
  134. //Serial.println("AT+CMGD=1");
  135. //Serial.println("----FINISH-----");
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement