Перейти к содержанию

Простая говорящая GSM - сигнализация.


Рекомендуемые сообщения

 

scheme_jpg.jpg.f6efa0bb1e6d66ad368b34e567b8ab05.jpgПрограмма для говорящей GSM-сигнализации на языке BASCOM-AVR 

' Авторская работа. Автор:  Дмитрий Абловацкий.
'Программа для говорящей GSM сигнализации на модуле SIM800L.
'SIM800L Revision:1418B04SIM800L24.
'Настройка микроконтроллера Attiny85: фюзы, изменение только LOW на $E2

$regfile = "attiny85.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

Config Portb.0 = Input
Config Portb.1 = Output
Config Portb.2 = Input
Open "comb.3:9600,8,n,1" For Input As #2       'RXD - вход
Open "comb.4:9600,8,n,1" For Output As #1       'TXD - выход

Dim Buffered As String * 300
Dim On_off As Bit
Dim In_str As Byte
Dim I As Byte
Dim I1 As Long
Dim Telephone As String * 12

Config Debounce = 100
Telephone = "registered"

' - - - - - - - - - - -Подготовка модуля - - - - - - - - - -
Reset Portb.1       'выход модуля из спящего режима
Wait 12   ' время для самоподготовки модуля
Print #1 , "AT"       ' Проверка на готовность модуля к работе
Input #2 , Buffered       ' Ответ
In_str = Instr(buffered , "0")
If In_str = 0 Then
Waitms 250
Print #1 , "ATE0V0+CMEE=0;+CLIP=0"       'Выкл эха, только код ошибки, выключить АОН
Input #2 , Buffered       ' Ответ
'Waitms 250
'Print #1 , "AT+CNMI=1,2,0,0,0"       ' СМС не сохранять, направлять в микроконтроллер
'Input #2 , Buffered       ' Ответ
Waitms 250
Print #1 , "ATS0=0"       ' автоответ ручной
Input #2 , Buffered       ' Ответ
Waitms 250
Print #1 , "AT+CSCLK=1"       ' спящий режим
Input #2 , Buffered       ' Ответ
Waitms 250
Print #1 , "AT+CLCC=1"       ' установить автоматическое отображение статуса
Input #2 , Buffered       ' Ответ
Waitms 250
Print #1 , "AT&W"       ' сохранить
Input #2 , Buffered       ' Ответ
End If

Print #1 , "AT+CPIN?"       ' Готовность модуля к работе с картой
Input #2 , Buffered       ' Ответ  +CPIN READY  или 4- нет карты
In_str = Instr(buffered , "SIM PIN")
Input #2 , Buffered       ' Ответ 0 - OK  или нет ответа
If In_str <> 0 Then       'если карта есть, но нужен PIN - код
Print #1 , "AT+CPIN=0000"       'PIN - код   !Возможно Сим-карта заблокируется  после 3 неправильных
Input #2 , Buffered       ' Ответ  0 - OK или 4- неправильный PIN - код
Input #2 , Buffered       ' Ответ +CPIN READY  или  нет ответа
Input #2 , Buffered       ' Ответ Call Ready   или  нет ответа
Input #2 , Buffered       ' Ответ SMS Ready  или  нет ответа
End If

Wait 2
For I = 1 To 3
Print #1 , "AT+CPAS"       'Готовность к выполнению команд
Input #2 , Buffered       ' Ответ
In_str = Instr(buffered , "0")
If In_str <> 0 Then       'Если модуль готов к работе
Wait 1
Print #1 , "AT+CREG?"       ' проверка на регистрацию в сети
Input #2 , Buffered       ' Ответ
In_str = Instr(buffered , ",1")
If In_str <> 0 Then       ' если зарегистрирован
Goto M1   ' выход , иначе ещё попытки
End If
End If
If I = 2 Then
Wait 1
Print #1 , "AT+CFUN=1,1"       'перезагрузка модуля
Input #2 , Buffered       ' Ответ
Wait 5
End If
Wait 5
Next

M1:
Do
' - - - - - - - - - - - PIR датчик  - - - - - - - - - -
 If Pinb.2 = 1 And On_off = 1 And Pinb.0 = 1 Then       ' если 1
