Hello,
I hope this is the right place to post this question.
I'm working with sim800 module to light up a led on pin 4, everything's okay when it comes to receive an sms without calling but I wanted the module to call me to be sure that the message is received, when I add the "atdxxxxxx" command the module calls mes but when i send another sms nothing happens;
here's my code, please let me know what's my mistake
#include <gprs.h>
#include <softwareserial.h>
#define TIMEOUT 4000
bool ledStatus;
GPRS gprs;
void setup() {
pinMode(4, OUTPUT);
Serial.begin(9600);
while(!Serial);
Serial.println("Starting SIM800 SMS Command Processor");
gprs.preInit();
delay(1000);
while(0 != gprs.init()) {
delay(1000);
Serial.print("init error\r\n");
}
//Set SMS mode to ASCII
if(0 != gprs.sendCmdAndWaitForResp("AT+CMGF=1\r\n", "OK", TIMEOUT)) {
ERROR("ERROR:CNMI");
return;
}
//Start listening to New SMS Message Indications
if(0 != gprs.sendCmdAndWaitForResp("AT+CNMI=1,2,0,0,0\r\n", "OK", TIMEOUT)) {
ERROR("ERROR:CNMI");
return;
}
ledStatus = 0;
Serial.println("Init success");
}
//Variable to hold last line of serial output from SIM800
char currentLine[500] = "";
int currentLineIndex = 0;
//Boolean to be set to true if message notificaion was found and next
//line of serial output is the actual SMS message content
bool nextLineIsMessage = false;
void loop() {
//Write current status to LED pin
if (ledStatus==1) {
digitalWrite(4, HIGH);
} else {
digitalWrite(4, LOW);
}
//If there is serial output from SIM800
if(gprs.serialSIM800.available()){
char lastCharRead = gprs.serialSIM800.read();
//Read each character from serial output until \r or \n is reached (which denotes end of line)
if(lastCharRead == '\r' || lastCharRead == '\n'){
String lastLine = String(currentLine);
//If last line read +CMT, New SMS Message Indications was received.
//Hence, next line is the message content.
if(lastLine.startsWith("+CMT:")){
Serial.println(lastLine);
nextLineIsMessage = true;
} else if (lastLine.length() > 0) {
if(nextLineIsMessage) {
Serial.println(lastLine);
//Read message content and set status according to SMS content
if(lastLine.indexOf("004F004E") >= 0 || lastLine.indexOf("ON") >= 0){
ledStatus = 1;
gprs.sendCmd("ATD0550xxxxxx;\r\n");
delay(10000);
gprs.sendCmd("ATH\r\n");
delay(300);
} else if(lastLine.indexOf("004F0046") >= 0 || lastLine.indexOf("OFF") >= 0) {
ledStatus = 0;
gprs.sendCmd("ATD0550xxxxxxx;\r\n");
delay(10000);
gprs.sendCmd("ATH\r\n");
delay(300);
}
nextLineIsMessage = false;
}
}
//Clear char array for next line of read
for( int i = 0; i < sizeof(currentLine); ++i ) {
currentLine[i] = (char)0;
}
currentLineIndex = 0;
} else {
currentLine[currentLineIndex++] = lastCharRead;
}
}
}