首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助设置4个伺服和2个操纵杆的编码,以及在哪里连接操纵杆的SEL连接

需要帮助设置4个伺服和2个操纵杆的编码,以及在哪里连接操纵杆的SEL连接
EN

Stack Overflow用户
提问于 2013-04-30 22:17:09
回答 2查看 1.2K关注 0票数 0

我是托尼,对整个阿杜伊诺世界来说,我是一个全新的人。

首先是我的项目,我的设备,为什么我决定使用arduino,我试图做什么,以及我正在使用的代码。

我的项目相对简单;能够平移和倾斜2个重量为.06盎司的相机。这些照相机正被用来记录天气。下面的程序工作正常,但我遇到的问题是,当我松开操纵杆时,伺服系统返回到零(或者我们称之为90°位置)。我使用的操纵杆和PlayStation2游戏板中使用的是同一类型。它们允许Z轴,对我来说,我想用它来保持相机指向我上次定位的方向,直到我想要将它平移或倾斜到不同的轴。我希望我已经解释清楚了。

最后,我不想使用无线,我希望将它硬连线,因为我相信它会对我所在地区的其他无线电频率造成较少的干扰。

我的设备或部件如下:

代码语言:javascript
复制
 Arduino UNO board

 Bread board

 Circuit board

 2 Joysticks (Playstation 2 style with X, Y and Z axis)

 4 TowerPro servo motors SG5010

我决定使用arduino,因为它是计算机/电子商店的人员推荐给我的。我没有编码arduino或任何其他类型的编程的先验知识。然而,我能够对1个操纵杆和2个伺服进行编码,并将其扩展为包括一个额外的操纵杆和2个额外的伺服。所以如上所述,我有4个伺服和2个操纵杆的编码,我只是不能也不明白我需要做什么才能使Z轴能够做我上面提到的事情。

我向那些更有经验的人道歉,我把这个带到这里,但我真的需要帮助。

编码:

代码语言:javascript
复制
#include <Servo.h>

const int servo1 = 3;        // first servo
const int servo2 = 11;      // second servo
const int servo3 = 6;        // third servo
const int servo4 = 10;     // fourth servo
const int joyH = 3;           // L/R Parallax Thumbstick
const int joyV = 4;           // U/D Parallax Thumbstick
const int joyI = 1;             // L/R Parallax Thumbstick
const int joyW = 2;          // U/D Parallax Thumbstick
int servoVal;           // variable to read the value from the analog pin

Servo myservo1;  // create servo object to control a servo
Servo myservo2;  // create servo object to control a servo
Servo myservo3;  // create servo object to control a servo
Servo myservo4;  // create servo object to control a servo

void setup() {
    // Servo  
    myservo1.attach(servo1);  // attaches the servo
    myservo2.attach(servo2);  // attaches the servo
    myservo3.attach(servo3);  // attaches the servo
    myservo4.attach(servo4);  // attaches the servo

    // Inizialize Serial
    Serial.begin(9600);
}

void loop(){
    // Display Joystick values using the serial monitor
    outputJoystick();

    // Read the horizontal joystick value  (value between 0 and 1023)
    servoVal = analogRead(joyH);

    servoVal = map(servoVal, 0, 1023, 0, 179);  // scale it to use it with the servo (result  between 0 and 179 to keep from being jittery)

    myservo2.write(servoVal);                  // sets the servo position according to the scaled value    

    // Read the horizontal joystick value  (value between 0 and 1023)
    servoVal = analogRead(joyV);           
    servoVal = map(servoVal, 0, 1023, 0, 179);      // scale it to use it with the servo (result  between 0 and 179 to keep from being jittery)
    myservo4.write(servoVal);                           // sets the servo position according to the scaled value

    // Read the horizontal joystick value  (value between 0 and 1023)
    servoVal = analogRead(joyI);           
    servoVal = map(servoVal, 0, 1023, 0, 179);      // scale it to use it with the servo (result  between 0 and 179 to keep from being jittery)
    myservo1.write(servoVal);                           // sets the servo position according to the scaled value

    // Read the horizontal joystick value  (value between 0 and 1023)
    servoVal = analogRead(joyW);           
    servoVal = map(servoVal, 0, 1023, 0, 179);      // scale it to use it with the servo (result  between 0 and 179 to keep from being jittery)

    myservo3.write(servoVal);                           // sets the servo position according to the scaled value

    delay(15);                                       // waits for the servo to get there
}

/**
 * Display joystick values
 */

void outputJoystick(){
    Serial.print(analogRead(joyH));
    Serial.print ("---"); 
    Serial.print(analogRead(joyV));
    Serial.println ("----------------");
    Serial.print(analogRead(joyI));
    Serial.print ("---"); 
    Serial.print(analogRead(joyW));
    Serial.println ("----------------");
}

谢谢你抽出时间来帮助我。我真的很感激。

EN

回答 2

Stack Overflow用户

发布于 2013-04-30 22:32:08

首先,我对Arduino不是很熟悉,但是..如果你想让相机在操纵杆处于空档位置时不移动,那么你需要在你的循环中添加一些逻辑。您可以将循环中的所有内容包装在一个IF语句中-if(操纵杆不是中性的) then {运行您的代码}。这是一个快速而棘手的解决方案,可能不是首选的方法,但它应该可以工作。祝好运!

票数 0
EN

Stack Overflow用户

发布于 2014-01-15 02:18:20

这听起来像是最简单的解决方案是修改伺服系统为连续旋转(删除内部伺服罐)。如果我没理解错的话,这会让伺服系统按你想要的方式运行?

你想稍微移动一下操纵杆,摄像头就会慢慢地开始跟踪,然后当你在那个方向上移动操纵杆更多的时候,相机会跟踪得更快,然后当你让操纵杆回到中间时,你想让相机停在他们所在的地方吗?

如果是这样,我们讨论的是连续伺服旋转行为..这可以用一个插入在伺服和伺服信号之间的小装置来模拟。我真的很想找到代码来制作我自己的版本..

抱歉,我不能再帮你了

干杯

安迪

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16302134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档