Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 从mega 2560读取RC频道_Arduino_Rc - Fatal编程技术网

Arduino 从mega 2560读取RC频道

Arduino 从mega 2560读取RC频道,arduino,rc,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.begi

我正在尝试使用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); 
}
int-val;
int CHU in[6]={2,3,4,5,6,7};
int CHU out[6]={8,9,10,11,12,13};
无效设置(){
对于(int i=0;i<6;i++){
pinMode(输入[i]中的通道);
pinMode(通道输出[i],输出);
}
Serial.begin(9600);
}
void循环(){
对于(int i=0;i<6;i++){
val=脉冲星(ch_in[i],高);
连续打印(“Ch#”);
连续打印(i+1,12月);
序列号。打印(“=”);
连续打印(val,DEC);
};
Serial.println(“\n”);
延迟(100);
}
但接收到的值比我预期的要大300-400。例如,油门值在1418和2442之间变化,但连接到Mission Planner\multiwii GUI中我的quad的同一个RC给出了1100-1950。我的问题是什么?

此版本的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;
}
另一种方法是使用中断,如下所示:

UPD。问题出在包管理器安装的Arduino IDE版本中。arduino.cc的“原始”版本运行良好