Модуль sim800l запрос заряда аккумулятора

Доброго времени, мучаюсь с проблемой. Есть проект, в него надо добавить фичу получения от sim800l ответа с зарядом аккумулятора. В проекте используется библиотека для работы с модулем тыц , методом тыка стало понятно, что до инициализации библиотеки все работает, АТ запрос идет, и приходит ответ, но после Sim800l.begin(); все, МК либо виснет, либо ответ приходит пустой потому что превышено время ожидания… прошу помочь…

вот код который работает

#include <SoftwareSerial.h>
#include <Sim800l.h>

Sim800l Sim800l;
SoftwareSerial SIM800(8, 9);        // 8 - RX Arduino (TX SIM800L), 9 - TX Arduino (RX SIM800L)


unsigned long last_time;
String txt;


void setup() {
  Serial.begin(9600);               // Скорость обмена данными с компьютером
  Serial.println("Start!");
  SIM800.begin(9600);               // Скорость обмена данными с модемом
  SIM800.println("AT");
  Sim800l.begin();                          // << если убрать, работает запрос, но не работает библиотека
  Serial.println("OK");
}

void loop() {
  Serial.println("test");
  if (millis() - last_time > 5000) {
    Serial.println("send at");
    String command = sendATCommand("AT+CBC", true);
    Serial.println(command);
    Serial.println("at ok");
    txt = txt.substring(txt.indexOf(",") + 1, txt.length());
    int bat = txt.toInt();
    Serial.print(bat);
    Serial.println("%");
    last_time = millis();
  }
}

String sendATCommand(String cmd, bool waiting) {
  String _resp = "";                            // Переменная для хранения результата
  SIM800.println(cmd);                          // Отправляем команду модулю
  if (waiting) {                                // Если необходимо дождаться ответа...
    _resp = waitResponse();                     // ... ждем, когда будет передан ответ
    // Если Echo Mode выключен (ATE0), то эти 3 строки можно закомментировать
    if (_resp.startsWith(cmd)) {  // Убираем из ответа дублирующуюся команду
      _resp = _resp.substring(_resp.indexOf("\r", cmd.length()) + 2);
    }
  }
  txt = _resp;
  return _resp;                                 // Возвращаем результат. Пусто, если проблема
}

String waitResponse() {                         // Функция ожидания ответа и возврата полученного результата
  String _resp = "";                            // Переменная для хранения результата
  long _timeout = millis() + 10000;             // Переменная для отслеживания таймаута (10 секунд)
  while (!SIM800.available() && millis() < _timeout)  {}; // Ждем ответа 10 секунд, если пришел ответ или наступил таймаут, то...
  if (SIM800.available()) {                     // Если есть, что считывать...
    _resp = SIM800.readString();                // ... считываем и запоминаем
  }
  else {                                        // Если пришел таймаут, то...
    Serial.println("Timeout...");               // ... оповещаем об этом и...
  }
  return _resp;                                 // ... возвращаем результат. Пусто, если проблема
}

Может ты через библиотеку будешь с модулем работать, раз уж взял библиотеку?

и как я не догадался

Выкиньте библиотеку, инициализовать самостоятельно, или идти разбираться что за хрень в самой библиотеке.

В библиотеке по умолчанию поднимается SoftSerial на пинах 10 и 11.
Так что нужно “или трусы надеть или крестик снять”.
Иначе , учитывая неопределенное состояние пина rx на библиотечном экземпляре, неизвестно как поведет себя библиотека.

у себя локально я поменял эти пины на 8 и 9, без этих изменений она бы вообще не работала

Херню ты наменял там.
Или выкинь библиотеку, или убирай свой кастомный объект софтсериала

вот как выглядит файл Sim800l.h

в его настройках заменены пины потому что я использую плату nano а не uno под которую все было сразу адаптировано

И на кой здесь картинка?

И чем нано от уно в плане пинов отличается?

Ну и что ты хочешь от устройства ?
Если у тебя на одни и те же пины посажены два объекта софтсериала ?
Как написано, так и работает.
Ну в общем то оно и понятно, учитывая то, что ты увидел какую то разницу, кроме физической реализации пинов, между Уно и нано

по сути вопроса есть что сказать? если вам со мной все ясно ответа от вас больше не жду

Что тебе не по сути сказали ?
Тебе прямым текстом уже три раза сказали, или библиотеку выкинь или работай с ней, а от софтсериала отстань.
Или тебе диагноз поставить ?

1 лайк

яснопонятно
По библиотеке вопросов нет, она работает, но мне нужен функционал который в библиотеке не реализован, а от руки функция с написанной АТ командой не срабатывает, проблему решил дописав в библиотеку нужные методы, спасибо всем шпециалистам, ваши советы бесполезны.

Пипец ты чучело.
Какой из советов тебе был бесполезным ?
Тебе сказали отказаться от библиотеки или дополнительного объекта софтсериала на тех же пинах , ты отказался, помогло.
Что тебе ещё , собака, надо ?
Если ты совсем баран, то могу подсказать, что работало бы и “от руки” , если бы ты обращался к объекту созданному библиотекой.

Солнышко, а что ты ждал от форума? Что кто-то за тебя напишет методы? Что кто-то раскроет космический секрет того, как программировать не программируя? Что?

Может кто нибудь сталкивался, что на запрос CBC модуль выдает неправильное значение напряжения?
Sim800l подключен от лития, на банках напряжение 4.1в, к компу подключен через pl2303, массы соеденены. На запрос CBC выдает что напряжение 5500-6000мВ.