Sim800L уровень сигнала сети.
- Войдите на сайт для отправки комментариев
Пт, 23/06/2017 - 12:40
Всем привет. Прошу помощи. Чет запутался окончательно.
Использую библиотеку Sim800l.h
Возникла необходимость контролировать уровень сигнала сотовой сети.
Нужно разобрать ответ от sim800l
А с него приходит
AT+CSQ
+CSQ: 14,0
OK
пытаюсь изменить функцию но ни как не получается выдернуть из нее уровень сигнала
uint8_t Sim800l::signalQuality(){ SIM.print (F("AT+CSQ\r\n")); _buffer=_readSerial(); return _buffer.substring(_buffer.indexOf("+CSQ:")+2,_buffer.lastIndexOf("OK")).toInt(); }
Помогите дописать. Спасибо.
+2 то почему? Длина искомой строки - 5, да ещё пробел. Вы действительно думаете, что 5+1 равно 2?
Добавлю к словам Евгения - второй параметр substring тоже какой-то левый. При чем тут "ОК"?
Принцип простой - надо найти "+CSQ:", перейти к следующему за ней пробелу и извлечь часть строки до запятой. При чем здесь "ОК" - не пойму.
вот я и не понимаю как это работает)))
Ну если не понимаете, читайте описание методов. которые используете и разбирайтесь. Вся необходимая информация есть прямо на этом сайте.
вот я и не понимаю как это работает)))
вот поэтому и не стоит особо доверять библиотекам. Большинство из них написано весьма криворукими "пограмистами". Особенно это справедливо именно для библиотек ардуино, так как общий уровень пользователей ниже плинтуса - они и библиотеки пишут такие же.
Пишите свое, зачастую это проще.
Евгений я читаю читаю но них не понимаю))
return _buffer.substring(_buffer.indexOf("+CSQ: ")+2).toInt();
Так выходит?
дело не в библиотеках... вот переклинило меня и все... понимаю что тут ерунда, а че куда голова не варит
Евгений я читаю читаю но них не понимаю))
return _buffer.substring(_buffer.indexOf("+CSQ: ")+2).toInt();
Так выходит?
нет, так не выходит. Вы рискуете нарваться на грубость - нельзя так тупить. Перечитайте еще раз, что вам написал Евгений. Почему +2?
а я еще вам про библиотеки писал... вам бы сначала "мама" выговаривать...
Зачем грубить то.
Что не разу небыло такого что заблудился в двух соснах?
Конечно для многих это может быть и стыдно.
Пойду посплю и все пройдет)))
Спасибо парни за советы, все сделаю.
--------------------
Все ок. Надо больше отдыхать.
"У любой проблемы всегда есть быстрое и простое решение. Но обычно это решение неверное" (с) - это прям о вашей строке 6. Представьте, что будет, если вместо уровня сети модем вернет строку типа "Error 51"
Конечно должна быть какая то уверенность что разбираем ту строку которая нужна. А так как ее нет, я использовал варриант с .indexOf и делаю проверку.
Кстати просто и надежно всегда лучше) нагородить можно таких огородов. А вы видели как стреляет калашников в замедленной сьемке?
https://www.youtube.com/watch?v=MnEBPx9VNOY
А ведь можно было сделать иначе...но тогда он бы небыл таким надежным.
Не стоит парсить ответ CSQ как float, тк он им не является. Ответ состоит из "rssi","bit error rate" - "мощность сигнала","коэффициент битовых ошибок". Подробнее можно почитать в мануале http://www.mt-system.ru/sites/default/files/documents/sim800_series_at_command_manual_v1.12.pdf, стр 90