вопрос про вывод ответа с AT-команд, в монитор порта.
- Войдите на сайт для отправки комментариев
Пнд, 23/12/2019 - 15:53
Не могу понять. как выводить ответы с 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()) все тоже самое. Нажимаю кнопки приема. отмены вызова, никакой реакции
как будто эхом выводит то, что я отправляю.
ну надо же :) - догадался :)
Конечно он выводит именно то, что вы отправили - ведь пины 0 и 1 - это пины Сериал, для СофтСериала их использовать нельзя
вы подключили СофтСериал и Сериал к одинм и тем же пинам, замкнули из на себя - чего ж вы хотите получить, кроме эха?
а, вот в чем дело. достаточно использовать другие пины для gprsSerial. а к 0 и 1 ничего не подключать?
а, вот в чем дело. достаточно использовать другие пины для gprsSerial. а к 0 и 1 ничего не подключать?
вы бы для начала описание платы почитали. Пины 0 и 1 - это RX TX того самого Сериала, что выведен в USB и через который вы подключаетесь к компу. К этим пинам не только СофтСериал нельзя подключать, но и нельзя их использовать в качестве входов и выходов. если вам в программе нужен Сериал
рекомендую использовать стандартный пример arduinoIDE SoftwareSerialExample. На пины софта подключаете модем и можно через терминал общаться с модемом. Отправлять команды нужно с символами CR и NL И со скоростями в сетапе и в терминале внимательно.
сменил пины 0 и 1 на 7 и 8. теперь вообще ничего не приходит в монитор порта. что ни так?
\r не нужно писать с at командой? скорость одинаковая. стоит только NL
а скорость и serial нужно то же указывать или достаточно что указана gprsSerial? Мне вообще кажется что serial и gprsSerial объекты одного класса Serial
RX TX на модеме поменяйте местами. Если не поможет - начинайте, наконец. читать инструкцию...
а скорость и serial нужно то же указывать или достаточно что указана gprsSerial?
конечно нужно :))))
а что за модем? Уверены, что он работает на скорости 9600?
sim800l v2 по нему вообще никакой документации нет. ну звонок с него проходит на скорости 9600
sim800l v2 по нему вообще никакой документации нет.
Точно? Уверены? А это, видимо - мираж: http://www.mt-system.ru/sites/default/files/documents/sim800_series_at_command_manual_v1.10_0.pdf
sim800l v2 по нему вообще никакой документации нет. ну звонок с него проходит на скорости 9600
нифига себе... самый распространенный можем в среде ардуино - и нет документации... вот жалось :)))
Вы, простите, с какой луны свалились??? - регистрация на сайте 16-ого года - а даже не знаете, для чего на ардуине пины 0 и 1 используются?
это первая версия. у меня вторая
для rx и tx я их всегда использовал
это первая версия. у меня вторая
И? Вторая версия у вас - это не вторая версия SIM800L, а вторая версия платы от китайцев.
это первая версия. у меня вторая
v1.10 в названии - это версия мануала, а не модема.
К тому же это мануал по командам - а АТ команды на 95% одинаковы даже у модемов разных фирм - например SIM800 и AThinker A6, что уж говорить про разные версии одного и того же модема
Вы просто не пытались искать документацию, скажите честно
Вы просто не пытались искать документацию, скажите честно
Тю, зачем искать, зачем читать, есть форум, он для помощи, всем известно.
все. перестал вообще ловить сеть. полетел на помойку. sim900 лучше
мануал at команд у меня есть. ответы. какие должны быть тоже есть. но мне было интересно глянуть их в мониторе порта.
VeD - вообще у вас в коде полный пипец, вы даете команды подряд и не ждете ответа от модема. Да к тому же судя по вашим ответам - в программировании вы явно не профи. У вас так ничего не получится.
Уберите пока ардуину, подключите модем напрямую к терминалу - и попробуйте давать команды вручную, сверяясь с мануалом, который вам дал DIYMan. А когда разберетесь, в каком порядке и с какими параметрами давать команды - и будете получать в ответ сообщения от модема, а не ошибки - тогда попробуете это перенести в код
все. перестал вообще ловить сеть. полетел на помойку. sim900 лучше
а. ну-ну...
"дело было не в бобине"
Ой иногда так прикольно сденлать поиск по нику....
У человека беда по жизни - что не полезет искать в справочниках - ничего нет :
http://arduino.ru/forum/programmirovanie/chto-takoe-compareto-i-touch
А еще он искал учебники, чтоб "без лишней воды" - хотел выучить Си за полгода. Было это 2016м...
http://arduino.ru/forum/programmirovanie/kakie-uchebniki-vybrat
Судя по сегодняшней теме - не попалось ему таких учебников....
Судя по сегодняшней теме - не попалось ему таких учебников....
Не нашёл, версии не совпали :)))
Так вроде и так дал время delay(300) после первой команды. Ну после второй if если данные пришли, считать их и записать (вывести) на монитор порта. Что ни так то? Её если бы я знал, как выводить ответы команд в порт, то я бы сюда не пришёл.
Дело ещё в том, что в документации ответы ат команд идут без \r и \n символов, но как я понял с того же хабра, что эти символы между командой.нужно ли при опросе UDR0 учитывать эти символы вначале? Типа
Ждём пока не придут символы \r и \n
while((UDR0!='\r')&(UDR0!=\n));
Затем пишем остальные символы в буфер
buff[i++]=UDR0;
Теперь мне нужен третий символ команды, которая должна попасть во вторую ячейку массива(буфера).
И если это 0, то завершить вызов.
Третий параметр ответа от AT+CLCC это stat и если там 0, то значит трубку взяли.
Вроде логично все.
Только вот без смеха:)
Нашёл, Стивен Пратта Ну если sim900 реально лучше, там уже готовый шилд, не надо ничего паять. И к компу проще его подключить, чтоб использовать терминал для опроса АТ команд
Ждём пока не придут символы \r и \n
while((UDR0!='\r')&(UDR0!=\n));
Что такое UDR0 и работает ли это с СофтСериал? слушайте, вы пока еще слово "корова" не умеете правильно писать, а беретесь работать с Сериал через регистры. Пользуйтесь командой read() - так будет надежнее. В строчке выше ошибка
И если это 0, то завершить вызов.
Третий параметр ответа от AT+CLCC это stat и если там 0, то значит трубку взяли.
"Третий символ" и "третий параметр" не одно и тоже.
Ждём пока не придут символы \r и \n
while((UDR0!='\r')&(UDR0!=\n));
Затем пишем остальные символы в буфер
buff[i++]=UDR0;
Вроде логично все.
ой. вот это даже не заметил. Я не знаю. может для вас это и логично, но работать это не будет. К моменту, как приходят символы \r и \n - все остальные уже прошли, следовательно писать что-то в буфер - уже поздно...
Слушайте, через пару месяцев будет 4 года, как вы занимаетесь ардуино... а знаете меньше иного новичка с месячным стажем. Может оно не ваше. может мозги не тянут. как вам говорили еще 3 года назад?
UDR это регистр USART куда записываются данный и откуда читаются данные. mySerial.available() по вашему.
"Третий символ" и "третий параметр" не одно и тоже.
Вот как этот параметр оттуда достать? Я знаю, что на python есть регулярные выражения. Хотя поискал в гугл и на си есть такое. regex.h
UDR это регистр USART куда записываются данный и откуда читаются данные. mySerial.available() по вашему.
так это регистр куда записываются или регистр откуда читаются? или это Serial.available() ? - а ничего, что все это три разных сущности? :)
А вы уверены, что у софтсериала есть регистры?
я имел ввиду самые первые символы, а не последние.
в данном https://wiki.iarduino.ru/page/a6_gprs_at/ мануале говориться, что ответ приходит с r n вначале и конце
Получить список параметров и диапазон их значений для команды AT+CSCS (выбор набора символов терминального оборудования):
пусть будет. пока вставлял эту команду понял, что \r\n не между ответом.
Это называется, смотрю в книгу и вижу фигу
они есть у atmega328 который стоит в ардуино. Софтсериал это тот же самый USART, или я ошибаюсь?
Это называется, смотрю в книгу и вижу фигу
ага, очень заметно.
вы бы не выпендривались с регистрами. вам на обычном Serial.available() хоть что-нить написать - уже победа будет.
а то выглядит так. будто блондинка решила начать изучение вождение авто с полицейского разворота...
UDR это регистр USART куда записываются данный и откуда читаются данные. mySerial.available() по вашему.
так это регистр куда записываются или регистр откуда читаются? или это Serial.available() ? - а ничего, что все это три разных сущности? :)
А вы уверены, что у софтсериала есть регистры?
они есть у atmega328 который стоит в ардуино. Софтсериал это тот же самый USART, или я ошибаюсь?
Софтсериал это тот же самый USART, или я ошибаюсь?
конечно ошибаетесь.
USART у Атмеги328ра один и находится он на пинах 0 и 1. А тут вы работаете через программный костыль совсем на других пинах
ну почему же, я пробовал писать мини программы, для управления bluetooth модулем через usart.
ну почему же, я пробовал писать мини программы, для управления bluetooth модулем через usart.
простите, у вас каша в голове... Где USART и где софтсериал
Ну и вообще, судя по тому что вы пишете - еще неизветно, что вы там нагородили в тех "программах"
сейчас уже поздно писать. я сжег вчера плату. подключив к ней 9в, придется покупать еще. Сегодня целый день, между работой, смотрел ютуб по sim800l как оказалось есть usb переходник позволяющий подключить модуль к компу. жаль в комплекте не идет. Я то думал нужно паять свой какой то штекер для этого.
как оказалось есть usb переходник позволяющий подключить модуль к компу
годится любой обычный USB- UART за доллар
а можно и через ардуину подключить
Видите. как много нового вы узнаете на 4й год занятий ардуины :) А собирались все узнать за полгода
UDR это регистр USART куда записываются данный и откуда читаются данные. mySerial.available() по вашему.
так это регистр куда записываются или регистр откуда читаются? или это Serial.available() ? - а ничего, что все это три разных сущности? :)
А вы уверены, что у софтсериала есть регистры?
ну это просто сравнение мне пришло, потому что в Serial.available() тоже хранятся не читанные данные. насчет того, можно туда писать данные, я не знаю. но то что данные можно читать и с UDR и .available() дало мне повод их поставить на одну полку.
да я не занимался ардуино. так усердно. пока из али какие то детали придут, уже ничего не хочется
Софтсериал это тот же самый USART, или я ошибаюсь?
конечно ошибаетесь.
USART у Атмеги328ра один и находится он на пинах 0 и 1. А тут вы работаете через программный костыль совсем на других пинах
так суть то одна
Ппц, суть у него одна - программный Serial и аппаратный UART. Жесть.
Ппц, суть у него одна - программный Serial и аппаратный UART. Жесть.
это как управлять велосипедом и самолетом - суть одна - крути руль и жми педали...