ESP32-S3 控制 PS2传感器模块

ESP32-S3 PS2摇杆传感器模块实验 —— 方向检测与按键识别

本实验通过 ESP32-S3 与 PS2 摇杆模块 实现摇杆方向检测和按键识别。

通过串口监视器实时输出摇杆方向和按键状态,便于理解摇杆模块的使用方法。


一、实验名称

PS2摇杆传感器模块实验


二、接线说明

PS2摇杆模块 ESP32-S3 引脚
VCC 3V3
GND GND
VRX 6
VRY 7
SW 5

三、实验现象

  1. 程序下载成功后,操作摇杆,串口监视器实时输出摇杆方向:

    • up 上
    • down 下
    • left 左
    • right 右
  2. 按下摇杆按键 SW 时,串口显示 “pressed”。


四、注意事项

  • VRX、VRY 为模拟输入,需要设置 ADC 分辨率为 12bit(0~4095)。
  • SW 按键为数字输入,可通过 ADC 读取判断按下状态。
  • 串口波特率设置为 115200,以便实时显示数据。

五、完整代码示例

// 定义控制管脚
#define vry_pin   7
#define vrx_pin   6
#define sw_pin    5

// 定义全局变量
int adcx = 0;
int adcy = 0;
int adcsw = 0;

// 数据范围映射函数
int ratio_map(int x, int in_min, int in_max, int out_min, int out_max) {
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

// 方向判断函数
int direction(void) {
    char i = 0;

    adcx = analogRead(vrx_pin); // 读取X轴ADC值
    adcx = ratio_map(adcx, 0, 4095, 0, 255);

    adcy = analogRead(vry_pin); // 读取Y轴ADC值
    adcy = ratio_map(adcy, 0, 4095, 0, 255);

    adcsw = analogRead(sw_pin); // 读取按键ADC值
    adcsw = ratio_map(adcsw, 0, 4095, 0, 255);

    if (adcx <= 30) i = 1;       // up方向
    else if (adcx >= 255) i = 2; // down方向
    else if (adcy >= 255) i = 3; // left方向
    else if (adcy <= 30) i = 4;  // right方向
    else if (adcsw == 0) i = 5;  // Button按下

    return i;
}

void setup() {
    // 串口配置
    Serial.begin(115200);
    // 设置ADC分辨率为12bit (0~4095)
    analogReadResolution(12);
}

void loop() {
    String state[6] = {"home", "up", "down", "left", "right", "pressed"};
    String temp;
    while (1) {
        temp = state[direction()];
        Serial.print("方向:");
        Serial.println(temp);
        delay(500);
    }
}

六、代码讲解

  1. ADC 读取与映射
adcx = analogRead(vrx_pin);
adcx = ratio_map(adcx, 0, 4095, 0, 255);
  • VRX、VRY 模拟输入读取 04095 的值,通过 ratio_map 映射到 0255,便于判断方向。
  1. 方向判断逻辑
if (adcx <= 30) i = 1;       // up
else if (adcx >= 255) i = 2; // down
else if (adcy >= 255) i = 3; // left
else if (adcy <= 30) i = 4;  // right
  • 通过 X、Y 轴值判断摇杆偏转方向。
  1. 按键检测
else if (adcsw == 0) i = 5;  // Button按下
  • 读取 SW 按键 ADC 值,判断是否按下。
  1. 串口输出
temp = state[direction()];
Serial.print("方向:");
Serial.println(temp);
  • 通过字符串数组对应方向和按键状态,输出到串口。

七、实验效果

  1. 摇杆向上操作,串口显示:
方向:up
  1. 摇杆向左操作,串口显示:
方向:left
  1. 按下摇杆按钮,串口显示:
方向:pressed

八、总结

  • 学会读取 模拟信号 VRX、VRY 并进行映射。
  • 通过条件判断实现 摇杆方向识别
  • 按键检测可与方向结合,实现更多控制功能。
posted @ 2025-08-16 16:04  jeikerxiao  阅读(81)  评论(0)    收藏  举报