Не получаю полное сообщение, отправленное SIM900
Мне нужна помощь с SIM900 и Arduino Mega. Я не получаю полное сообщение, которое отправляю со своего телефона. (Arduino Mega _ SIM900 _ Питание 9 В/2А)
Отправлено сообщение:
1234567891234567890
Получено сообщение:
12345678912
String Char;
void setup() {
Serial.begin(9600);
Serial2.begin(9600);
}
void loop() {
while (Serial2.available()) {
Char += (char)Serial2.read();
}
Serial.println(Char);
delay(1000);
}
@laty, 👍0
Обсуждение1 ответ
измените тестовый скетч на
void setup() {
Serial.begin(9600);
Serial2.begin(9600);
}
void loop() {
if (Serial2.available()) {
char c = Serial2.read();
Serial.write(c);
}
}
или используйте сквозной скетч serial из примеров
или
void setup() {
Serial.begin(9600);
Serial2.begin(9600);
Serial2.setTimeout(100);
}
void loop() {
if (Serial2.available()) {
String s = Serial2.readString();
Serial.println(s);
}
}
Я пробовал "пустую настройку" () { Серийный номер.начало(9600); Сериал2.начало(9600); Сериал2.Время ожидания(100); } void loop() { если (Сериал2.доступно()) { Строка s = Сериал2.Строка чтения(); Серийный номер(ы)для печати; } }`и это дает мне некоторые цифры, специальные символы ... ⸮⸮O Дж ⸮Всегда⸮Дл⸮⸮Дж⸮Ч(⸮ХZ{{З⸮!Дж⸮⸮⸮, @laty
Что мне нужно, так это получить полное сообщение и сохранить его в виде строки или *char, @laty
у вас есть 9600 бод, установленный в последовательном мониторе?, @Juraj
после того, как вы отправите сообщение с телефона или до этого, он напечатает эти специальные символы?, @Juraj
да, у меня бод=9600 . Я также попробовал baud = 19200, чтобы убедиться, что все полученные сообщения обработаны, но это также не работает., @laty
Я пытаюсь очистить последовательный 2 после считывания значения, которое он содержит, с помощью Serial2.flush (), чтобы убедиться, что в последовательном буфере достаточно места для добавления следующего карактера . Но это не работает... У тебя есть какие-нибудь идеи??, @laty
функция flush() предназначена для выходного буфера. циклы в моем ответе всегда считывают все из входного буфера. Интересно, что ваш код что-то печатает. зачем модулю печатать входящее сообщение? разве вам не нужны команды AT для связи с модулем?, @Juraj
Я думаю, что нет необходимости использовать команды AT, я могу просто написать, что получает arduino, когда доступен последовательный. На самом деле я не говорю, что я новичок в arduino., @laty
@laty, последовательные данные поступают медленнее, чем вы думаете. там, где доступно, есть пробелы, которые являются ложными. в этом коде нет проблем с этим, но "пока (доступно)" в вашем исходном коде заканчивается пробелом в данных., @Juraj
- Моделирование Arduino Mega 2560 с GSM модулем с использованием Proteus
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
- Arduino GSM Shield GSM_READY никогда не готов
- Arduino Mega + SIM808 GSM + модуль GPS + программа включается без нажатия кнопки?
- Как извлечь широту и долготу из GPS
- SIM800L — AT-команды ничего не делают на последовательном мониторе Arduino
- Можно ли изменить официальную библиотеку шилдов arduino GSM для работы с аппаратным serial на mega?
- Проблема с отправкой SMS с GSM SIM900
Вы не ждете символа разделителя (обычно "\n"), поэтому доступный метод может вернуть 0, потому что вы читаете слишком быстро, и сообщение еще не было отправлено полностью., @KIIV
Что происходит, когда вы перемещаете строку задержки(100) перед циклом while? Он должен подождать некоторое время и кэшировать полный ответ, @gabonator
Что происходит, когда вы перемещаете строку задержки(100) перед циклом while? ничего, это дает точно такие же результаты, @laty