DataCompressor
Модуль для бітового упаковування та стискання показань датчиків у 7-байтовий масив.
Модуль DataCompressor належить до простору імен flowercare::utils і відповідає за бітове упаковування показань датчиків (батарея, температура, тиск, вологість, освітленість) у компактний 7-байтовий масив outArray. Використовується для економії flash-пам'яті при збереженні записів та мінімізації розміру BLE-пакетів.
tip
Цей елемент є унікальний для різних пристротоїв і вимагає перегерацію цього коду відповідно до полів.

Підключення
#include "dataCompressor.hpp"
Простір імен: flowercare::utils
Функції
compressSensorData()
void compressSensorData(
uint8_t* outArray,
uint8_t battery,
uint16_t temp,
uint16_t pressure,
uint8_t humidity,
uint32_t luminance
);
Стискає вхідні показання датчиків у 7-байтовий масив outArray за допомогою бітових зсувів та масок.
Параметри
| Параметр | Тип | Біти | Опис |
|---|---|---|---|
outArray | uint8_t* | — | Вказівник на буфер розміром не менше 7 байт для запису результату. |
battery | uint8_t | 7 | Рівень заряду акумулятора (0–100%). |
temp | uint16_t | 12 | Значення температури. |
pressure | uint16_t | 12 | Значення атмосферного тиску. |
humidity | uint8_t | 7 | Відносна вологість повітря (0–100%). |
luminance | uint32_t | 18 | Рівень освітленості (люкси/Raw). |
Схема бітового упаковування (7 байт)
Уся сума даних (56 біт = 7 байт) розміщується у масиві за такою маскою:
| Байт | Біти в байті | Вхідний параметр | Використовувані біти параметра |
|---|---|---|---|
outArray[0] | [0..6]``[7] | battery``temp | battery [0..6] (7 біт)temp [0] (1 біт) |
outArray[1] | [0..7] | temp | temp [1..8] (8 біт) |
outArray[2] | [0..2]``[3..7] | temp``pressure | temp [9..11] (3 біти)pressure [0..4] (5 біт) |
outArray[3] | [0..6]``[7] | pressure``humidity | pressure [5..11] (7 біт)humidity [0] (1 біт) |
outArray[4] | [0..5]``[6..7] | humidity``luminance | humidity [1..6] (6 біт)luminance [0..1] (2 біти) |
outArray[5] | [0..7] | luminance | luminance [2..9] (8 біт) |
outArray[6] | [0..7] | luminance | luminance [10..17] (8 біт) |
Приклад використання
#include "dataCompressor.hpp"
void processSensors() {
uint8_t compressedBuffer[7] = {0};
uint8_t battery = 95; // 95%
uint16_t temp = 235; // Наприклад, 23.5°C * 10
uint16_t pressure = 1013; // hPa
uint8_t humidity = 60; // 60%
uint32_t luminance = 45000; // Lux
// Стискання показань у 7 байт
flowercare::utils::compressSensorData(
compressedBuffer,
battery,
temp,
pressure,
humidity,
luminance
);
// compressedBuffer тепер готовий до збереження у flash або відправки через BLE
}