试验目的:利用手势模块检测到特定的手势,实现蜂鸣器、继电器的开启与关闭。在手势读取功能正常后,对负载进行控制。
硬件接线:
PC1 接蜂鸣器模块 高电平使能
PC4 接双路机电元件继电器1 高电平使能
PB8 接双路机电元件继电器2 高电平使能
STM32 cube软件初始化配置:以PC1 为例介绍:
 
点击生成的底层驱动代码:
IO口配置代码分为:
1:使能所使用IO口时钟;
2:设置IO引脚的初始电平,为低电平
3:配置IO口的模式信息
void MX_GPIO_Init(void)
{
 
  GPIO_InitTypeDef GPIO_InitStruct = {0};
 
  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOC_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
 
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1|GPIO_PIN_4, GPIO_PIN_RESET);
 
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
 
  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
 
  /*Configure GPIO pins : PC1 PC4 */
  GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_4;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
 
  /*Configure GPIO pin : PA5 */
  GPIO_InitStruct.Pin = GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
 
  /*Configure GPIO pin : PB8 */
  GPIO_InitStruct.Pin = GPIO_PIN_8;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
}在生成的代码中添加IO口的操作代码如下:
/*定义蜂鸣器、双路继电器的输出状态控制部分,直接操作对应IO口*/
#define BEEPON HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_SET); #define BEEPOFF HAL_GPIO_WritePin(GPIOC, GPIO_PIN_1, GPIO_PIN_RESET); #define JDQ1ON HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_SET); #define JDQ1OFF HAL_GPIO_WritePin(GPIOC, GPIO_PIN_4, GPIO_PIN_RESET); #define JDQ2ON HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); #define JDQ2OFF HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
最后在手势检测代码中,添加上述继电器控制部分:
如下图所示:
case PAJ_UP:        BEEPON ;  printf("Up\r\n");       break;
case PAJ_DOWN:       BEEPOFF ;  printf("Down\r\n");     break;
case PAJ_LEFT:       JDQ1ON ;  printf("Left\r\n");     break;
case PAJ_RIGHT:       JDQ1OFF ;  printf("Right\r\n");        break;
case PAJ_FORWARD:      JDQ2ON ;  printf("Forward\r\n");   break;
case PAJ_BACKWARD:     JDQ2OFF ;  printf("Backward\r\n");   break;
case PAJ_CLOCKWISE:     printf("Clockwise\r\n");  break;
case PAJ_COUNT_CLOCKWISE:  printf("AntiClockwise\r\n");break;
case PAJ_WAVE:       printf("Wave\r\n");      break;
然后编译、下载查看试验效果:
1:向上蜂鸣器工作,向下继电器熄灭。
2:向左继电器1吸合,并且板载指示灯工作;向右继电器1断开,并且板载指示灯熄灭;
3:向前继电器2吸合,并且板载指示灯工作;向后继电器2断开,并且板载指示灯熄灭;
演示效果如下:B站视频
https://www.bilibili.com/video/BV11Z8deiEgA/?spm_id_from=333.999.0.0

 
					
				
 
			
			
			
						
			 
					
				 
					
				 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

