вопрос про вывод ответа с AT-команд, в монитор порта.

VeD
Offline
Зарегистрирован: 21.02.2016

Не могу понять. как выводить ответы с  at  команд в монитор порта. вот код



    #include <SoftwareSerial.h>
     
    SoftwareSerial gprsSerial(0, 1);
    
     
    void setup()
    {
        gprsSerial.begin(9600);
    }
     
    void loop()
    {
    
            gprsSerial.println("ATD + +79номер;");
            delay(300);
           gprsSerial.println("AT+CLCC");// опрос состояние звонка
            delay(300);
            Serial.print(gprsSerial.read());
       
     
    }

в монитор выводит только ATD+ +79номер и AT_CLCC

как будто эхом выводит то, что я отправляю.

 Даже если меняю Serial.print(gprsSerial.read())  на  Serial.print(gprsSerial.available())  все тоже самое. Нажимаю кнопки приема. отмены вызова, никакой реакции

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

как будто эхом выводит то, что я отправляю.

ну надо же :) - догадался :)

Конечно он выводит именно то, что вы отправили - ведь пины 0 и 1 - это пины Сериал, для СофтСериала их использовать нельзя

вы подключили СофтСериал и Сериал к одинм и тем же пинам, замкнули из на себя - чего ж вы хотите получить, кроме эха?

VeD
Offline
Зарегистрирован: 21.02.2016

а, вот в чем дело. достаточно использовать другие пины для  gprsSerial. а к 0 и 1 ничего не подключать?

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

а, вот в чем дело. достаточно использовать другие пины для  gprsSerial. а к 0 и 1 ничего не подключать?

вы бы для начала описание платы почитали. Пины 0 и 1 - это RX TX того самого Сериала, что выведен в USB и через который вы подключаетесь к компу. К этим пинам не только СофтСериал нельзя подключать, но и нельзя их использовать в качестве входов и выходов. если вам в программе нужен Сериал

MaksVV
Offline
Зарегистрирован: 06.08.2015

рекомендую использовать стандартный пример arduinoIDE    SoftwareSerialExample.  На пины софта подключаете модем и можно через терминал общаться с модемом. Отправлять команды нужно с символами CR и NL  И со скоростями в сетапе и в терминале внимательно. 

VeD
Offline
Зарегистрирован: 21.02.2016

сменил пины 0 и 1 на 7 и 8. теперь вообще ничего не приходит в монитор порта. что ни так?

VeD
Offline
Зарегистрирован: 21.02.2016

\r  не нужно писать с  at  командой? скорость одинаковая. стоит только  NL

VeD
Offline
Зарегистрирован: 21.02.2016

а скорость и  serial  нужно то же указывать или достаточно что указана  gprsSerial? Мне вообще кажется что  serial и  gprsSerial  объекты одного класса  Serial

b707
Offline
Зарегистрирован: 26.05.2017

RX TX на модеме поменяйте местами. Если не поможет - начинайте, наконец. читать инструкцию...

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

а скорость и  serial  нужно то же указывать или достаточно что указана  gprsSerial?

конечно нужно :))))

VeD
Offline
Зарегистрирован: 21.02.2016
написал так 


    #include <SoftwareSerial.h>
     
    SoftwareSerial gprsSerial(7, 8);
    
     
    void setup()
    {
        gprsSerial.begin(9600);
        Serial.begin(9600);
       
    }
     
    void loop()
    
    {
      gprsSerial.println("ATD + +номер;");
           delay(300);
       
           gprsSerial.println("AT+CLCC\r");// опрос состояние звонка
           if(gprsSerial.available())
           {
            Serial.write(gprsSerial.read());
           }
       
     
    }


вывод такой 
ATD+ +79номер;
ERROR (ну это ладно пока в модуле нет симки и связи нет)
меня больше интересует  CLCC 
но тут вывод таков 
AT+CLCCATD+ +79номер;
OK
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

все. Если ствлю это < gprsSerial.println("ATD + +номер;");
           delay(300);  >  в  setup  то вообще какие то древние символы выводит

 

b707
Offline
Зарегистрирован: 26.05.2017

а что за модем? Уверены, что он работает на скорости 9600?

VeD
Offline
Зарегистрирован: 21.02.2016

sim800l v2 по нему вообще никакой документации нет. ну звонок с него проходит на скорости 9600

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

VeD пишет:

sim800l v2 по нему вообще никакой документации нет. 

Точно? Уверены? А это, видимо - мираж: http://www.mt-system.ru/sites/default/files/documents/sim800_series_at_command_manual_v1.10_0.pdf

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

sim800l v2 по нему вообще никакой документации нет. ну звонок с него проходит на скорости 9600

нифига себе... самый распространенный можем в среде ардуино - и нет документации... вот жалось :)))

Вы, простите, с какой луны свалились??? - регистрация на сайте 16-ого года - а даже не знаете, для чего на ардуине пины 0 и 1 используются?

VeD
Offline
Зарегистрирован: 21.02.2016

это первая версия. у меня вторая

VeD
Offline
Зарегистрирован: 21.02.2016

для rx  и  tx  я их всегда использовал

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

VeD пишет:

это первая версия. у меня вторая

И? Вторая версия у вас - это не вторая версия SIM800L, а вторая версия платы от китайцев.

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

это первая версия. у меня вторая

v1.10 в названии - это версия мануала, а не модема.

К тому же это мануал по командам - а АТ команды на 95% одинаковы даже у модемов разных фирм - например SIM800 и AThinker A6, что уж говорить про разные версии одного и того же модема

Вы просто не пытались искать документацию, скажите честно

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

b707 пишет:

Вы просто не пытались искать документацию, скажите честно

Тю, зачем искать, зачем читать, есть форум, он для помощи, всем известно.

VeD
Offline
Зарегистрирован: 21.02.2016

все. перестал вообще ловить сеть. полетел на помойку.  sim900  лучше

VeD
Offline
Зарегистрирован: 21.02.2016

мануал  at  команд у меня есть. ответы. какие должны быть тоже есть. но мне было интересно глянуть их в мониторе порта.

b707
Offline
Зарегистрирован: 26.05.2017

VeD - вообще у вас в коде полный пипец, вы даете команды подряд и не ждете ответа от модема. Да к тому же судя по вашим ответам - в программировании вы явно не профи. У вас так ничего не получится.

Уберите пока ардуину, подключите модем напрямую к терминалу - и попробуйте давать команды вручную, сверяясь с мануалом, который вам дал DIYMan. А когда разберетесь, в каком порядке и с какими параметрами давать команды - и будете получать в ответ сообщения от модема, а не ошибки - тогда попробуете это перенести в код

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

все. перестал вообще ловить сеть. полетел на помойку.  sim900  лучше

а. ну-ну...

"дело было не в бобине"

b707
Offline
Зарегистрирован: 26.05.2017

Ой иногда так прикольно сденлать поиск по нику....

У человека беда по жизни - что не полезет искать в справочниках - ничего нет :

http://arduino.ru/forum/programmirovanie/chto-takoe-compareto-i-touch

А еще он искал учебники, чтоб "без лишней воды" - хотел выучить Си за полгода. Было это 2016м...

http://arduino.ru/forum/programmirovanie/kakie-uchebniki-vybrat

Судя по сегодняшней теме - не попалось ему таких учебников....

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

b707 пишет:

Судя по сегодняшней теме - не попалось ему таких учебников....

Не нашёл, версии не совпали :)))

VeD
Offline
Зарегистрирован: 21.02.2016

Так вроде и так дал время delay(300) после первой команды. Ну после второй if если данные пришли, считать их и записать (вывести) на монитор порта. Что ни так то? Её если бы я знал, как выводить ответы команд в порт, то я бы сюда не пришёл.

VeD
Offline
Зарегистрирован: 21.02.2016

Дело ещё в том, что в документации ответы ат команд идут без \r и \n символов, но как я понял с того же хабра, что эти символы между командой.нужно ли при опросе UDR0 учитывать эти символы вначале? Типа 

