Arduino:Библиотеки/GSM/Класс GSMVoiceCall/hangCall()

Материал из Онлайн справочника
Версия от 18:34, 9 декабря 2016; Myagkij (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.

Функция hangCall()[1]

Вешает трубку во время установленного соединения или звонков, информирующих о входящем вызове. Возвращаемые данные отличаются в зависимости от режима GSM-соединения (он может быть синхронным и асинхронным). Подробнее читайте ниже.

Синтаксис

voice.hangCall()

Параметры

Нет.

Что возвращает

В асинхронном режиме: если последняя команда еще выполняется  «0», если успешно выполнена  «1», если ошибка  меньше «1».
В синхронном режиме: если трубка повешена  «1», если нет  «0». Тип данных  int.

Пример

// библиотеки:
#include <GSM.h>

// PIN-код:
#define PINNUMBER ""

// инициализируем экземпляр библиотеки:
GSM gsmAccess; // чтобы включить режим отладки, в скобочках нужно поставить параметр «true»
GSMVoiceCall vcs;


char numtel[20];           // буфер для входящего звонка

void setup()
{
  // инициализируем последовательную коммуникацию:
  Serial.begin(9600);
  Serial.println("Receive Voice Call");  //  "Прием голосового звонка"

  // состояние соединения:
  boolean notConnected = true;

  // запускаем GSM-модуль; если у SIM-карты есть PIN-код,
  // вписываем его в скобочки функции begin():
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");  //  "Соединение не удалось"
      delay(1000);
    }
  }

  // кладем трубку на тот случай, если через это устройство 
  // уже идет звонок; это нужно для того, чтобы модем корректно 
  // реагировал на входящие события:
  vcs.hangCall();

  Serial.println("Waiting Call");  //  "Ожидание звонка"

}

void loop()
{
  // проверяем статус голосового звонка:
  switch (vcs.getvoiceCallStatus()) 
  {
    case IDLE_CALL: // ничего не происходит

      break;

    case CALLING: // этого произойти не должно, потому что звоним не мы

      Serial.println("CALLING");  //  "ЗВОНОК"
      break;

    case RECEIVINGCALL: // Да! Нам кто-то звонит

      Serial.println("RECEIVING CALL");  //  "ПРИЕМ ЗВОНКА"

      // считываем номер звонящего:
      vcs.retrieveCallingNumber(numtel, 20);

      // показываем этот номер на мониторе порта:
      Serial.print("Number:");  //  "Номер:"
      Serial.println(numtel);

      // отвечаем на звонок, устанавливаем соединение:
      vcs.answerCall();         
      break;

    case TALKING:  // в этом случае связь будет установлена

      Serial.println("TALKING. Enter line to interrupt.");  //  "РАЗГОВОР. Введите Enter, чтобы прервать."
      while(Serial.read()!='\n')
        delay(100);
      vcs.hangCall();
      Serial.println("HANG. Waiting Call.");  //  "ВЕШАЕМ ТРУБКУ. Ждем звонка."         
      break;
  }
  delay(1000);
}

См.также

  1. getVoiceCallStatus()
  2. ready()
  3. voiceCall()
  4. answerCall()
  5. hangCall()
  6. retrieveCallingNumber()

Внешние ссылки