我正在尝试使用Mega 2560从此fs-ct6b读取信号:
int val;
int ch_in[6] = {2, 3, 4, 5, 6, 7};
int ch_out[6] = {8, 9, 10, 11, 12, 13};
void setup() {
for (int i = 0; i < 6; i++){
pinMode(ch_in[i], INPUT);
pinMode(ch_out[i], OUTPUT);
}
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 6; i++){
val = pulseIn(ch_in[i], HIGH);
Serial.print("Ch #");
Serial.print(i + 1, DEC);
Serial.print(" = ");
Serial.println(val, DEC);
};
Serial.println("\n");
delay(100);
}
但收到的价值比我预期的要高300-400。例如,油门值在1418和2442之间变化,但在Mission Planner \ multiwii GUI中连接到我的四边形的相同RC给出~1100 - 1950.我的问题是什么?
答案 0 :(得分:0)
此版本的pulseIn()工作正常:
ulong pulseIn(int pin, int timeout){
ulong uStart, uEnd, _timer, _pass;
_timer = micros();
while (HIGH == digitalRead(pin)){
_pass = micros() - _timer;
if (_pass > TIME_OUT)
return 0;
};
while (LOW == digitalRead(pin)){
_pass = micros() - _timer;
if (_pass > TIME_OUT)
return 0;
};
uStart = micros();
while (HIGH == digitalRead(pin)){
_pass = micros() - _timer;
if (_pass > TIME_OUT)
return 0;
};
uEnd = micros();
return uEnd - uStart;
}
另一种方法是使用如下所示的中断:
http://rcarduino.blogspot.ru/2012/01/how-to-read-rc-receiver-with.html
UPD。问题出在包管理器安装的Arduino IDE版本中。来自arduino.cc的“原始”版本运行良好。