ЭЛЕКТРОНИКА Нужна помощь с блютуз модулем BT201

Сергей Прохоров

✩✩✩✩✩✩✩
25 Июн 2022
4
0
@bort707,
Когда чип начнет играть, он вернет в порт нижеуказанную информацию:
M1 + 0000000E Файл, воспроизводимый текущим устройством, имеет размер 0x0E.
M2 + 0000000F Общее количество файлов на текущем устройстве составляет 0x0F.
MT + 0000001E Общее время текущего файла составляет 0x1E секунд.
MK + 00000004 Текущий файл был воспроизведен до 0x04 секунд
MF + XXXXXXX Имя воспроизводимого в данный момент файла: xxxxxx.

Как эту информацию "раскидать" по переменным, чтобы вывести их на дисплей в десятичном формате?
 

bort707

★★★★★★✩
21 Сен 2020
2,898
862
это называется "парсинг" - разбор текстовых сообщений, поищите в инете
Если кратко - ищете в принятой строке комбинацию символов "M1" - а цифры после нее предтавлю собой размер файла...
 

Сергей Прохоров

✩✩✩✩✩✩✩
25 Июн 2022
4
0
@bort707, спасибо за ответ, но вот как раз с разбором и склейкой байтов и битов у меня проблема..., да еще и несколько строк приходит в порт почти одновременно.
 

Сергей Прохоров

✩✩✩✩✩✩✩
25 Июн 2022
4
0
@bort707, С обработкой массива пока разобрался, взял за основу пример, часть проблемы решена.
// тест парсера строк
#include <GParser.h>

void setup() {
Serial.begin(9600);

// строка для примера
// данные разделены разделителем, например запятой
// могут быть получены из Serial/UDP/TCP/MQTT итд
char str[] = "QM+01";

// кормим строку парсеру, указываем разделитель (умолч. запятая)
GParser data(str, '+');

// ВНИМАНИЕ! Операция "ломает" исходную строку, заменяя разделители на NULL
int am = data.split(); // разделяем, получаем количество данных

//Serial.println(am); // выводим количество

// можем обратиться к полученным строкам как data или data.str
//for (byte i = 0; i < am; i++) Serial.println(data);

// также можно получить их в виде int и float чисел
// передав индекс строки
//Serial.println(data.getInt(1));
//Serial.println(data.getFloat(1));

// можно сравнить со строкой (номер парс строки, строка для сравнения)
if (data.equals(0, "QM") && data.equals(1, "01")) Serial.println("BT On");
if (data.equals(0, "QM") && data.equals(1, "02")) Serial.println("USB On");

}

void loop() {

}

Появился другой вопрос, как записать строку для обработки (QM+01) из Serial в char str[] ? В С++ не силён.
 

Arisat

✩✩✩✩✩✩✩
23 Фев 2023
1
0
Всем привет. Приобрёл данный данную плату для мини колонки. После нажатия кнопки PP модуль выключается. Но стоит снова его включить через кнопку PP модуль включится но блютуз перестанет работать. Подскажите кто сталкивался с данной проблемой и как её решить. Стоит отключить питание от батареи и подключить снова модуль включить блютуз. Хотелось бы с кнопки чтобы всё работало.
Или она вообще не должна отключаться и включаться с этой кнопки?
 
Изменено:

motoGiS

✩✩✩✩✩✩✩
5 Янв 2024
2
0
Кстати, мне удалось забросить прошивку от BT301 на BT201 с FM Radio и AUX. Единственное, нужно перебросить светодиод на другую ногу контроллера и перевесить кнопки управления на вывод микрофона (легко понять, если открыть схему обоих модулей). Единственное, в прошивке с AUX и FM не работает в фоне Bluetooth, он запускается и фонит только если принудительно переключиться на него. Это описано в документации и аргументировано недостатком памяти микроконтроллера. Поэтому даже BT301 в стоке идет без FM, нужно шить кому он требуется.
 

motoGiS

✩✩✩✩✩✩✩
5 Янв 2024
2
0
@Константин 271, кусок провода. Ну естественно нужно запаять хотя бы отсутствующий конденсатор на пару-тройку десятков пФ. А так в инструкции указана полная схема из пары конденсаторов и одной индуктивности.
 

kven

✩✩✩✩✩✩✩
16 Фев 2024
1
0
никто не встречался с подвисанием карты\тф ?.. модуль ее типа видит, MU+01 и даже режим включает QM+02 и тут же сам переключается на блюпуп QM+01
сброс не памагает и даже прошивка не закидываеца