Wait 3  ' время для пробуждения  SIM800L
For I = 1 To 3       ' три попытки дозвониться
Print #1 , "AT+CCALR?"       ' идентификатор готовности совершить звонок
Input #2 , Buffered       ' Ответ
Input #2 , Buffered       ' Ответ
In_str = Instr(buffered , " 1")
If In_str <> 0 Then       ' если готов совершить звонок       ' если 2
Wait 1
Print #1 , "ATD" ; Telephone ; ";"       '  набор номера
Input #2 , Buffered       'ответ
Input #2 , Buffered       'ответ
Input #2 , Buffered       'ответ    ' голосовое соединение
In_str = Instr(buffered , "3,0,0")       '
If In_str <> 0 Then       ' если голосовое соединение  ' если 3

For I1 = 1 To 4000000       ' примерно 40 сек ожидание, если соединение и бездействие до сброса
If Pinb.3 = 0 Then       ' если  абонент возьмёт трубку или  сбросит соединение
Input #2 , Buffered       'ответ

Wait 1
For I1 = 1 To 500000       ' примерно 5 сек ожидание сброса
If Pinb.3 = 0 Then       ' если сброс соединения
Input #2 , Buffered       'ответ
Goto M2
End If
Next

In_str = Instr(buffered , "0,0,0")
If In_str <> 0 Then       ' если голосовое соединение
Print #1 , "AT+CREC=4,C:\User\3__.amr,1,100"       ' передача речевого сообщения
Input #2 , Buffered       ' Ответ
Wait 8    'Время речевого сообщения + добавленное
M2:
Waitms 250
Print #1 , "ATH0"
Input #2 , Buffered
Bitwait Pinb.2 , Reset
Goto M1
End If

End If
Next

End If    ' 3-End If
End If    ' 2-End If
Wait 1
Print #1 , "ATH0"
Input #2 , Buffered
Wait 10
Next

End If    ' 1-End If
' - - - - - - - - - - -Проверка на входящий звонок по  RING - - - - - - - - - -
If Pinb.0 = 0 Then       ' если поступил звонок
 ' - - - - - - - - - - - включение и выключение сигнализации  - - - - - - - - - -
Input #2 , Buffered       ' Ответ   +CLCC: 1,1,4,0,0,"+7**********",145,""
In_str = Instr(buffered , "+7" )
If Telephone = "registered" Then
Telephone = Mid(buffered , In_str , 12 )
Else
In_str = Instr(buffered , Telephone )
End If
Input #2 , Buffered       ' Ответ 2 - первый звонок
Input #2 , Buffered       ' Ответ 2 - второй звонок
If In_str <> 0 Then       ' если зарегистрированный номер телефона
In_str = Instr(buffered , "1,6,0,0,")       '  если сброс
If In_str = 0 Then       '  если входящий звонок продолжается
Waitms 250
Print #1 , "ATA"
Input #2 , Buffered       ' Ответ
Input #2 , Buffered       ' Ответ  +CLCC: 1,1,0,0,0,"+7**********",145,""
If On_off = 0 Then
On_off = 1
Wait 1
Print #1 , "AT+CREC=4,C:\User\1__.amr,1,100"       ' передача речевого сообщения
Input #2 , Buffered       ' Ответ
Wait 8    'Время речевого сообщения + добавленное
Print #1 , "ATH0"
Input #2 , Buffered       ' Ответ
Else
On_off = 0
Wait 1
Print #1 , "AT+CREC=4,C:\User\2__.amr,1,100"       '  передача речевого сообщения
Input #2 , Buffered       ' Ответ
Wait 8    'Время речевого сообщения + добавленное
Print #1 , "ATH0"
Input #2 , Buffered       ' Ответ
End If
End If
Else      ' если незарегистрированный номер телефона
Wait 1
Print #1 , "ATH0"
Input #2 , Buffered       ' Ответ
Bitwait Pinb.0 , Set
End If
End If

Set Portb.1       ' в спящий режим SIM800L
Enable Interrupts
Enable Int0
Enable Pcint0
Idle      ' в спящий режим микроконтроллер
Reset Portb.1       ' выход модуля из спящего режима
Disable Interrupts
Disable Int0
Disable Pcint0
Loop
End

Источник https://178654.blogspot.com/p/gsm.html

 

 

Изменено пользователем Дмитрий -
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...