“Joystick控制舵机旋转”的版本间的差异
(→搭建硬件) |
|||
第28行: | 第28行: | ||
[[File: Joystick_Servo.jpg|600px|center]] | [[File: Joystick_Servo.jpg|600px|center]] | ||
− | + | ==准备== | |
− | |||
*Setup 1:将Microduino-Servo Connector和舵机连接,接到上一排排针上。 | *Setup 1:将Microduino-Servo Connector和舵机连接,接到上一排排针上。 | ||
[[file:mCookie-Servo Connector-sensor.JPG|600px|center]] | [[file:mCookie-Servo Connector-sensor.JPG|600px|center]] | ||
第36行: | 第35行: | ||
*Setup 3:将所有设备连接在一起。通过USB数据线将接入电脑。 | *Setup 3:将所有设备连接在一起。通过USB数据线将接入电脑。 | ||
[[file:mCookie-servo-joystick-pc.JPG|600px|center]] | [[file:mCookie-servo-joystick-pc.JPG|600px|center]] | ||
+ | |||
==调试== | ==调试== | ||
*打开Arduino IDE,将下列代码复制到IDE中。 | *打开Arduino IDE,将下列代码复制到IDE中。 |
2015年11月24日 (二) 08:21的最新版本
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准确控制舵机。 视频 |