Фон:
У меня есть приложение, разработанное в Android Studios, которое считывает данные с устройства BLE и отображает данные в приложении. Данные являются историческими данными, которые содержат 3 типа данных, давайте назовем их X, Y и Z, и они собираются с датчика. Одна точка данных содержит все три типа, а одна точка данных собирается в час. Это генерирует массив данных, которые похожи на: < /p>
x1,1,1,1,2,y2,12,....xn,yn,1,1,1,1,2,y2, заказ. Это означает, что для приложения правильно разрабатывать данные, и по этой причине первые два байта массива указывают, сколько часов было собрано. В качестве примера, полный массив может выглядеть как: < /p>
первые 20 значений (часы 40-20)
[0x00, 0x28, x1, y1, z1, x2, y2, z2, ..., x20, y20, z20] < /p>
X21, Y21, Z21, X22, Y22, Z22, ..., X40, Y40, Z40] < /p>
Приложение будет читать первые два байта, и в зависимости от них будет решать, принести ли следующие 20 значений или нет. В этом случае, если приложение получает первый массив, оно попытается извлечь данные еще раз, поскольку массив содержит значения данных для часов 40-20. Осталось 20 часов данных. Однако, когда приложение получает второй массив, оно содержит данные для часов 20-0, после чего приложение будет получать больше данных. Принесите данные снова. Если начинающий байт составляет 20 или меньше, приложение не попытается снова принести данные. Если мои стартовые байты составляют 0x28, приложение считывает начальный байт как 40 и будет анализировать 20 точек данных (40-20). Я не могу снова обновить массив, пока в следующий раз, когда приложение попытается получить данные, что заставляет приложение приносить один и тот же массив снова и снова. Я думаю, что мне нужно сделать обновление массива с правильным байтом в качестве начального индекса, прежде чем приложение принесет данные во второй раз. Я ищу как конкретные примеры кода, как решить проблему, так и более общие предложения по механике всего этого. Кроме того, если что -то не хватает в моем описании, я с радостью предоставлю его. Я не предоставил никакого кода из моего приложения, так как я не думаю, что необходимо решить проблему, но я могу ошибаться. < /P>
void updateHistoricalData() {
Serial.println("Updating Historical Data...");
uint8_t historicalData[PAGE_SIZE];
// Set different start indices for different pages
if (currentPage == 0) {
Serial.println("First page, setting start index to 40");
historicalData[0] = 0x28; // High byte
historicalData[1] = 0x00; // Low byte (40 in hex)
} else {
Serial.println("Second page, setting start index to 20");
historicalData[0] = 0x14; // High byte
historicalData[1] = 0x00; // Low byte (20 in hex)
}
uint8_t drainGain = 0b01000001; // 10mA
uint8_t voltage = 0xD1; // 3.25V
// Fill the rest of the page with data points
for (int i = 0; i < 20; i++) {
int offset = 2 + i * 3;
historicalData[offset] = drainGain; // Drain
historicalData[offset + 1] = drainGain; // Gain
historicalData[offset + 2] = voltage; // Voltage
}
Serial.println("Historical data filled. Sending to characteristic...");
pHistoricalDataCharacteristic->setValue(historicalData, sizeof(historicalData));
Serial.print("Sent Page: ");
Serial.println(currentPage);
}
private:
// Callback for Historical Data characteristic
class HistoricalDataCallback : public BLECharacteristicCallbacks {
void onRead(BLECharacteristic* pCharacteristic) override {
Serial.println("[BLE READ] Historical data characteristic read request received.");
Serial.print("Current page before read: ");
Serial.println(currentPage);
// Use the global pointer to access the PowerfoyleBLEServer instance
if (g_PowerfoyleBLEServerInstance) {
if (currentPage < TOTAL_PAGES) {
currentPage++; // Move to next page
Serial.print("Moving to next page: ");
Serial.println(currentPage);
g_PowerfoyleBLEServerInstance->updateHistoricalData(); // Update
characteristic with next page
} else {
Serial.println("All pages sent. Resetting index.");
currentPage = 0; // Reset after last page
}
} else {
Serial.println("[ERROR] g_PowerfoyleBLEServerInstance is null!");
}
}
};
void createHistoricalDataCharacteristic() {
Serial.println("Creating Historical Data Characteristic...");
pHistoricalDataCharacteristic = pService->createCharacteristic(
POWERFOYLE_HISTORICAL_DATA_UUID,
BLECharacteristic::PROPERTY_READ
);
Serial.println("Initializing with first page...");
updateHistoricalData(); // Send first page
pHistoricalDataCharacteristic->setCallbacks(new HistoricalDataCallback());
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... ming-issue
Проблема срока времени данных BLE ⇐ C++
Программы на C++. Форум разработчиков
1743497392
Anonymous
Фон:
У меня есть приложение, разработанное в Android Studios, которое считывает данные с устройства BLE и отображает данные в приложении. Данные являются историческими данными, которые содержат 3 типа данных, давайте назовем их X, Y и Z, и они собираются с датчика. Одна точка данных содержит все три типа, а одна точка данных собирается в час. Это генерирует массив данных, которые похожи на: < /p>
x1,1,1,1,2,y2,12,....xn,yn,1,1,1,1,2,y2, заказ. Это означает, что для приложения правильно разрабатывать данные, и по этой причине первые два байта массива указывают, сколько часов было собрано. В качестве примера, полный массив может выглядеть как: < /p>
первые 20 значений (часы 40-20)
[0x00, 0x28, x1, y1, z1, x2, y2, z2, ..., x20, y20, z20] < /p>
X21, Y21, Z21, X22, Y22, Z22, ..., X40, Y40, Z40] < /p>
Приложение будет читать первые два байта, и в зависимости от них будет решать, принести ли следующие 20 значений или нет. В этом случае, если приложение получает первый массив, оно попытается извлечь данные еще раз, поскольку массив содержит значения данных для часов 40-20. Осталось 20 часов данных. Однако, когда приложение получает второй массив, оно содержит данные для часов 20-0, после чего приложение будет получать больше данных. Принесите данные снова. Если начинающий байт составляет 20 или меньше, приложение не попытается снова принести данные. Если мои стартовые байты составляют 0x28, приложение считывает начальный байт как 40 и будет анализировать 20 точек данных (40-20). Я не могу снова обновить массив, пока в следующий раз, когда приложение попытается получить данные, что заставляет приложение приносить один и тот же массив снова и снова. Я думаю, что мне нужно сделать обновление массива с правильным байтом в качестве начального индекса, прежде чем приложение принесет данные во второй раз. Я ищу как конкретные примеры кода, как решить проблему, так и более общие предложения по механике всего этого. Кроме того, если что -то не хватает в моем описании, я с радостью предоставлю его. Я не предоставил никакого кода из моего приложения, так как я не думаю, что необходимо решить проблему, но я могу ошибаться. < /P>
void updateHistoricalData() {
Serial.println("Updating Historical Data...");
uint8_t historicalData[PAGE_SIZE];
// Set different start indices for different pages
if (currentPage == 0) {
Serial.println("First page, setting start index to 40");
historicalData[0] = 0x28; // High byte
historicalData[1] = 0x00; // Low byte (40 in hex)
} else {
Serial.println("Second page, setting start index to 20");
historicalData[0] = 0x14; // High byte
historicalData[1] = 0x00; // Low byte (20 in hex)
}
uint8_t drainGain = 0b01000001; // 10mA
uint8_t voltage = 0xD1; // 3.25V
// Fill the rest of the page with data points
for (int i = 0; i < 20; i++) {
int offset = 2 + i * 3;
historicalData[offset] = drainGain; // Drain
historicalData[offset + 1] = drainGain; // Gain
historicalData[offset + 2] = voltage; // Voltage
}
Serial.println("Historical data filled. Sending to characteristic...");
pHistoricalDataCharacteristic->setValue(historicalData, sizeof(historicalData));
Serial.print("Sent Page: ");
Serial.println(currentPage);
}
private:
// Callback for Historical Data characteristic
class HistoricalDataCallback : public BLECharacteristicCallbacks {
void onRead(BLECharacteristic* pCharacteristic) override {
Serial.println("[BLE READ] Historical data characteristic read request received.");
Serial.print("Current page before read: ");
Serial.println(currentPage);
// Use the global pointer to access the PowerfoyleBLEServer instance
if (g_PowerfoyleBLEServerInstance) {
if (currentPage < TOTAL_PAGES) {
currentPage++; // Move to next page
Serial.print("Moving to next page: ");
Serial.println(currentPage);
g_PowerfoyleBLEServerInstance->updateHistoricalData(); // Update
characteristic with next page
} else {
Serial.println("All pages sent. Resetting index.");
currentPage = 0; // Reset after last page
}
} else {
Serial.println("[ERROR] g_PowerfoyleBLEServerInstance is null!");
}
}
};
void createHistoricalDataCharacteristic() {
Serial.println("Creating Historical Data Characteristic...");
pHistoricalDataCharacteristic = pService->createCharacteristic(
POWERFOYLE_HISTORICAL_DATA_UUID,
BLECharacteristic::PROPERTY_READ
);
Serial.println("Initializing with first page...");
updateHistoricalData(); // Send first page
pHistoricalDataCharacteristic->setCallbacks(new HistoricalDataCallback());
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79548136/ble-data-timing-issue[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия