我有一个非常基本的问题。我想根据Nrf52 BLE设备接收到的BLE数据来打开/关闭LED。我的问题是数据(Received_Data)的格式为原始字节数据格式(1字节),我不知道如何执行if语句,或者将其转换为可以的形式。 在下面的代码中,我有:
if (Received_Data > 50)
{
nrf_gpio_pin_toggle(LED_2);
}
end
如何在这样的IF语句中使用'Received_Data',以便可以将其读取为整数或十六进制数字?
case APP_UART_DATA_READY:
UNUSED_VARIABLE(app_uart_get(&data_array[index]));
index++;
if ((data_array[index - 1] == '\n') ||
(data_array[index - 1] == '\r') ||
(index >= m_ble_nus_max_data_len))
{
if (index > 1)
{
NRF_LOG_DEBUG("Ready to send data over BLE NUS");
NRF_LOG_HEXDUMP_DEBUG(Received_Data, index);
if (Received_Data > 50)
{
nrf_gpio_pin_toggle(LED_2);
}
end
这是我的头脑。我确定有人可以在5秒内回答。而且我无法花时间去浏览所有相关的C ++文档以找到解决方案。
答案 0 :(得分:0)
由于Received_Data是一个uint8_t数组,因此您可以直接访问各个字节:
if (Received_Data[0] > 50)
//or
if (Received_Data[index] > 50)
uint8_t为[0..255]。
答案 1 :(得分:0)
根据您的问题
如何在这样的IF语句中使用'Received_Data',所以 它可以读取为整数还是十六进制数字?
根据您的评论
已将其定义为uint8:uint8_t Received_Data [BLE_NUS_MAX_DATA_LEN];
只需要检查数组中的字节是在a之上还是之下 某个阈值,例如50。这样做的语法是什么 带有IF语句?
Received_Data
是无符号8位整数的数组。在您提供的第一段代码中:
if (Received_Data > 50){
nrf_gpio_pin_toggle(LED_2);
}
Received_Data
衰减为指向数组第一个元素的指针。因此,您实际上是在指针和整数(ISO C ++明确禁止)之间进行比较。如果要检查该数组的特定元素的值,则需要使用下标运算符对其进行索引,如下所示:
//byte_of_interest is some non-negative integer value that specifically represents
//the element in the array that you are interested in comparing with 50
if (Received_Data[byte_of_interest] > 50){
nrf_gpio_pin_toggle(LED_2);
}
同样,您也可以使用指针算法:
//byte_of_interest is an offset from the beginning of the array
//so its contents are located at the address to the beginning of the array + the offset
if (*(Received_Data + byte_of_interest) > 50){
nrf_gpio_pin_toggle(LED_2);
}
此外,我建议您将数组初始化为0,以防止在填充数组之前得到误报(例如uint8_t Received_Data[BLE_NUS_MAX_DATA_LEN] = {0};
)