#include "bluetooth.h" #include "usart.h" #include "control.h" #include #include #define BUFFER_SIZE 100 #define MESSAGE_SIZE 19 #define CMD_NUM 9 static int8_t rxBuffer[BUFFER_SIZE], txBuffer[BUFFER_SIZE]; static uint8_t cmdIndex; void BLUETOOTH_Init(void) { HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rxBuffer, 100); } void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { if (huart == &huart2 && rxBuffer[0] == '$' && rxBuffer[Size - 1] == '#') { // 通用协议 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%c%c", num, num + 1); CONTROL_Mode(num[0] - '0', num[1] - '0'); break; } } memcpy(txBuffer, rxBuffer, Size); printf("%s", txBuffer); HAL_UART_Transmit_IT(&huart2, txBuffer, Size); BLUETOOTH_Init(); } }