Чае-Кофе-Наливалка.

Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

Re: Чае-Кофе-Наливалка.

Сообщение ev3658 »

Открыть новую тему или тут продолжить?
Для ознакомления:
GSM СССР - тема на родном городе форум.
GSM СССР - на форуме bascomavr.3bb.ru
Альбом - в Вконтакте.
Это звонок телефона:
Изображение
Это тот самый телефон:
Изображение
Автограф )
Изображение
Всё используется и уже работает, переделываю прошивку.
Изображение
Начало кода:

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

$regfile = "m8def.dat"
$crystal = 14745600
$hwstack = 16
$swstack = 64
$framesize = 32
$baud = 19200

'Config Timer0 = Timer , Prescale = 1024 , Compare A = Set , Clear Timer = 1
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0
'Config Serialin = Buffered                                  , Size = 32

Declare Sub Nokia_init()
Declare Sub Nokia_clear()
Declare Sub Nokia_text(byval Nokia_x As Byte , Byval Nokia_y As Byte , Byval Nokia_text As String , Byval Nokia_inversion As Byte)


Nokia_spi_data Alias Portb.1                                'MOSI       - можно задать любую ножку
Nokia_spi_clock Alias Portb.2                               'SCK        - можно задать любую ножку
Nokia_cs Alias Portb.0                                      'CS         - можно задать любую ножку
Display_reset Alias Portd.7                                 'LCD_RESET  - можно задать любую ножку
Display_reset = 1
Nokia_cs = 1

Dim W As Iram Word At 8 Overlay
Dim Nokia_data_9 As Integer


Dim X As Byte



'порты экрана
Config Portd.7 = Output
Config Portb.0 = Output
Config Portb.2 = Output
Config Portb.1 = Output


Config Portc.3 = Output                                     'подсветка и питание набирателя
Config Portc.4 = Input                                      'начало набора номера

Config Portd.2 = Output                                     ' питание микрофона и звуки
Config Portd.4 = Output                                     ' Таймер Звука Занято И Т.п.



'порт положения трубки
Config Portd.3 = Input
'порты звонка
Config Portd.5 = Output
Config Portd.6 = Output
'алиасы
Faza1 Alias Portd.5
Faza2 Alias Portd.6

Faza2 = 0

Trubka Alias Pind.3
Naborcifri Alias Pinc.2
Pitanienabiratela Alias Portc.3
Prerivanienabiratela Alias Pinc.4
Microfon Alias Portd.2
Dinamik Alias Portd.4

Dim P As Byte
Dim O As Byte
Dim N As Byte                                               'переменные для набирателя
Dim N1 As Byte                                              'переменные для набирателя
Dim Buff As Byte
Dim B As Byte
Dim Cifra(11) As Byte
'Dim Trubka As Byte
Dim Nabor As Byte                                           'состояние положена/снята трубка
Dim T As Byte
Dim T1 As Integer
Dim Tbuf As Integer                                         'антизависание в чтение буфера
Dim Zvonok As Byte
' Если Zvonok:
'0-трубка положена
'1-трубка снята без поступления звонка
'2-поступление звонка при положенной трубки
'3-трубка снята в ответ на звонок
'4-трубка положена после ответа на звонок
'5-режим набора номера
'
'
'




Dim Modem As String * 30
Dim S As String * 30
Dim Text1 As String * 16
Call Nokia_text(1 , 1 , "-==[GSM СССР]==-" , 1)
'Disable Urxc
Call Nokia_init()
Call Nokia_text(1 , 2 , ">AT" , 1)
Text1 = "AT"
Gosub Inicilizacija
Call Nokia_text(1 , 3 , ">ОК" , 1)
Print "AT"
Text1 = "AT+CHFA=1"
Call Nokia_text(1 , 4 , ">AT+CHFA=1" , 1)                   '0-телефон, 1-гарнитура (выходы у модема)
Gosub Inicilizacija
Call Nokia_text(1 , 5 , ">OK" , 1)
Text1 = "AT+CLVL=100"
Call Nokia_text(1 , 6 , ">AT+CLVL=100" , 1)

Gosub Inicilizacija
Call Nokia_text(1 , 7 , ">ОК" , 1)
Wait 1
Call Nokia_clear


