sim800l не поднимает трубку
Добавлено: 30 апр 2018, 19:02
				
				Добрый вечер форумчане, долго искал причину, но не смог её найти, поэтому прошу Вашей помощи.
пытаюсь собрать сигнализацию для гаража начитался статей, насмотрелся видео, собрал проэкт как в видео уроке (https://www.youtube.com/watch?v=4DvQWTe2FrA), но сим800 не поднимает телефон. Если залить другой скетч, то при прописывании ATA в мониторе порта он поднимает трубку и понимает дтмф команды.В Чем моя ошибка ?
			пытаюсь собрать сигнализацию для гаража начитался статей, насмотрелся видео, собрал проэкт как в видео уроке (https://www.youtube.com/watch?v=4DvQWTe2FrA), но сим800 не поднимает телефон. Если залить другой скетч, то при прописывании ATA в мониторе порта он поднимает трубку и понимает дтмф команды.В Чем моя ошибка ?
Код: Выделить всё
#include <SoftwareSerial.h>                     // Библиотека програмной реализации обмена по UART-протоколу
SoftwareSerial SIM800(8, 9);                    // RX, TX
String _response = "";                          // Переменная для хранения ответа модуля
void setup() {
  Serial.begin(9600);                           // Скорость обмена данными с компьютером
  SIM800.begin(9600);                           // Скорость обмена данными с модемом
  Serial.println("Start!");
  sendATCommand("AT", true);                    // Отправили AT для настройки скорости обмена данными
  _response = sendATCommand("AT+DDET=1", true); // Включаем DTMF
}
String sendATCommand(String cmd, bool waiting) {
  String _resp = "";                            // Переменная для хранения результата
  Serial.println(cmd);                          // Дублируем команду в монитор порта
  SIM800.println(cmd);                          // Отправляем команду модулю
  if (waiting) {                                // Если необходимо дождаться ответа...
    _resp = waitResponse();                     // ... ждем, когда будет передан ответ
    // Если Echo Mode выключен (ATE0), то эти 3 строки можно закомментировать
    if (_resp.startsWith(cmd)) {                // Убираем из ответа дублирующуюся команду
      _resp = _resp.substring(_resp.indexOf("\r\n", cmd.length()) + 2);
    }
    Serial.println(_resp);                      // Дублируем ответ в монитор порта
  }
  return _resp;                                 // Возвращаем результат. Пусто, если проблема
}
String waitResponse() {                         // Функция ожидания ответа и возврата полученного результата
  String _resp = "";                            // Переменная для хранения результата
  long _timeout = millis() + 10000;             // Переменная для отслеживания таймаута (10 секунд)
  while (!SIM800.available() && millis() < _timeout)  {}; // Ждем ответа 10 секунд, если пришел ответ или наступил таймаут, то...
  if (SIM800.available()) {                     // Если есть, что считывать...
    _resp = SIM800.readString();                // ... считываем и запоминаем
  }
  else {                                        // Если пришел таймаут, то...
    Serial.println("Timeout...");               // ... оповещаем об этом и...
  }
  return _resp;                                 // ... возвращаем результат. Пусто, если проблема
}
void loop() {
  if (SIM800.available())           // Ожидаем прихода данных (ответа) от модема...
    Serial.write(SIM800.read());    // ...и выводим их в Serial
  if (Serial.available())           // Ожидаем команды по Serial...
    SIM800.write(Serial.read());    // ...и отправляем полученную команду модему
}