你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

X-NUCLEO-IKS4A1实现手势滑动

[复制链接]
知识不仅闹 发布时间:2024-12-17 15:52

1.项目的需求

• 使用板卡上的触摸按键,实现点按和左右滑动,实现传感器选择和切换,并将数据发送到上位机,功能选择的可视化也在上位机完成

如:能够选择加速度传感器,开启X轴数据发送,然后关闭加速度显示,选择温度

处理思路

**(1)板卡上的触摸按键:板卡上的触摸按键是使用板卡自带的QVAR的滑动电极,我们通过在GitHub配置的程序移植一下到我们的STM32Demo历程中移植调用。 **** (2)通过OLED屏幕显示我们当前按键的状态,通过按键单击或者滑动,来控制我们的上位机的显示我们的数据。 **** **(3)通过QT制作上位机,添加按键功能实现我们对数据采集的显示,通过滑动按键控制我们的上位机,对于我们的QT上位机的数据进行开启或者关闭。

2.STM32程序移植的配置

本次的历程是基于STM32自带的历程修改的,首先我们先将应用设置到我们DataLOG窗口。** 1.png

根据实例程序需要什么端口,我们手动配置一下需要的串口,来实现我们的操作。** 2.png

之后我们就开始移植我们的程序,我们先将程序下载之后,通过我们串口助手查看是否能发送数据。** **我们可以看到串口助手有数据发送过来,我们的实例程序就已经配置好了

3.png

移植QVAR

在实例程序中,我们的QVAR没有代码进行配置,但是底层程序还是存在的,我们从GitHub上找到stm32对QVAR的配置,根据其中的代码来移植我们的程序。** 4.png

这里我将QVAR的程序移植到一个.c文件上,之后可以方便我们模块化移植。整体框架就是这样,之后是我们细节问题。

程序流程图

5.png

QVAR的手势判断

QVAR的手势判断我们就是要通过判断电压值的变化,通过电压值的变化,来判断我门的滑动状态。** **这里我们需要我们设置我们的阈值,到达我们的阈值来获取我们的操作的判断。

void QVAR_Proc(void)
{
    static uint8_t QVAR_Val,QVAR_Down,QVAR_Up,QVAR_Old;
    QVAR_Val = QVAR_Read(QVAR_Value());
    QVAR_Down = QVAR_Val & (QVAR_Val ^ QVAR_Old);
    QVAR_Up = ~QVAR_Val & (QVAR_Val ^ QVAR_Old);
    QVAR_Old = QVAR_Val;
    OLED_ShowNum(0,16,QVAR_Val,1,8);
    if(QVAR_Down>0)//说明有按键按下
    {
        QVAR_Down_click_count++;
        QVAR_Flag = 1;
        time_200ms = 0;
    }
    //这里我们要判断的是down不等于old
    
    if(time_200ms >= 200)
    {
        switch(QVAR_Down_click_count)
        {
            case 1:
                //执行单击
                OLED_ShowString(0,0,"One  ",8);
                printf("command:One\r\n");
            break;
            case 2:
                //执行双击
                OLED_ShowString(0,0,"Two  ",8);
                printf("command:Two\r\n");
                QVAR_Flag = 0;
            break;
        }
        QVAR_Down_click_count=0;
        QVAR_Flag = 0;
        time_200ms = 0;
    }else if(QVAR_Flag==1&&QVAR_Down!=QVAR_Old&&time_200ms < 200)   //按键按下的时候判断
    {
        QVAR_Flag = 0;
        QVAR_Down_click_count = 0;
        if(QVAR_Old==2)
        {
         OLED_ShowString(0,0,"LEFT  ",8);
         printf("command:Left\r\n");
        }
        else if(QVAR_Old==1)
        {
         OLED_ShowString(0,0,"RIGHT  ",8);
          printf("command:Right\r\n");
        }
    }
}

这里我们通过在滴答定时器定时我们的短按时间,来判断我们的触摸操作。

void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */

  /* USER CODE END SysTick_IRQn 0 */
  HAL_IncTick();
  /* USER CODE BEGIN SysTick_IRQn 1 */
    if(++time_1000ms>=2000)
    {
        Start = 1;
        time_1000ms = 0;
    }

    if(QVAR_Flag == 1)
    {

        if(++time_200ms ==200)
        {
            time_200ms = 201;
        }
    }else{
        time_200ms = 0;
    }
    if(++time_100s==100)
    {
        QVAR_Proc();
        time_100s = 0;
    }
  /* USER CODE END SysTick_IRQn 1 */
}

这里我们添加 了 start的标志位,因为这样处理的话,不会让我们的串口发的太快,影响我们的触摸的判断,这里我们我们添加1s的标志位。

收藏 评论0 发布时间:2024-12-17 15:52

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版