Не получаю полное сообщение, отправленное 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);
}

, 👍0

Обсуждение

Вы не ждете символа разделителя (обычно "\n"), поэтому доступный метод может вернуть 0, потому что вы читаете слишком быстро, и сообщение еще не было отправлено полностью., @KIIV

Что происходит, когда вы перемещаете строку задержки(100) перед циклом while? Он должен подождать некоторое время и кэшировать полный ответ, @gabonator

Что происходит, когда вы перемещаете строку задержки(100) перед циклом while? ничего, это дает точно такие же результаты, @laty


1 ответ


0

измените тестовый скетч на

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