#include "bluetooth.h" #include "usart.h" #include "control.h" #include "stdio.h" #define BUFFER_SIZE 100 #define MESSAGE_SIZE 19 #define CMD_NUM 9 static uint8_t rxBuffer[BUFFER_SIZE], rxSize; static uint8_t txBuffer[BUFFER_SIZE], txSize; static uint8_t cmdIndex; void BLUETOOTH_Init(void) { rxSize = 0; HAL_UART_Receive_IT(&huart2, rxBuffer, 1); } void receiveCmd() { // 通用协议 if (rxBuffer[2] == ',') { cmdIndex = 0; for (uint8_t i = 1; i < MESSAGE_SIZE; i += 2) if (rxBuffer[i] == '0') ++cmdIndex; else break; if (cmdIndex == CMD_NUM) cmdIndex = 0; CONTROL_CommonCmd(cmdIndex, rxBuffer[cmdIndex * 2 + 1]); } else { static uint16_t num[6]; switch (rxBuffer[5]) { // 机械手 case 'S': break; // 舵机云台 case 'P': break; // 七彩灯 case 'C': sscanf(rxBuffer + 5, "%*3s%hu,%*3s%hu,%*3s%hu", num, num + 1, num + 2); CONTROL_RGB(num[0], num[1], num[2]); break; // 模式选择 case 'M': sscanf(rxBuffer + 5, "%*4s%lc%lc", num, num + 1); CONTROL_Mode(num[0] - '0', num[1] - '0'); break; } } HAL_UART_Transmit(&huart1, rxBuffer, rxSize, 1000); } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if (huart == &huart2) { if (rxSize && rxBuffer[rxSize] == '#') { if (++rxSize > 10) receiveCmd(); BLUETOOTH_Init(); } else if (rxSize++ == 0 && rxBuffer[0] == '$') HAL_UART_Receive_IT(&huart2, rxBuffer + rxSize, 1); } }