Отследить входящий звонок gsm

Обсуждаем цифровые устройства...
Ответить
mixa13
Родился
Сообщения: 2
Зарегистрирован: Вт фев 09, 2010 22:06:31

Отследить входящий звонок gsm

Сообщение mixa13 »

Добрый вечер, помогите разобраться, требуется собрать схему которая будет при входящем звонке включает\выключает реле. Собрал схему в которой при нажатии на кнопку телефон начинает звонить.

Код: Выделить всё

        if (PINC.5==0)
        { 

          printf("ATZ");
          putchar(0x0D);
          delay_ms(1000);
          printf("ATD+1234567890;");
          putchar(0x0D);
          delay_ms(1000);
        };
Это что касается отправки АТ команды, а как принять команду, нужно чтото типо того

Код: Выделить всё

if(входящий звонок номер - xxxxxxxxx) { PORTA.0 = 1; }
Реклама
Аватара пользователя
As
Модератор
Сообщения: 46097
Зарегистрирован: Пт янв 23, 2009 19:20:05

Сообщение As »

Включить нужного абонента в отдельную группу, в качестве сигнала - поставить для этой группы вибрацию, к моторчику подключить реле...
Реклама
TechMike
Прорезались зубы
Сообщения: 247
Зарегистрирован: Сб дек 15, 2007 23:00:54
Откуда: Moscow
Контактная информация:

Сообщение TechMike »

Не нужно извращаться с группой, достаточно собирать данные пришедшие с телефона в буфер из символов и искать там RING, это будет признаком входящего звонка.
А если в телефон дать команду AT+CLIP=1, то при звонке будет выводиться еще и номер звонившего, формат вывода будет вот такой:

RING

+CLIP: +71234567,145

Все понятно?
mixa13
Родился
Сообщения: 2
Зарегистрирован: Вт фев 09, 2010 22:06:31

Сообщение mixa13 »

Не совсем понял как это выглядеть будет на С, можно поподробнее
printf("ATZ"); // Инициализация
putchar(0x0D); // На новую строчку
delay_ms(1000); // Задержка
printf("AT+CLIP=1"); // Посылаем AT+CLIP=1
putchar(0x0D); // На новую строчку
delay_ms(1000); // Задержка

// Какой командой считывать ответ?
Реклама
Эиком - электронные компоненты и радиодетали
TechMike
Прорезались зубы
Сообщения: 247
Зарегистрирован: Сб дек 15, 2007 23:00:54
Откуда: Moscow
Контактная информация:

Сообщение TechMike »

mixa13 писал(а):Не совсем понял как это выглядеть будет на С, можно поподробнее

// Какой командой считывать ответ?
Вот куски кода на winavr

Код: Выделить всё

 if (strstr(rx_buffer, "BUSY")){
  //ответ получен, нужно закончить звонить или звонить другому абоненту
  Dial_count--;
  if (Dial_count>0 && protection_mode==1){
    DialtoAll();
  }
Дальше в бесконечном цикл просто идет проверка буфера символов из USART на поиск определенной строки

Код: Выделить всё

 if (strstr(rx_buffer, "BUSY")){
  //ответ получен, нужно закончить звонить или звонить другому абоненту
  Dial_count--;
  if (Dial_count>0 && protection_mode==1){
    DialtoAll();
  }
Реклама
Ответить

Вернуться в «Цифровая техника»