SIM800C: How to make call to other number if first number is busy or no answer

Hi,
Everyone can help me code for sim800c to make call if red led "ON". And if first number didn't give message "yes", SIM800c would call second number

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);

#define BTN 7
#define RELAY 8

int BTN_state;

void KT_BTN() {
  if (digitalRead(BTN) == LOW) {
    delay(20);
    if (digitalRead(BTN) == LOW) {
      BTN_state++;
      if (BTN_state > 1) {
        BTN_state = 0;
        digitalWrite(RELAY, LOW); // Tắt relay khi nút được nhấn lần thứ hai
        Serial.println("da nhan off");
      }
      if (BTN_state == 1) {
        Serial.println("da nhan on");
        digitalWrite(RELAY, HIGH);
      }
    }
    while (digitalRead(BTN) == LOW);
  }
}

String readSerial() 
{
  delay(100);
  if (mySerial.available()) {
    return mySerial.readString();
  }
}

void CallNumber(String phoneNumber) {
  mySerial.print("ATD+ ");
  mySerial.print(phoneNumber);
  mySerial.println(";");
  Serial.println(readSerial());
  delay(10000);
  mySerial.println("ATH");
  delay(200);
  Serial.println(readSerial());
}

void ReceiveSMS() {
  Serial.println ("SIM800C Read an SMS");
  mySerial.println("AT+CMGF=1");
  Serial.println(readSerial());
  mySerial.println("AT+CNMI=1,2,0,0,0"); 
  Serial.println(readSerial());
}

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(BTN, INPUT_PULLUP);
  pinMode(RELAY, OUTPUT);
  digitalWrite(RELAY, LOW);
  BTN_state = 0;
}

void loop() {
  if (digitalRead(RELAY) == HIGH) 
  {
    Serial.println("ON RED LED");
    delay(200);
    CallNumber("+xxxxxxxxxxx");
    delay(2000);
    ReceiveSMS();
    delay(200);
    if (Serial.available() > 1)
    {
      String input = Serial.readStringUntil('\n');
      if(input == "yes")
      {
         CallNumber("+xxxxxxxxxxx");  
      }
    }
  }
  KT_BTN();
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.