Ждём пока не придут символы \r и \n 

while((UDR0!='\r')&(UDR0!=\n));

Затем пишем остальные символы в буфер

buff[i++]=UDR0;

Теперь мне нужен третий символ команды, которая должна попасть во вторую ячейку массива(буфера). 

И если это 0, то завершить вызов. 

Третий параметр ответа от AT+CLCC это stat и если там 0, то значит трубку взяли. 

Вроде логично все. 

Только вот без смеха:)

VeD
Offline
Зарегистрирован: 21.02.2016

Нашёл, Стивен Пратта Ну если sim900 реально лучше, там уже готовый шилд, не надо ничего паять. И к компу проще его подключить, чтоб использовать терминал для опроса АТ команд

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

Ждём пока не придут символы \r и \n 

while((UDR0!='\r')&(UDR0!=\n));

Что такое UDR0 и работает ли это с СофтСериал? слушайте, вы пока еще слово "корова" не умеете правильно писать, а беретесь работать с Сериал через регистры. Пользуйтесь командой read() - так будет надежнее. В строчке выше ошибка

Цитата:
Теперь мне нужен третий символ команды, которая должна попасть во вторую ячейку массива(буфера). 

И если это 0, то завершить вызов. 

Третий параметр ответа от AT+CLCC это stat и если там 0, то значит трубку взяли.

"Третий символ" и "третий параметр" не одно и тоже.

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

Ждём пока не придут символы \r и \n 

while((UDR0!='\r')&(UDR0!=\n));

Затем пишем остальные символы в буфер

buff[i++]=UDR0;

Вроде логично все. 

ой. вот это даже не заметил. Я не знаю. может для вас это и логично, но работать это не будет. К моменту, как приходят символы \r и \n - все остальные уже прошли, следовательно писать что-то в буфер - уже поздно...

Слушайте, через пару месяцев будет 4 года, как вы занимаетесь ардуино... а знаете меньше иного новичка с месячным стажем. Может оно не ваше. может мозги не тянут. как вам говорили еще 3 года назад?

VeD
Offline
Зарегистрирован: 21.02.2016

UDR  это регистр  USART куда записываются данный и откуда читаются данные. mySerial.available()  по вашему. 

 

"Третий символ" и "третий параметр" не одно и тоже.

 

Вот как этот параметр оттуда достать? Я знаю, что на python  есть регулярные выражения. Хотя поискал в гугл и на си есть такое. regex.h

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

UDR  это регистр  USART куда записываются данный и откуда читаются данные. mySerial.available()  по вашему.

так это регистр куда записываются или регистр откуда читаются? или это Serial.available() ? - а ничего, что все это три разных сущности? :)

 

А вы уверены, что у софтсериала есть регистры?

VeD
Offline
Зарегистрирован: 21.02.2016

я имел ввиду самые первые символы, а не последние. 

в данном https://wiki.iarduino.ru/page/a6_gprs_at/ мануале говориться, что ответ приходит с  r n  вначале и конце 

Получить список параметров и диапазон их значений для команды AT+CSCS (выбор набора символов терминального оборудования):

  • Запрос: AT+CSCS=?\r\n
  • Ответ: +CSCS: ("GSM","HEX","PCCP936","UCS2")\r\nOK\r\n

пусть будет. пока вставлял эту команду понял, что  \r\n  не между ответом. 

Это называется, смотрю в книгу и вижу фигу

VeD
Offline
Зарегистрирован: 21.02.2016

они есть у  atmega328  который стоит в ардуино. Софтсериал это тот же самый  USART, или я ошибаюсь?

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

Это называется, смотрю в книгу и вижу фигу

ага, очень заметно.

вы бы не выпендривались с регистрами. вам на обычном Serial.available() хоть что-нить написать - уже победа будет.

а то выглядит так. будто блондинка решила начать изучение вождение авто с полицейского разворота...

VeD
Offline
Зарегистрирован: 21.02.2016

b707 пишет:

VeD пишет:

