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

时间:2013-04-30 14:17:09

标签: arduino arduino-uno

Tony在这里,我是整个arduino世界的新人。

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

我的项目相对简单;能够平移和倾斜2个重量为0.06盎司的相机。摄像机正用于记录天气。下面的编程工作,但我遇到的问题是当我释放操纵杆时伺服器返回到零(或者我们称之为90°位置)。我使用的操纵杆与Playstation 2游戏手柄中使用的操纵杆相同。它们允许Z轴,对于我来说,我想用它来保持相机指向我最后定位的方向,直到我希望将其平移或倾斜到不同的轴。我希望我能清楚地解释清楚。

最后我不想使用无线技术,我希望能够使用无线网络,因为我相信它会减少我所在地区其他无线电频率的干扰。

我的设备或组件如下:

 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轴能够按照我的说法进行操作。

我向那些经验丰富的人道歉,我把它带到这里,但我真的需要帮助。

编码:

#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 ("----------------");
}

感谢您抽出宝贵时间来帮助我。我很感激。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

对我来说,最简单的解决方案就是修改伺服系统以进行连续旋转(移除内部伺服电位器)。如果我理解你的话,这将使伺服按照你想要的方式行动吗?

你想稍微移动操纵杆,摄像机会慢慢开始向那个方向跟踪,然后当你向那个方向移动操纵杆时,摄像机的速度会更快,然后当你让操纵杆返回时中间,你想让相机停在哪里,是吗?

如果是这样,我们正在讨论连续伺服旋转行为。这可以使用插在伺服和伺服信号之间的小型设备进行模拟。我真的很想找到制作我自己版本的代码..

抱歉,我不能再提供任何帮助了

干杯

安迪