Joystick控制舵机旋转
Language | English |
---|
目的通过检测Joystick精确控制舵机转动。 原理通过检测Joystick摇杆在水平和垂直两个方向上的模拟量来做出控制。在垂直方向上控制舵机的角度,从0-180°变化。在水平方向上控制舵机每走一步的角度的精度(快慢)。 设备
准备
调试
#include <Servo.h>
Servo myservo;
#define Pin_X A1
#define Pin_Y A0
#define servo_pin SDA
int pose=5, angle = 90;
int data;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); //串口初始化
pinMode(Pin_X, INPUT);
pinMode(Pin_Y, INPUT);
myservo.attach(servo_pin);
}
int uiStep()
{
if (analogRead(Pin_Y) < 100) //Y-up
{
delay(50);
if (analogRead(Pin_Y) < 100)
return 1;
}
if (analogRead(Pin_Y) > 900) //Y-down
{
delay(50);
if (analogRead(Pin_Y) > 900)
return 2;
}
if (analogRead(Pin_X) < 100)
{
delay(50);
if (analogRead(Pin_X) < 100) //X-Right
return 3;
}
if (analogRead(Pin_X) > 900) //X-Left
{
delay(50);
if (analogRead(Pin_X) > 900)
return 4;
}
return 0;
}
void loop() {
if (uiStep() == 1)
{
angle += pose;
if (angle > 180)
angle = 180;
}
else if (uiStep() == 2)
{
angle -= pose;
if (angle < 0)
angle = 0;
}
else if (uiStep() == 3)
{
pose++;
if (pose > 10)
pose = 10;
}
else if (uiStep() == 4)
{
pose--;
if (pose < 1)
pose = 1;
}
if (data != angle)
{
myservo.write(angle);
data=angle;
}
Serial.print(pose);
Serial.print(" ");
Serial.println(angle);
}
软件调试代码说明
#define Pin_X A1
#define Pin_Y A0
if (uiStep() == 1)
{
angle += pose;
if (angle > 180)
angle = 180;
}
else if (uiStep() == 2)
{
angle -= pose;
if (angle < 0)
angle = 0;
}
else if (uiStep() == 3)
{
pose++;
if (pose > 10)
pose = 10;
}
else if (uiStep() == 4)
{
pose--;
if (pose < 1)
pose = 1;
}
if (data != angle)
{
myservo.write(angle);
data=angle;
}
结果垂直方向上控制舵机角度,水平方向调节舵机转动的精度。通过Joystick准确控制舵机。 视频 |