Почему так происходит?
- Войдите на сайт для отправки комментариев
Втр, 22/12/2015 - 17:13
Сидел сейчас "дружил" SIM900r с мегой вот таким кодом (привожу только loop):
void loop() { String gprs=""; if (Serial.available()) Serial3.write(Serial.read()); if (Serial3.available()){ while (Serial3.available()) { char ser=Serial3.read(); gprs+=ser; //delay(3); } Serial.print(gprs); int index=gprs.indexOf("RING"); if (index!=-1) Serial.println("I call"); } }
Результат - Не получаю сообщение "I call" либо получаю раз из 10ти... Стоит раскомментировать делэй, так все становится отлично, хотя в Serialе в обоих случаях одно и тоже получаю... Че за ерунда такая?
Не получаю сообщение "I call" либо получаю раз из 10ти...
а потом
хотя в Serialе в обоих случаях одно и тоже получаю...
А я не вижу, чтобы "I call" куда то еще выводился.
Чуток неправильно выразился... В первом случае получаю в Serial'е стандартные RING+номер телефона звонящего и еще чуток сетевой инфы, а "I call" не получаю, хотя как бы вроде должен, а во втором случае те же RING+номер телефона звонящего + "I call"... Почему же в первом случае "I call" не приходит, а во втором приходит?
Я вообще-то избегаю delay(), но в данном случае он вполне уместен. SIM900 недостаточно проворен, так дайте ему успевать выталкивать символы в Serial3.
Я вообще-то избегаю delay(), но в данном случае он вполне уместен. SIM900 недостаточно проворен, так дайте ему успевать выталкивать символы в Serial3.
Согласен с Вами и хорошо, что я вообще догадался воткнуть туда delay, но у меня же происходит обнуление String'a каждый раз и если бы (по моему мнению) SIM900 не успевал отдавать символы, то они бы терялись хоть... А это все прекрасно приходит, но "I call" не получаю нифига... Для меня это чудеса прям
Я не помню, он (SIM900) конец строки отдает '\n' ?
Если да, крутитесь и собирайте строку пока не придет '\n'.
Попробуйте
Serial
.println(
"I call"
);
Serial.flush(); что заставит жождаться завершения передачи данных в порт. А вообще у меня подобные чудеса были, и дело оказалось в том, что мало свободной памяти. Я использую Visual Micro, и он не предупреждал при компиляции об этом, однако компиляция кода в Arduino IDE вывела предупреждение что мало памяти. И пришлось искать методы экономить память. Например на Serial.print(F("I call")) можно сильно экономить память используя F(). После оптимизации проблемы исчезли.Попробуйте
Serial
.println(
"I call"
);
Serial.flush(); что заставит жождаться завершения передачи данных в порт. А вообще у меня подобные чудеса были, и дело оказалось в том, что мало свободной памяти. Я использую Visual Micro, и он не предупреждал при компиляции об этом, однако компиляция кода в Arduino IDE вывела предупреждение что мало памяти. И пришлось искать методы экономить память. Например на Serial.print(F("I call")) можно сильно экономить память используя F(). После оптимизации проблемы исчезли.Ды F() я использую для вывода странички через w5100...Ладно, в принципе проблема решена, хоть природа проблема осталась неизвестна... Сейчас взял рабочий код с Sim900 и перекинул его на Sim900r и смски перестали приходить))) Ох уж этот мир ардуиновских железяк)