Goto Programma:
'====== ПОДПРОГРАММА ===
'блок, которому в переменную Text1 указать команду можема, он будет ждать ответ ОК и повторять через каждые 25000 циклов комманду в переменной Text1 - пока не дождётся ОК
Inicilizacija:
Do
B = Inkey()
If B > 0 Then Gosub Sim300
If Modem = "OK" Then Exit Do
T1 = T1 + 1
If T1 = 25000 Then Print Text1
Loop
Return

'== Звонок ============
Zumer:
If Zvonok = 1 Then
   Waitms 1                                                 'общая задержка для 4х сек.
   T1 = T1 + 1
   If T1 <= 30 Then
      Faza1 = 1
      Faza2 = 0
      Pitanienabiratela = 0
      Waitms 35                                             'пауза фазы +
      Faza1 = 0
      Faza2 = 1
      Pitanienabiratela = 1
      Waitms 35                                             'пауза фазы -
      Faza2 = 0
   End If
   If T1 = 4000 Then T1 = 0                                 'пауза между звонком (в литре сказано должно 4 сек. но опрос буфера выгребает секунду-две
End If
Return


'=================== Подрограмма набора номера (заранее лучше обнулить N - номер ячейки массива N1 - кол-во тактов набирателя Nabor - шаг набора цифры/номера, запоминает 11 цифр в Cifra(n)
Nabornomera:

Pitanienabiratela = 1                                       'включение питания номеронабирателя
If Nabor = 0 And Naborcifri = 1 Then
    If Prerivanienabiratela = 0 Then
      N1 = N1 + 1
      Nabor = 1
   Waitms 50
   End If
End If

If Prerivanienabiratela = 1 And Nabor = 1 Then
   Nabor = 2
   Waitms 50
End If

If Nabor = 2 And Naborcifri = 1 Then Nabor = 0


If N1 <> 0 And Naborcifri = 0 Then
   If Prerivanienabiratela = 1 Then
      If N1 = 10 Then N1 = 0
         N = N + 1
         Cifra(n) = N1
         If N = 12 Then
            N = 1
            For P = 1 To 11
            Cifra(p) = 0
            Next P
      End If
      Gosub Informacia
      Nabor = 0
      N1 = 0
   End If
End If
Return



'====  ВЫВОД ГРАФИЧЕСКОЙ ИНФОРМАЦИИ ===
Informacia:
   'Call Nokia_clear()
   Call Nokia_text(1 , 1 , "-==[GSM СССР]==-" , 1)
   Call Nokia_text(1 , 2 , "Данные с модема:" , 0)
   Call Nokia_text(1 , 3 , "                " , 0)

   Call Nokia_text(1 , 8 , "=RADIOKSTOVO.RU=" , 1)
'тех.информация для отладки набора номера /переменные N/N1/порт Ц2/порт Ц4

   If Left(modem , 6) = "+CLIP:" Then
      Text1 = Mid(modem , 8 , 12)
      Call Nokia_text(1 , 3 , Text1 , 0)

   End If

      Text1 = Left(modem , 16) + Str(tbuf)
      Text1 = Text1 + "   "
      Call Nokia_text(1 , 6 , Text1 , 0)


'===вывод номера
Call Nokia_text(1 , 4 , "Набранный номер" , 0)
For P = 1 To 11
      Text1 = Str(cifra(p))
     Call Nokia_text(p , 5 , Text1 , 0)
Next P

Return

'============== РАБОТА С БУФЕРОМ И ОПРОСОМ МОДЕМА ====
Sim300:

Tbuf = 0
Do
   Tbuf = Tbuf + 1
   Select Case B
       Case 10 : If S <> "" Then
                     Modem = S
                     S = ""
                     Do
                        B = Inkey()
                     Loop Until B = 0
                     Exit Do
                    End If
                  Case Else
         If B > 32 Then
            Tbuf = 0
            S = S + Chr(b) :
         End If
    End Select
    If Tbuf > 25000 Then
           If Len(s) > 30 Then
             S = ""
                     Do
                        B = Inkey()
                     Loop Until B = 0
             Exit Do
             End If
           Exit Do
            End If
  B = Inkey()
   Loop
Return

'================ Подпрограмма режима ожидания=========
Ozhidanie:
If Left(modem , 4) = "RING" Or Left(modem , 5) = "+CLIP" Then       'поступление звонка
         If Zvonok = 2 Then Zvonok = 0                      'если звонок появился и трубка положена, перевести в 1
         If Zvonok = 5 Then Print "ATH"                     'если в режиме набирания номера
