这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【DIY手势翻页笔】手势翻页笔-过程贴+课程2手势控制继电器、蜂鸣器动作

共3条 1/1 1 跳转至

【DIY手势翻页笔】手势翻页笔-过程贴+课程2手势控制继电器、蜂鸣器动作

助工
2024-06-30 21:24:32     打赏

试验目的:利用手势模块检测到特定的手势,实现蜂鸣器、继电器的开启与关闭。在手势读取功能正常后,对负载进行控制。

硬件接线:

PC1  接蜂鸣器模块        高电平使能

PC4  接双路机电元件继电器1   高电平使能

PB8  接双路机电元件继电器2   高电平使能

 

STM32 cube软件初始化配置:以PC1 为例介绍:

 3.2.0.png

点击生成的底层驱动代码:

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

TEST04_GPIO.zip





关键词: STM32H750     PAJ手势模块     蜂鸣器、继电器    

菜鸟
2024-06-30 23:51:44     打赏
2楼

谢谢分享


专家
2024-07-01 21:32:50     打赏
3楼

谢谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]