STM32 HAL庫快速實戰【六】《藍牙控制》--基於黑龍江科技大學機電工業機器人實訓


系列目錄

前言

請確保《已經完成串口簡單實用》以及《控制串口電機》

CubeMX配置

與上節完全一致

編寫代碼

打開motor.c
使用藍牙控制時,單片機需要處理藍牙發來的數據並處理,因此添加如下代碼

char get_cmd(void) //從串口3接收字符
{
  uint8_t ch =0;
	//HAL_UART_Receive(&huart1, &ch, 1, 0xffff);//輪詢阻塞方式
	while(HAL_UART_Receive_IT(&huart3, &ch, 1)!=HAL_OK){};
  return ch;
}

注意,為了方便使用,這里只接收一個字符,如需要接收字符串,需要自行添加緩沖區,相關實現不在這里贅述。
然后再motor.h 中聲明

#include "usart.h"
#include "stdio.h"
#include "string.h"
void usart_send_str(UART_HandleTypeDef *huart,unsigned char *Data);
void motor_init(void);
void motor_set(int car_left, int car_right);
char get_cmd(void);

在主函數中,通過input=get_cmd()來獲取藍牙發送的字節。
獲取到字節后,通過switch case語句,即可執行不同代碼。

 switch(input)
	{	  
	case 'A':
	  __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,speed);
	  HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
	  speed+=3;
	  printf("led togglePin,speed [%d],you input %c",speed,input);
	  //usart_send_str(&huart1,(unsigned char *)"is usart_send_str test \r\n");
	 break;

執行完后,使用input=NULL;來重置命令,防止代碼重復執行。
結合上節控制電機的代碼,即可通過藍牙進行控制。

  /* USER CODE BEGIN WHILE */
  int speed=500;
  char input;
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  input=get_cmd();
	  if(input){
		  switch(input)
		  {	  
			  case 'A':
				  __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,speed);
				  HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
				  speed+=3;
				  printf("led togglePin,speed [%d],you input %c",speed,input);
				 //usart_send_str(&huart1,(unsigned char *)"is usart_send_str test \r\n");
			  break;
			  case 'B':
				  usart_send_str(&huart3,(unsigned char *)"car go\r\n");
				  printf("car go\r\n");
				  motor_set(1000,1000);
			  break;
			  case 'C':
				  usart_send_str(&huart3,(unsigned char *)"car back\r\n");
			  printf("car back\r\n");
			  motor_set(-1000,-1000);
			  break;
			  case 'D':
				  usart_send_str(&huart3,(unsigned char *)"car left\r\n");
			  printf("car left\r\n");
			  motor_set(1000,0);
			  break;
			  case 'E':
				  usart_send_str(&huart3,(unsigned char *)"car right\r\n");
			  printf("car right\r\n");
			  motor_set(0,1000);
			  break;			  
			  case 'F':
				  usart_send_str(&huart3,(unsigned char *)"car stop\r\n");
			  printf("car stop\r\n");
			  motor_set(0,0);
			  break;
	  }	
	  input=NULL;
  }
  }
  /* USER CODE END 3 */

藍牙調試

將藍牙模塊插入藍牙接口
然后上電,打開手機藍牙,與BT18進行配對。配對碼1234
image
然后打開BlueSPP,CONNECT BT18
image

連接后發送ABCDEF字符,電機執行對應命令,並返回執行了哪條命令。
image

工程源碼

國內用戶請使用gitee克隆或是使用代理訪問Github
https://github.com/USTHzhanglu/stm32-hal/tree/main/bluetooch


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM