gpt4 book ai didi

Arduino 和 RC 发射器

转载 作者:行者123 更新时间:2023-12-01 02:28:10 28 4
gpt4 key购买 nike

我是 Arduino 和这个论坛的新手,这是我除了教程之外的第一个 Arduino 项目。

我正在尝试使用遥控发射器/接收器和 Arudino 来控制伺服。我使用 Arduino 而不是将伺服器直接连接到 RC 接收器的原因是 RC 只能生成 1000µs 到 2000µs 的 PWM 而我需要 600µs 到 2400µs 的 PWM 来获得我的伺服器的全范围运动.我试图做的是从pulseIn()中读取值,然后将此值映射到0到180度,如下面的代码(利用伺服库)所写。

但是,使用此代码,电机行为很奇怪。当我在其运动范围内移动 radio 发射器控制杆时,电机从 0 度旋转到 45 度,从 45 度旋转到 0、0 到 45 度,然后再次旋转到 0,而不是从 0 度旋转到 180 度。任何人都可以提供一些帮助或建议吗?

非常感谢

#include <Servo.h> 
Servo myservo;

int ch1;
int ch2;
int ch3;
int degree;

void setup() {
pinMode(7, INPUT);
myservo.attach(9);
Serial.begin(9600);
}

void loop() {
ch3 = pulseIn(7, HIGH, 25000);
degree = ((ch3-1250)* 180)/700;
Serial.print("Channel 3:");
Serial.println(ch3);
myservo.write(degree);
delay(5); // waits 5ms for the servo to reach the position
}

最佳答案

你是溢出的国际数据类型。有符号值只能是 -32768 到 +32767。见 int docs

你的公式全是国际 's 并且编译器不会猜测您可能需要更大的中间值。乘以 180 是一个危险信号。 (2000-1250)*180 = 135000 = 繁荣

要理解数学,请将公式分解为单独的运算,如下面的测试程序所示。这基本上就是编译器为你做的事情。

运行下面的程序,你会看到失败。输出值刚好达到 45 时,中间值溢出,公式崩溃。

in: 1040 out: 39   t0: -210 t1: 27736 t2: 39  
in: 1048 out: 41 t0: -202 t1: 29176 t2: 41
in: 1056 out: 43 t0: -194 t1: 30616 t2: 43
in: 1064 out: 45 t0: -186 t1: 32056 t2: 45
in: 1072 out: -45 t0: -178 t1: -32040 t2: -45
in: 1080 out: -43 t0: -170 t1: -30600 t2: -43

使用下面的这个程序作为测试夹具。修改数据类型以使用 unsigned int,您将能够根据需要使输出行为。
int ch3;
int degree;

void setup() {
ch3 = 1000;
Serial.begin(9600);
}

void loop() {
int t0, t1, t2;

degree = ((ch3-1250)* 180)/700;

t0 = ch3 - 1250;
t1 = t0 * 180;
t2 = t1 / 700;

Serial.print("in: ");
Serial.print(ch3);
Serial.print(" out: ");
Serial.print(degree);
Serial.print(" t0: ");
Serial.print(t0);
Serial.print(" t1: ");
Serial.print(t1);
Serial.print(" t2: ");
Serial.println(t2);

ch3 += 8;
if(ch3 > 2400) {
ch3 = 1000;
}

delay(100);
}

关于Arduino 和 RC 发射器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14807546/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com