使用PS2手柄模控制ESP32输出2路PWM信号控制舵机
1.ESP32引脚图
某宝常用EPS32的两种类型,对应下连接对应IO口的线就可以了~
注意将舵机正负,PS2手柄控制模块正、负分别连接在一起就行了.(必须查EPS32 USB供电,不然舵机运行不正常)
2.Arduino代码
来不及解释,先粘贴代码
#include <ESP32Servo.h>
#include <analogWrite.h>
//#include <tone.h>
#include <ESP32Tone.h>
#include <ESP32PWM.h>
Servo a;
Servo b;
int VRX,VRY,p1,p2;
void setup(){
a.attach(12);//指定舵机a的OUT引脚为p12号引脚
b.attach(14);//指定舵机b的OUT引脚为p14号引脚
Serial.begin(115200);
p1=90;
p2=90;
}
void loop(){
VRX = analogRead(34);//获取A0引脚的输入值,即PS2摇杆X轴的数值
VRY = analogRead(27);//获取D1引脚的输入值,即PS2摇杆Y轴的数值
Serial.print("映射前x轴:");
Serial.print(VRX);
Serial.print(" ");
Serial.print("映射前y轴:");
Serial.print(VRY);
Serial.print(" ");
//p = map(i,0,1023,0,180);//将0到1023的值映射成0到180
//k = map(j,0,1023,0,180);
p1=SetPWM(VRX,p1);
p2=SetPWM(VRY,p2);
Serial.print("映射后x轴:");
Serial.print(p1);
Serial.print(" ");
Serial.print("映射后y轴:");
Serial.println(p2);
a.write(p1);//设置舵机a角度为p
b.write(p2);//设置舵机b角度为k
delay(100);
}
int SetPWM(int valp,int p)
{
int vali;
vali=GetKeyValue(valp);
if (vali==-1)
{
p+=10;
}
else if (vali==1)
{
p-=10;
}
//限制舵机角度0-180
if(p<=0)
{
p=0;
}
else if (p>=180)
{
p=180;
}
return p;
}
//方向判断函数:X轴为例,-1向左,0未操作,1向右
int GetKeyValue(int val){
if (val<2000)
{
return -1;
}
else if (val>3000)
{
return 1;
}
else
{
return 0;
}
}
3.运行效果
舵机随着PS2手柄的方向而转动。