bambangSud

Terima SMS Arduino

Dec 24th, 2013
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. // routine terima SMS dengan interupt serial Nov 2013
  2. #include <stdio.h>
  3.  
  4. #define IR_BIT_LENGTH 32
  5. #define FirstLastBit 15
  6. #define BIT_1 1500
  7. #define BIT_0 450
  8. #define BIT_START 4000
  9. #define IR_PIN 2
  10. #define LED_PIN 12
  11. #define RELAY 13
  12.  
  13.  
  14. boolean adaSms = 0;
  15. char dataSim900[100];
  16. char isiSms[500];
  17. char kata[20];
  18.  
  19. char bufferSerial0[100];
  20. char bufferSerial2[100];
  21. void setup() {
  22. pinMode(LED_PIN, OUTPUT);
  23. pinMode(IR_PIN, INPUT);
  24. pinMode(RELAY, OUTPUT);
  25. digitalWrite(LED_PIN, LOW);
  26. digitalWrite(RELAY, LOW);
  27. initSerial2();
  28. initSerial3();
  29. initSIM900();
  30. clearBufferSer2();
  31. hapusSms();
  32. digitalWrite(LED_PIN, HIGH);
  33. }
  34.  
  35. void loop() {
  36. // sei();
  37. // }
  38.  
  39. }
  40.  
  41. //---------------------------
  42. void initSerial2(){
  43. // USART1 initialization
  44. // Communication Parameters: 8 Data, 1 Stop, No Parity
  45. // USART1 Receiver: On
  46. // USART1 Transmitter: On
  47. // USART1 Mode: Asynchronous
  48. // USART1 Baud Rate: 9600 (Double Speed Mode)
  49. UCSR2A=0x02;
  50. UCSR2B=0x98;
  51. UCSR2C=0x06;
  52. UBRR2H=0x00;
  53. UBRR2L=0xCF;
  54. }
  55.  
  56. void uart2Kirim(unsigned char data) {
  57. while(!(UCSR2A&(1<<UDRE2)));
  58. UDR2 = data;
  59. }
  60.  
  61. void kirimSerial2(char *dataString) {
  62. int panjangBuffer = strlen(dataString);
  63. for(int i=0; i<panjangBuffer; i++) {
  64. uart2Kirim(dataString[i]);
  65. }
  66. }
  67.  
  68. boolean dataComplete = 0;
  69. unsigned int countEnter=0;
  70.  
  71. void clearBufferSim900() {
  72. for(int i=0;i<100;i++) {
  73. dataSim900[i]=0;
  74. }
  75. }
  76.  
  77. int countData=0;
  78.  
  79. ISR(USART2_RX_vect) {
  80. char data;
  81. data = UDR2;
  82. // UDR0 = data;
  83. if(data=='\r'||data=='\n') {
  84. countEnter++;
  85. if(countEnter>=4) {
  86. if(dataSim900[0]=='+'&&dataSim900[1]=='C'&&dataSim900[2]=='M'&&dataSim900[3]=='T'&&dataSim900[4]=='I') {
  87. // kirimSerial0("Ada Sms\r\n");
  88. cli();
  89. delay(50);
  90. bacaSms(1);
  91. bacaIsiSms();
  92. parsingSms();
  93. hapusSms();
  94. sei();
  95. }
  96. /*
  97. if(strcmp(dataSim900,"+CMTI: \"SM\",1")==0){
  98. kirimSerial0("Ada Sms\r\n");
  99. cli();
  100. delay(50);
  101. bacaSms(1);
  102. bacaIsiSms();
  103. parsingSms();
  104. hapusSms();
  105. sei();
  106. }
  107. else if(strcmp(dataSim900,"+CMTI: \"SM\",2")==0){
  108. kirimSerial0("Ada Sms\r\n");
  109. cli();
  110. delay(50);
  111. bacaSms(2);
  112. bacaIsiSms();
  113. parsingSms();
  114. hapusSms();
  115. sei();
  116. }
  117. else if(strcmp(dataSim900,"+CMTI: \"SM\",3")==0){
  118. kirimSerial0("Ada Sms\r\n");
  119. cli();
  120. delay(50);
  121. bacaSms(3);
  122. bacaIsiSms();
  123. parsingSms();
  124. hapusSms();
  125. sei();
  126. }
  127. */
  128. // kirimSerial0(dataSim900);
  129. // kirimSerial0("\r\n");
  130. dataComplete = 1;
  131. countEnter=0;
  132. countData=0;
  133. clearBufferSim900();
  134. }
  135. }
  136. else {
  137. dataSim900[countData] = data;
  138. countData++;
  139. }
  140. }
  141.  
  142. char uart2Terima() {
  143. while(!(UCSR2A&(1<<RXC2)));
  144. return UDR2;
  145. }
  146.  
  147. void clearBufferSer2() {
  148. char dd;
  149. while(!(UCSR2A&(1<<RXC2))){
  150. dd = UDR2;
  151. }
  152.  
  153.  
  154. }
  155.  
  156. void clearIsiSms() {
  157. for(int i=0;i<500;i++) {
  158. isiSms[i]=0;
  159. }
  160. }
  161.  
  162. void bacaIsiSms() {
  163. char bufferSms;
  164. unsigned char countReceiveChar = 0;
  165. unsigned char countNewlineChar = 0;
  166. clearIsiSms();
  167. while(1) {
  168. bufferSms = uart2Terima();
  169. if(bufferSms=='\r'||bufferSms=='\n') {
  170. countNewlineChar++;
  171. if(countNewlineChar>=10) {
  172. break;
  173. }
  174. }
  175. else {
  176. isiSms[countReceiveChar]=bufferSms;
  177. countReceiveChar++;
  178. }
  179. }
  180.  
  181. }
  182.  
  183. void parsingSms() {
  184. // +CMGR: "REC UNREAD","+6285765221924","","13/01/06,23:55:15+28"webOK
  185. int panjangKarakter = 0;
  186. int posisiCharPetik = 0;
  187. int posisiCharO = 0;
  188. panjangKarakter = strlen(isiSms);
  189. // cari karakter " dan huruf O
  190. for(int i=0;i<panjangKarakter;i++) {
  191. if(isiSms[i]=='"'){
  192. posisiCharPetik = i;
  193. }
  194. else if(isiSms[i]=='O') {
  195. posisiCharO = i;
  196. }
  197. }
  198.  
  199. // sprintf(bufferSerial0,"Posisi \" = %d Posisi O = %d\r\n",posisiCharPetik, posisiCharO);
  200. // kirimSerial0(bufferSerial0);
  201.  
  202. // ambil isi text sms
  203. char sms[50];
  204. for(int i=0;i<50;i++){
  205. sms[i]=0;
  206. }
  207. int startCount = 0;
  208. for(int i=posisiCharPetik+1;i<posisiCharO;i++) {
  209. sms[startCount] = isiSms[i];
  210. startCount++;
  211. }
  212.  
  213. // sprintf(bufferSerial0,"Hasil parsing = %s \r\n",sms);
  214. // kirimSerial0(bufferSerial0);
  215.  
  216. if(strcmp(sms,"on")==0) {
  217. digitalWrite(RELAY, HIGH);
  218. digitalWrite(LED_PIN, LOW);
  219. }
  220. else if(strcmp(sms,"off")==0){
  221. digitalWrite(RELAY, LOW);
  222. digitalWrite(LED_PIN, HIGH);
  223. }
  224. else{
  225. digitalWrite(RELAY, LOW);
  226. digitalWrite(LED_PIN, HIGH);
  227. }
  228. }
  229.  
  230. void initSIM900() {
  231. initSerial2();
  232. delay(50);
  233. setEchoOff();
  234. testCommand();
  235. setTextMode();
  236. hapusSms();
  237. }
  238.  
  239. void setTextMode() {
  240. // kirimSerial0("Set Text Mode\r\n");
  241. kirimSerial2("AT+CMGF=1\r\n");
  242. delay(50);
  243. }
  244.  
  245. void testCommand() {
  246. // kirimSerial0("Test Send AT\r\n");
  247. kirimSerial2("AT\r\n");
  248. delay(50);
  249. }
  250.  
  251. void bacaSms(int index) {
  252. //kirimSerial0("Baca SMS Index 1\r\n");
  253. sprintf(bufferSerial2,"AT+CMGR=%d\r\n",index);
  254. // kirimSerial2("AT+CMGR=1\r\n");
  255. kirimSerial2(bufferSerial2);
  256. delay(50);
  257. }
  258.  
  259. void setEchoOff() {
  260. // kirimSerial0("Set Echo Off\r\n");
  261. kirimSerial2("ATE0\r\n");
  262. delay(50);
  263. }
  264.  
  265. void hapusSms() {
  266. //kirimSerial0("Delete All Message\r\n");
  267. // kirimSerial2("AT+CMGD=1,4\r\n");
  268. kirimSerial2("AT+CMGD=1,4\r\n");
  269. delay(50);
  270. }
Advertisement
Add Comment
Please, Sign In to add comment