#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin);
String SmsStorePos = String("");
String msg = String("");
String snTmp = String("");
String snFull = String("");
int SmsContentFlag = 0;
int ledPin = 5;
int powerPin = 6;
void setup()
{
mySerial.begin(19200);
mySerial.print("\r");
delay(1000);
Serial.begin(19200);
Serial.println("Started!");
pinMode( ledPin, OUTPUT );
digitalWrite( ledPin, HIGH );
pinMode( powerPin, OUTPUT);
// digitalWrite(powerPin, LOW);
// delay(3000);
// digitalWrite(powerPin, HIGH);
// delay(5000);
// digitalWrite ( ledPin, HIGH);
// delay(1000);
// digitalWrite( ledPin, LOW);
mySerial.print("AT+CMGF=1\r");
delay(1000);
}
void loop()
{
char SerialInByte;
if(Serial.available())
{
mySerial.print((unsigned char)Serial.read());
}
else if(mySerial.available())
{
char SerialInByte;
SerialInByte = (unsigned char)mySerial.read();
Serial.print( SerialInByte );
if( SerialInByte == 13 ){
ProcessGprsMsg();
}
if( SerialInByte == 10 ){
}
else {
msg += String(SerialInByte);
}
}
}
void ProcessSms( String sms ){
sms.toLowerCase();
Serial.print( "ProcessSms for [" );
Serial.print( sms );
Serial.println( "]" );
if( sms.indexOf("on") >= 0 ){
digitalWrite( ledPin, LOW );
Serial.println( "LED IS ON" );
delay (5000);
digitalWrite( ledPin, HIGH );
Serial.println( "LED IS OFF" );
return;
}
if( sms.indexOf("off") >= 0 ){
digitalWrite( ledPin, HIGH );
Serial.println( "LED IS OFF" );
return;
} else {
mySerial.print("AT+CMGF=1\r");
delay(1000);
mySerial.print("AT+CMGS=\"");
mySerial.print(snFull);
mySerial.print("\"\r");
delay(1000);
mySerial.print("Intruksi SMS tidak valid : ");
mySerial.print(sms);
mySerial.print("\r");
delay(1000);
mySerial.write(0x1A);
return;
}
}
void GprsTextModeSMS(){
mySerial.println( "AT+CMGF=1" );
}
void GprsReadSmsStore( String SmsStorePos ){
mySerial.print( "AT+CMGR=" );
mySerial.println( SmsStorePos );
}
void ClearGprsMsg(){
msg = "";
}
void ProcessGprsMsg() {
Serial.println("");
Serial.print( "Pesan GPRS: [" );
Serial.print( msg );
Serial.println( "]" );
if( msg.indexOf( "Call Ready" ) >= 0 ){
Serial.println( "*** Sistem siap menerima instruksi ***" );
GprsTextModeSMS();
}
if( msg.indexOf( "+CMTI" ) >= 0 ){
Serial.println( "*** Ada SMS Masuk ***" );
int iPos = msg.indexOf( "," );
SmsStorePos = msg.substring( iPos+1 );
Serial.print( "SMS terekam di possisi: " );
Serial.println( SmsStorePos );
GprsReadSmsStore( SmsStorePos );
}
if( msg.indexOf( "+CMGR:" ) >= 0 ){
int snPos = msg.indexOf("+1");
Serial.print("SMS Dari: ");
snTmp = msg.substring(snPos+1);
snFull = "";
for (int i = 0; i < 11; i++){
snFull += snTmp[i];
}
Serial.println(snFull);
SmsContentFlag = 1;
ClearGprsMsg();
return;
}
if( SmsContentFlag == 1 ){
Serial.println( msg );
Serial.println( "ISI SMS :" );
ProcessSms( msg );
delSMS();
}
ClearGprsMsg();
SmsContentFlag = 0;
}
void delSMS() {
mySerial.print("AT+CMGD=");
mySerial.println(SmsStorePos);
Serial.println( "Menghapus SMS" );
}
Comments