Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // routine terima SMS dengan interupt serial Nov 2013
- #include <stdio.h>
- #define IR_BIT_LENGTH 32
- #define FirstLastBit 15
- #define BIT_1 1500
- #define BIT_0 450
- #define BIT_START 4000
- #define IR_PIN 2
- #define LED_PIN 12
- #define RELAY 13
- boolean adaSms = 0;
- char dataSim900[100];
- char isiSms[500];
- char kata[20];
- char bufferSerial0[100];
- char bufferSerial2[100];
- void setup() {
- pinMode(LED_PIN, OUTPUT);
- pinMode(IR_PIN, INPUT);
- pinMode(RELAY, OUTPUT);
- digitalWrite(LED_PIN, LOW);
- digitalWrite(RELAY, LOW);
- initSerial2();
- initSerial3();
- initSIM900();
- clearBufferSer2();
- hapusSms();
- digitalWrite(LED_PIN, HIGH);
- }
- void loop() {
- // sei();
- // }
- }
- //---------------------------
- void initSerial2(){
- // USART1 initialization
- // Communication Parameters: 8 Data, 1 Stop, No Parity
- // USART1 Receiver: On
- // USART1 Transmitter: On
- // USART1 Mode: Asynchronous
- // USART1 Baud Rate: 9600 (Double Speed Mode)
- UCSR2A=0x02;
- UCSR2B=0x98;
- UCSR2C=0x06;
- UBRR2H=0x00;
- UBRR2L=0xCF;
- }
- void uart2Kirim(unsigned char data) {
- while(!(UCSR2A&(1<<UDRE2)));
- UDR2 = data;
- }
- void kirimSerial2(char *dataString) {
- int panjangBuffer = strlen(dataString);
- for(int i=0; i<panjangBuffer; i++) {
- uart2Kirim(dataString[i]);
- }
- }
- boolean dataComplete = 0;
- unsigned int countEnter=0;
- void clearBufferSim900() {
- for(int i=0;i<100;i++) {
- dataSim900[i]=0;
- }
- }
- int countData=0;
- ISR(USART2_RX_vect) {
- char data;
- data = UDR2;
- // UDR0 = data;
- if(data=='\r'||data=='\n') {
- countEnter++;
- if(countEnter>=4) {
- if(dataSim900[0]=='+'&&dataSim900[1]=='C'&&dataSim900[2]=='M'&&dataSim900[3]=='T'&&dataSim900[4]=='I') {
- // kirimSerial0("Ada Sms\r\n");
- cli();
- delay(50);
- bacaSms(1);
- bacaIsiSms();
- parsingSms();
- hapusSms();
- sei();
- }
- /*
- if(strcmp(dataSim900,"+CMTI: \"SM\",1")==0){
- kirimSerial0("Ada Sms\r\n");
- cli();
- delay(50);
- bacaSms(1);
- bacaIsiSms();
- parsingSms();
- hapusSms();
- sei();
- }
- else if(strcmp(dataSim900,"+CMTI: \"SM\",2")==0){
- kirimSerial0("Ada Sms\r\n");
- cli();
- delay(50);
- bacaSms(2);
- bacaIsiSms();
- parsingSms();
- hapusSms();
- sei();
- }
- else if(strcmp(dataSim900,"+CMTI: \"SM\",3")==0){
- kirimSerial0("Ada Sms\r\n");
- cli();
- delay(50);
- bacaSms(3);
- bacaIsiSms();
- parsingSms();
- hapusSms();
- sei();
- }
- */
- // kirimSerial0(dataSim900);
- // kirimSerial0("\r\n");
- dataComplete = 1;
- countEnter=0;
- countData=0;
- clearBufferSim900();
- }
- }
- else {
- dataSim900[countData] = data;
- countData++;
- }
- }
- char uart2Terima() {
- while(!(UCSR2A&(1<<RXC2)));
- return UDR2;
- }
- void clearBufferSer2() {
- char dd;
- while(!(UCSR2A&(1<<RXC2))){
- dd = UDR2;
- }
- }
- void clearIsiSms() {
- for(int i=0;i<500;i++) {
- isiSms[i]=0;
- }
- }
- void bacaIsiSms() {
- char bufferSms;
- unsigned char countReceiveChar = 0;
- unsigned char countNewlineChar = 0;
- clearIsiSms();
- while(1) {
- bufferSms = uart2Terima();
- if(bufferSms=='\r'||bufferSms=='\n') {
- countNewlineChar++;
- if(countNewlineChar>=10) {
- break;
- }
- }
- else {
- isiSms[countReceiveChar]=bufferSms;
- countReceiveChar++;
- }
- }
- }
- void parsingSms() {
- // +CMGR: "REC UNREAD","+6285765221924","","13/01/06,23:55:15+28"webOK
- int panjangKarakter = 0;
- int posisiCharPetik = 0;
- int posisiCharO = 0;
- panjangKarakter = strlen(isiSms);
- // cari karakter " dan huruf O
- for(int i=0;i<panjangKarakter;i++) {
- if(isiSms[i]=='"'){
- posisiCharPetik = i;
- }
- else if(isiSms[i]=='O') {
- posisiCharO = i;
- }
- }
- // sprintf(bufferSerial0,"Posisi \" = %d Posisi O = %d\r\n",posisiCharPetik, posisiCharO);
- // kirimSerial0(bufferSerial0);
- // ambil isi text sms
- char sms[50];
- for(int i=0;i<50;i++){
- sms[i]=0;
- }
- int startCount = 0;
- for(int i=posisiCharPetik+1;i<posisiCharO;i++) {
- sms[startCount] = isiSms[i];
- startCount++;
- }
- // sprintf(bufferSerial0,"Hasil parsing = %s \r\n",sms);
- // kirimSerial0(bufferSerial0);
- if(strcmp(sms,"on")==0) {
- digitalWrite(RELAY, HIGH);
- digitalWrite(LED_PIN, LOW);
- }
- else if(strcmp(sms,"off")==0){
- digitalWrite(RELAY, LOW);
- digitalWrite(LED_PIN, HIGH);
- }
- else{
- digitalWrite(RELAY, LOW);
- digitalWrite(LED_PIN, HIGH);
- }
- }
- void initSIM900() {
- initSerial2();
- delay(50);
- setEchoOff();
- testCommand();
- setTextMode();
- hapusSms();
- }
- void setTextMode() {
- // kirimSerial0("Set Text Mode\r\n");
- kirimSerial2("AT+CMGF=1\r\n");
- delay(50);
- }
- void testCommand() {
- // kirimSerial0("Test Send AT\r\n");
- kirimSerial2("AT\r\n");
- delay(50);
- }
- void bacaSms(int index) {
- //kirimSerial0("Baca SMS Index 1\r\n");
- sprintf(bufferSerial2,"AT+CMGR=%d\r\n",index);
- // kirimSerial2("AT+CMGR=1\r\n");
- kirimSerial2(bufferSerial2);
- delay(50);
- }
- void setEchoOff() {
- // kirimSerial0("Set Echo Off\r\n");
- kirimSerial2("ATE0\r\n");
- delay(50);
- }
- void hapusSms() {
- //kirimSerial0("Delete All Message\r\n");
- // kirimSerial2("AT+CMGD=1,4\r\n");
- kirimSerial2("AT+CMGD=1,4\r\n");
- delay(50);
- }
Advertisement
Add Comment
Please, Sign In to add comment