End If

If Trubka = 1 And Zvonok = 0 Then Zvonok = 1
If Zvonok = 1 Then                       'если снята трубка, то идём в набор номера
Gosub Nabornomera
Gosub Pravilanabora
Return


Pravilanabora:
If Zvonok = 0 Then
   Text1 = "ATH"
   Gosub Inicilizacija
End If

If Zvonok = 1 Then
   Text1 = "ATH"
   Gosub Inicilizacija
   N1 = 0                                                   'Сбрасываю разные данные.
   N = 0
   Zvonok = 5
   Gosub Nabornomera
End If

If Zvonok = 5 Then
   Gosub Nabor Nomera                                       'зацикливаем

Return


'================ Подпрограмма режима разговора=======================
Razgovor:

Return

'================
'================
'================
'================





Programma:
Do
'B = Ischarwaiting()
B = Inkey()
If B > 0 Then Gosub Sim300                                  'Getline Modem

Tbuf = 0

T = T + 1

If T = 254 Then
   T = 0                                                    'тупй=ой внутренний таймер, так, нужен для
   If Zvonok <> 5 Then Gosub Informacia

End If













'Waitms 1

Loop




$include "Nokia-1100 Library.inc"
End

Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Чае-Кофе-Наливалка.

Сообщение Alexeyslav »

А зачем тогда алиасы, если сразу же после них идет хардкод(магические числа)? Написано еще что можно задать любую ножку, но при попытке задать любую ножку будет облом-с. Потому что надо будет делать изменения и в других местах.
Реклама
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

Re: Чае-Кофе-Наливалка.

Сообщение ev3658 »

Прикинте, с модема получаю "ОК"
Но в условие ОК не распознаётся (
Неважно как mode="OK" или left(modem,2)="OK"
переменная точно на экране "ОК" без пробелов и LEN = 2
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Чае-Кофе-Наливалка.

Сообщение Alexeyslav »

А пробовал в 16-ричном виде смотреть?
и точно уверен что сравниваемый буффер имеет те самые два символа, может у него хвост еще из предыдущих ответов и/или символов перевода строки?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

Re: Чае-Кофе-Наливалка.

Сообщение ev3658 »

Alexeyslav писал(а):А пробовал в 16-ричном виде смотреть?
и точно уверен что сравниваемый буффер имеет те самые два символа, может у него хвост еще из предыдущих ответов и/или символов перевода строки?
Bascom AVR после сна компьютера глюкнул, проблема другая:
Вход микрофона то работает, то нет. Не помйму. Даже к примеру при входящем звонке на модем работает, а исходящем их модема нет. Использую выводы гарнитуры: AT+CHFA=1 другие не смогу использовать, так как модем после сигнализации MEGA SX100 (это РФ производсто, прошивку врятли будут менять.
Может кто знает как по отдельности настраивать микрофон и динамик или общий сброс модема?
Реклама
Вова_Синяк
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Чт мар 20, 2014 20:07:25

Re: Чае-Кофе-Наливалка.

Сообщение Вова_Синяк »

я наверное тоже какнибудь себе попробую такую чае-кофе наливалку сделать, очень понравилась идея, еще бы пультик ду прикрутить, или управление от компа по сетке, жалко времени вообще в обрез, всех с новым годом!!!
Реклама
Аватара пользователя
ev3658
Слесарь-программист
Сообщения: 341
Зарегистрирован: Вт сен 11, 2012 23:08:28
Откуда: город Кстово Нижегородская обл.

Re: Чае-Кофе-Наливалка.

Сообщение ev3658 »

Вова_Синяк писал(а):я наверное тоже какнибудь себе попробую такую чае-кофе наливалку сделать....
А я датчик атмосферного давления взял, думаю новый вариант собрать! Вот бы воду нагревать прямоточно лампой киловаттной, не знаю, как придумать такой агрегат. подходишь, кружку ставишь, вода по кольцу пошла, лампа включилась, всё вокруг как в раю, вода нагрелась нагрелась и из кольца вышла в кружку. Там можно родниковую воду не кипятить, а нагревать, надоела кипячённая фильтрованная, цветы дохнут, изжога. А родниковая накипь оставляет, но пить приятно, сладкая и мягкая. Так уж в этом году найду время на сборку чудо чайника с функцией заварки :)))
Ответить

Вернуться в «Умные мысли»