本站改版新增arduino频道
arduino PS2 双轴按键摇杆实验
#define PS2_X 15
#define PS2_Y 2
#define SW 4
void setup() {
// 配置衰减器
// analogSetAttenuation(ADC_11db);
// 配置输入模式
pinMode(PS2_X, INPUT);
pinMode(PS2_Y, INPUT);
pinMode(SW, INPUT_PULLUP);
// 配置串口通信波特率
Serial.begin(9600);
}
void loop() {
// 读取数值
Serial.printf("x: %d, y: %d, z: %d\n", analogRead(PS2_X), analogRead(PS2_Y), digitalRead(SW));
delay(100);
}
#define PS2_X 15
#define PS2_Y 2
#define SW 4
#define RESOLUTION 12
#define SERVO 13
#define CHANNEL 0
#define FREQ 50
int value;
//20ms 周期内,高电平持续时长 0.5-2.5 ms,对应 0-180 度舵机角度。
//对应 0.5ms(0.5ms/(20ms/256))
int min_width = 0.6 / 20 * pow(2, RESOLUTION);
//对应 2.5ms(2.5ms/(20ms/256))
int max_width = 2.5 / 20 * pow(2, RESOLUTION);
void setup() {
// 配置衰减器
analogSetAttenuation(ADC_11db);
// 设置 ADC 分辨率
analogReadResolution(RESOLUTION);
// 配置输入模式
pinMode(PS2_X, INPUT);
pinMode(PS2_Y, INPUT);
pinMode(SW, INPUT_PULLUP);
// 配置串口通信波特率
Serial.begin(9600);
// 用于设置 LEDC 通道的频率和分辨率
ledcSetup(CHANNEL, FREQ, RESOLUTION);
// 将通道与对应的引脚连接
ledcAttachPin(SERVO, CHANNEL);
}
void loop() {
// 将 ADC 的值映射到舵机的转动范围
value = map(analogRead(PS2_Y), 0, pow(2, RESOLUTION), min_width, max_width);
// 读取数值
Serial.printf("x: %d, y: %d, z: %d, 映射后的 y: %d\n", analogRead(PS2_X), analogRead(PS2_Y), digitalRead(SW), value);
ledcWrite(CHANNEL, value);
delay(100);
}
第三方库 ESP32Servo.h,让 PS2 摇杆控制舵机转动,代码如下:#include#define PS2_X 15
#define PS2_Y 2
#define SW 4
#define SERVO 13
#define RESOLUTION 12
#define FREQ 50
// 定义 Servo 对象
Servo my_servo;
int value;
void setup() {
// 配置输入模式
pinMode(PS2_X, INPUT);
pinMode(PS2_Y, INPUT);
pinMode(SW, INPUT_PULLUP);
// 配置串口通信波特率
Serial.begin(9600);
// 分配硬件定时器
ESP32PWM::allocateTimer(0);
// 设置频率
my_servo.setPeriodHertz(FREQ);
// 关联 servo 对象与 GPIO 引脚,设置脉宽范围
my_servo.attach(SERVO, 500, 2500);
}
void loop() {
value = map(analogRead(PS2_Y), 0, pow(2, RESOLUTION), 0, 180);
// 读取数值
Serial.printf("x: %d, y: %d, z: %d, 映射后的 y: %d\n", analogRead(PS2_X),
analogRead(PS2_Y), digitalRead(SW), value);
// 输出PWM
my_servo.write(value);
delay(100);
}
------
著作权归极客侠 GeeksMan所有
基于GPL 3.0协议
原文链接:https://docs.geeksman.com/esp32/Arduino/21.esp32-arduino-ps2.html
Copyright © 2014 ESP56.com All Rights Reserved
晋ICP备14006235号-22 晋公网安备14108102001165号
执行时间: 0.010106086730957 seconds