这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【DIY手势翻页笔】成果篇手势动作

共4条 1/1 1 跳转至

【DIY手势翻页笔】成果篇手势动作

工程师
2024-06-26 16:45:48     打赏

一、器件知识:

认识手势模块的具体功能与参数

环境光免疫力:<100k Lux

红外LED和光学镜头,能在低光和黑暗环境下工作

其它的两个我这边就不介绍了,详细请看规格书。

继电器.pdf

1719390567995.jpg

手势.pdf

1719390623460.jpg

蜂鸣器.pdf

1719390594002.jpg

二、具体预设实施方法:

PAJ7620U2+继电器实现手势控制实现方式

PAJ7620U2的驱动程序或库

 将继电器的控制引脚连接到开发板的某个GPIO口上,PB0。(无源蜂鸣器,使用的是定时器3,通道3)

软件配置

根据手势映射的结果,通过GPIO控制继电器的开关,进而控制灯的亮灭。我这里最后还是用手去按下按键,本来是计划用手势去控制的,想了一下,为了区分,才用按键来操作。

在实际操作前,建议先进行软件测试和仿真,确保代码逻辑正确。然后进行硬件连接和测试,根据测试结果进行调试和优化。

三、流程图:

1719402711213.jpg

四、模块连接图:

image.png

五、核心代码:

// 无限循环,程序将一直执行此循环内的代码  
while (1)  
{  
    // 这里是留给用户添加代码的标记,但在这个代码段中没有实际的内容  
    /* USER CODE END WHILE */  
  
    // 这里是另一个留给用户添加代码的标记  
    /* USER CODE BEGIN 3 */  
  
    // 调用一个函数(可能是I2C通信的函数)来从某个地址(PAJ_INT_FLAG1)读取一个16位的数据  
    // 这个数据代表手势或设备的某种状态  
    Gesture_Data = DEV_I2C_ReadWord(PAJ_INT_FLAG1);  
  
    // 检查读取到的数据是否非零(即是否有手势或状态被识别)  
    if (Gesture_Data)  
    {  
        // 使用switch语句根据Gesture_Data的值来执行不同的操作  
        switch (Gesture_Data)  
        {  
            // 如果Gesture_Data等于HID_UP(可能是代表向上的手势)  
            case HID_UP:  
                // 设置HID_Mouse_SET为PapeToUp(可能是表示光标或鼠标向上移动的函数或命令)  
                HID_Mouse_SET=PapeToUp;  
                break;  
  
            // 如果Gesture_Data等于HID_DOWN(可能是代表向下的手势)  
            case HID_DOWN:  
                // 设置HID_Mouse_SET为PapeToUd(注意这里可能是个拼写错误,应该是PapeToDown或其他类似的)  
                HID_Mouse_SET=PapeToUd;  
                break;  
  
            // 如果Gesture_Data等于HID_LEFT(可能是代表向左的手势)  
            case HID_LEFT:  
                // 设置HID_Mouse_SET为CursorToLeft(表示光标或鼠标向左移动的函数或命令)  
                HID_Mouse_SET=CursorToLeft;  
                break;  
  
            // 如果Gesture_Data等于HID_RIGHT(可能是代表向右的手势)  
            case HID_RIGHT:  
                // 设置HID_Mouse_SET为CursorToRight(表示光标或鼠标向右移动的函数或命令)  
                HID_Mouse_SET=CursorToRight;  
                break;  
  
            // 以下的case语句都未给出具体的操作,只是简单地跳过了  
            case HID_FORWARD:  
            break;  
            case HID_BACKWARD:  
            break;  
            case HID_CLOCKWISE:  
            break;  
            case HID_COUNT_CLOCKWISE: // 注意这里可能是个拼写错误,应该是"COUNTER_CLOCKWISE"  
            break;  
            case HID_WAVE:  
            break;  
  
            // 如果Gesture_Data的值不是上述任何一个,则执行default分支(但在这里default分支也是空的)  
            default: break;  
        }  
    }  
  
    // 注意:在这个代码段中,没有显示`HID_Mouse_SET`是如何被使用的。通常,你可能需要在这个switch语句之后或某个地方调用这个变量所代表的函数或命令。  
}


六、设备管理器查看设备:

下图是接了开发板TYPE C的设备:

02b969e36f07ed50408df8595a56abe.png

拿掉USB后的设备,少了一个:

7506bba1557d790eb1f923ac411c7f8.png

七、使用CUBE MX配置步骤:

系统配置:

image.png


RCC配置:

image.png

定时器配置:

image.png

IIC配置:

image.png

USB配置:

image.png

image.png


串口配置:

image.png

image.png

GPIO配置:

image.png


系统时钟:

image.png


八、代码截图:

主函数HID判定:

image.png

image.png

GPIO初始化:

image.png

九、视频连接:




高工
2024-06-26 17:24:46     打赏
2楼

谢谢分享


高工
2024-06-26 21:22:22     打赏
3楼

谢谢分享


专家
2024-06-27 06:40:06     打赏
4楼

对我来说你是牛人


共4条 1/1 1 跳转至

回复

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