Почему так происходит?
- Войдите на сайт для отправки комментариев
Втр, 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.
char GSM_data; GSM_ReceivedString = ""; while ( Serial3.available() > 0 ) { GSM_data = Serial3.read(); GSM_ReceivedString += GSM_data; #ifdef DEBUG Serial.print(GSM_data); #endif delay(10); // С меньшей паузой периодически съедало концовку SMS-ки. }Я вообще-то избегаю 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 и смски перестали приходить))) Ох уж этот мир ардуиновских железяк)