Как отправить данные с плавающей запятой через BLE и правильно отобразить их на UART (nRF Toolbox)

Я отправляю команду по BLE с центрального (Android) на nRF52832 и получаю обратно данные SPI, но в неправильном формате. Как я могу преобразовать/отобразить эти данные как есть.

Я ожидаю получить [1.2 2.2 3.2], когда отправлю '1' на nRF52832. Все, что я получаю до сих пор, это шестнадцатеричные данные [FF?@].

if (p_evt->params.rx_data.p_data[0] == '1') // If the Rx_Central input is '1', ble_nus_data_send the accelerometer data.
{ 
    spim_rx_buffer.AccX = 1.2; // Random dummy data
    spim_rx_buffer.AccY = 2.2; // Random dummy data
    spim_rx_buffer.AccZ = 3.2; // Random dummy data

      for(int i = 0; i < 3; i++)
        {
            uint16_t len = sizeof(float);
            float* spi_p = (float*) &spim_rx_buffer;
            err_code = ble_nus_data_send (&m_nus, (uint8_t*)spi_p+i*sizeof(float), &len, m_conn_handle);
        }
}

person Jakim    schedule 02.04.2019    source источник
comment
Пожалуйста, вставьте код в виде текста, а не в виде скриншота. См. также meta.stackoverflow.com/a/285557/413337.   -  person Codo    schedule 02.04.2019


Ответы (1)


Чтение документации ble_nus_data_send помогает:

Function for sending a data to the peer.
This function sends the input string as an RX characteristic notification to the peer.

Parameters
[in]    p_nus   Pointer to the Nordic UART Service structure.
[in]    p_data  String to be sent.
[in,out]    p_length    Pointer Length of the string. Amount of sent bytes.
[in]    conn_handle Connection Handle of the destination client.

Что вы делаете, так это приводите указатель с плавающей запятой к uint8, таким образом, вы

  1. передавать только один байт из представления битов с плавающей запятой
  2. передавать необработанные данные, которые могут быть интерпретированы как строка где-то

Вы можете использовать sprintf для преобразования вашего числа с плавающей запятой в действительную строку.

Или вы пытаетесь нарушить API (уродливо) и преобразовать необработанные данные с плавающей запятой в uint8, что означает, что один результат с плавающей запятой составляет, вероятно, 4 байта. Теперь надеюсь, что базовый код не интерпретирует что-то как строку, например, 0 терминатора или около того.

person maze    schedule 02.04.2019