Не получается вывести в порт Serial после появления символа ">" (приглашения ввода)
- Войдите на сайт для отправки комментариев
Пт, 25/12/2020 - 19:23
Здравствуйте,
Пытаюсь организовать передачу данных по GPRS, данные вывожу в Serial (терминал ардуино) для отладки, а так же в SoftwareSerial (gsm-модуль)
SoftwareSerial SIM800(8, 9);
После отправки команды AT+CIPSEND=length на gsm-модуль она должна ответить символом ">" и она отвечает судя по отладочным сообщениям.
Затем я должен передать байты в количестве length штук. Но перепробовал команды:
SIM800.write(i); SIM800.print((char)i); //Попытка послать управляющий символ Ctrl+Z SIM800.write(26);
Естественно передача байтов ведется в цикле в количестве length раз и с задержкой delay.
Но ничего не помогает. Хотя если просто ввести сообщение в строке терминала и отправить. То она отправляется
Как в таком случае правильно передать программно байты в Serial?
Вы вот это читали? http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-dlya-vsekh-novichkov
Отбой. Моя вина. Оказывается, что после команды AT+CIPSEND=length приходит символ приглашения ввода ">" а затем нужно просто передать length байт и завершающий символ не требуется. Какой-то невнимательный человек поставил в условие отрицание (инверсию) "!" и в упор замечал =D
Но вот, что выяснил: оказывается Serial.readString() работает ну оочень медленно, на столько медленно, что я вижу эту задержку невооруженным взглядом. При работе с gsm-модемом советуют использовать конструкцию вида:
Мне удобнее считывать по байтам поэтому заменил в коде if на while и readString() на read() (пример кода ниже)
И тогда посыпались ошибки, избавляться от которых пришлось выставлением собственных задержек =(
Чтобы не плодить темы, спрошу тут же. В коде ниже очень мало строк. Serial.println() используется для вывода отладочных сообщений. Есть глобальная строковая переменная _responseDec, которая заполняется внутри функции, а конструкция Serial.println("Read Done on response"); должна сигнализировать об окончании заполнения строки
И вот часть вывода в консоль:
Т.е. переменная _respDec иногда "обнуляется" не доходя до Serial.println("Read Done on response");
Как такое может быть? Прерываний в коде не использую.
Вы вот это читали? http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-dlya-vsekh-novichkov
Бегло, выборочно читал (может я и ошибся форумом). Но вопрос не в этом. Я постоянно натыкаюсь на ваши сообщения, в которых, к сожалению, я для себя не нахожу ничего полезного.
Но вы же видно опытный старожил форума? Вы же с легкостью можете ответить на мой последний вопрос. Ответе, помогите пожалуйста. Сможете?
У тебя какой-то фарш вместо кода. Тебе учиться еще пару лет, прежде чем лезть в такие вещи.
Научится, особенно когда от модема фарш пойдет в виде левых звонков, длинных рекламных смс и прочего, и все это одновременно.