读取超级2560的RC频道

时间:2014-09-07 16:14:27

标签: arduino rc

我正在尝试使用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.我的问题是什么?

1 个答案:

答案 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的“原始”版本运行良好。