/* 
Тестировалось на Arduino IDE 1.8.5
Дата тестирования 28.03.2019г.
*/ 
 
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2);          // Выводы SIM800L Tx & Rx подключены к выводам Arduino 3 и 2

void setup()
{
  Serial.begin(19200);                   // Инициализация последовательной связи с Arduino и Arduino IDE (Serial Monitor)
  mySerial.begin(19200);                 // Инициализация последовательной связи с Arduino и SIM800L
  Serial.println("Initializing...");    // Печать текста
  delay(1000);                          // Пауза 1 с

  mySerial.println("AT");               // Отправка команды AT
  updateSerial();
  mySerial.println("AT+CSQ");           // Проверка качества сигнала, диапазон значений 0-31, 31 - лучший
  updateSerial();
  mySerial.println("AT+CCID");          // Чтение информацию о SIM-карте
  updateSerial();
  mySerial.println("AT+CREG?");         // Проверка регистрации в сети
  updateSerial();
}

void loop()
{
  updateSerial();
}

void updateSerial()
{
  delay(500);                           // Пауза 500 мс
  while (Serial.available()) 
  {
    mySerial.write(Serial.read());      // Переадресация с последовательного порта SIM800L на последовательный порт Arduino IDE
  }
  while(mySerial.available()) 
  {
    Serial.write(mySerial.read());      // Переадресация c Arduino IDE на последовательный порт SIM800L
  }
}