UDR  это регистр  USART куда записываются данный и откуда читаются данные. mySerial.available()  по вашему.

так это регистр куда записываются или регистр откуда читаются? или это Serial.available() ? - а ничего, что все это три разных сущности? :)

 

А вы уверены, что у софтсериала есть регистры?

 

они есть у  atmega328  который стоит в ардуино. Софтсериал это тот же самый  USART, или я ошибаюсь?

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

Софтсериал это тот же самый  USART, или я ошибаюсь?

конечно ошибаетесь.

USART у Атмеги328ра один и находится он на пинах 0 и 1. А тут вы работаете через программный костыль совсем на других пинах

 

VeD
Offline
Зарегистрирован: 21.02.2016

ну почему же, я пробовал писать мини программы, для управления  bluetooth  модулем через  usart. 

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

ну почему же, я пробовал писать мини программы, для управления  bluetooth  модулем через  usart. 

простите, у вас каша в голове... Где USART и где софтсериал

Ну и вообще, судя по тому что вы пишете - еще неизветно, что вы там нагородили в тех "программах"

VeD
Offline
Зарегистрирован: 21.02.2016

сейчас уже поздно писать. я сжег вчера плату. подключив к ней 9в, придется покупать еще. Сегодня целый день, между работой, смотрел ютуб по sim800l  как оказалось есть  usb  переходник   позволяющий подключить модуль к компу. жаль в комплекте не идет. Я то думал нужно паять свой какой то штекер для этого. 

b707
Offline
Зарегистрирован: 26.05.2017

VeD пишет:

как оказалось есть  usb  переходник   позволяющий подключить модуль к компу

 

годится любой обычный USB- UART за доллар

а можно и через ардуину подключить

 

Видите. как много нового вы узнаете на 4й год занятий ардуины :) А собирались все узнать за полгода

VeD
Offline
Зарегистрирован: 21.02.2016

b707 пишет:

VeD пишет:

UDR  это регистр  USART куда записываются данный и откуда читаются данные. mySerial.available()  по вашему.

так это регистр куда записываются или регистр откуда читаются? или это Serial.available() ? - а ничего, что все это три разных сущности? :)

 

А вы уверены, что у софтсериала есть регистры?

 

ну это просто сравнение мне пришло, потому что   в  Serial.available()  тоже хранятся не читанные данные. насчет того, можно туда писать данные, я не знаю. но то что данные можно читать и с  UDR  и .available()  дало мне повод их поставить на одну полку.

VeD
Offline
Зарегистрирован: 21.02.2016

да я не занимался ардуино. так усердно. пока из али какие то детали придут, уже ничего не хочется

VeD
Offline
Зарегистрирован: 21.02.2016

b707 пишет:

VeD пишет:

Софтсериал это тот же самый  USART, или я ошибаюсь?

конечно ошибаетесь.

USART у Атмеги328ра один и находится он на пинах 0 и 1. А тут вы работаете через программный костыль совсем на других пинах

 

так суть то одна

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ппц, суть у него одна - программный Serial и аппаратный UART. Жесть.

b707
Offline
Зарегистрирован: 26.05.2017

DIYMan пишет:

Ппц, суть у него одна - программный Serial и аппаратный UART. Жесть.

это как управлять велосипедом и самолетом - суть одна - крути руль и жми педали...

MaksVV
Offline
Зарегистрирован: 06.08.2015
VeD пишет:
...  как оказалось есть  usb  переходник   позволяющий подключить модуль к компу. жаль в комплекте не идет. Я то думал нужно паять свой какой то штекер для этого. 
 
можно сделать так: 
 
MaksVV пишет:
рекомендую использовать стандартный пример arduinoIDE    SoftwareSerialExample.  На пины софта подключаете модем и можно через терминал общаться с модемом. Отправлять команды нужно с символами CR и NL  И со скоростями в сетапе и в терминале внимательно.
 
и будет тоже самое что переходник юсб - юарт. 
 
И посмотрите соседнюю тему . Тот парсинг строки от модема и вам подойдет, хоть это и не айс делать на String, но вам пока и так пойдет.