I am sorry.
I tried to send the sms to the number inside my gsm. I would like the gsm to reply. I managed to send the sms but the gsm did not reply it back. there will be different sender's number that i will use to send the sms to gsm. that is the reason why i used remoteNumber.
int8_t answer;
int x;
char SMS[200];
char remoteNumber[20]; // Holds the emitting number
//String number;
//char incomingNumber[20];
//=========================================================================================================
void setup()
{
Serial.begin(9600);
pinMode(8, OUTPUT);
digitalWrite(8, LOW);
power_on();
delay(1000);
Serial.println("Network...");
while( (sendATcommand("AT+CREG?", "+CREG: 0,1", 500) || sendATcommand("AT+CREG?", "+CREG: 0,5", 500)) == 0 );
delay(300);
Serial.println("Setting SMS mode...");
sendATcommand("AT+CMGF=1", "OK", 1000); // sets the SMS mode to text
delay(300);
sendATcommand("AT+CMGD=1", "OK", 1000);
Serial.println("SEND SMS... TO READ");
}
//========================================================================================================
void loop()
{
answer = sendATcommand("AT+CMGR=1", "+CMGR:", 2000); // reads the first SMS
if (answer == 1)
{x=0;
memset(SMS, '\0', 100);
answer = 0;
while(Serial.available() == 0);
// this loop reads the data of the SMS
do{
// if there are data in the UART input buffer, reads it and checks for the asnwer
if(Serial.available() > 0)
{
SMS[x] = Serial.read();
x++;
// check if the desired answer (OK) is in the response of the module
if (strstr(SMS, "light ON") != NULL)
{
digitalWrite(8, HIGH);
answer = 1;
sendTextMessage(remoteNumber);
break;
}
delay (200);
}}
while(answer == 0); // Waits for the asnwer with time out
SMS[x] = '\0';
Serial.print(SMS);
delay(200);
sendATcommand("AT+CMGD=1", "OK", 1000);
delay(100);
sendATcommand("AT+CMGD=1,4", "OK", 1000);
delay(200);
}
delay(1000);
}
void power_on()
{
uint8_t answer=0;
answer = sendATcommand("AT", "OK", 2000);
if (answer == 0)
{
// waits for an answer from the module
while(answer == 0)
{ // Send AT every two seconds and wait for the answer
answer = sendATcommand("AT", "OK", 2000);
}
}
}
int8_t sendATcommand(char* ATcommand, char* expected_answer, unsigned int timeout)
{
uint8_t x=0, answer=0;
char response[100];
unsigned long previous;
memset(response, '\0', 100); // Initialice the string
delay(100);
while( Serial.available() > 0) Serial.read(); // Clean the input buffer
Serial.println(ATcommand); // Send the AT command
x = 0;
previous = millis();
// this loop waits for the answer
do
{
// if there are data in the UART input buffer, reads it and checks for the asnwer
if(Serial.available() != 0){
response[x] = Serial.read();
x++;
// check if the desired answer is in the response of the module
if (strstr(response, expected_answer) != NULL)
{
answer = 1;
}
}
// Waits for the asnwer with time out
}while((answer == 0) && ((millis() - previous) < timeout));
return answer;
}
void Signal()
{
answer = sendATcommand("AT+CSQ", "+CSQ", 2000); // reads the first SMS
if (answer == 1)
{x=0;
memset(SMS, '\0', 300);
answer = 0;
while(Serial.available() == 0);
do{
// if there are data in the UART input buffer, reads it and checks for the asnwer
if(Serial.available() > 0){
SMS[x] = Serial.read();
x++;
if (strstr(SMS, "OK") != NULL)
{
answer = 1;
}
}
}while(answer == 0); // Waits for the asnwer with time out
SMS[x] = '\0';
Serial.println(SMS);
delay(100);
}
}
void sendTextMessage(String remoteNumber) {
Serial.print("sendTextMessage: ");
Serial.print(remoteNumber);
//Serial.println(message);
Serial.println("AT + CMGS = \"" + remoteNumber + "\"");
delay(100);
Serial.print("Sent from my Arduino.");
delay(100);
Serial.println((char)26); // ASCII code of the ctrl+z is 26
delay(100);
Serial.println();
}