bangnaga icon

SMS ICOMSAT Read SMS (Control Relay With Delay)

bangnaga | PRO | 06/23/25 06:40:27 AM UTC (Edited) | 0 ⭐ | 196 👁️ | Never ⏰ | []
C |

3.54 KB

|

None

|

0 👍

/

0 👎

#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