dkm382638608 发表于 2015-7-30 13:56:50

【遥控器控制小车】Arduino如何获取遥控器平均数值?

本帖最后由 dkm382638608 于 2015-8-14 20:36 编辑

因为我是通过获取遥控器的数值大小来控制电机正反转的,但是现在有个问题就是遥控器反馈的数据有时会夹杂着一两个不正常的数据,所有导致车子行走不稳定,求大神指点,是把获取的数据平均处理还是其他方法,求教!谢谢! 以下是所有源码!
需要的就拿去研究吧。


//read PPM signals from 2 channels of an RC reciever
//http://arduino.cc/forum/index.php/topic,42286.0.html

//把需要处理的接收机的两个通道分别接arduino的数字口2、3脚
//Most Arduino boards have two external interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3).
//The Arduino Mega has an additional four: numbers 2 (pin 21), 3 (pin 20), 4 (pin 19), and 5 (pin 18).
int ppm1 = 2;
int ppm2 = 3;

unsigned long rc1_PulseStartTicks,rc2_PulseStartTicks;       
volatile int rc1_val, rc2_val;

void setup() {
        Serial.begin(9600);

      pinMode(4,OUTPUT);
      pinMode(5,OUTPUT);
      pinMode(6,OUTPUT);
      pinMode(7,OUTPUT);
      pinMode(8,OUTPUT);
      pinMode(9,OUTPUT);
      pinMode(10,OUTPUT);
      pinMode(11,OUTPUT);      
      
        //PPM inputs from RC receiver
        pinMode(ppm1, INPUT);
        pinMode(ppm2, INPUT);

        // 电平变化即触发中断
        attachInterrupt(0, rc1, CHANGE);   
        attachInterrupt(1, rc2, CHANGE);
}

void rc1()
{
        // did the pin change to high or low?
        if (digitalRead( ppm1 ) == HIGH)
                rc1_PulseStartTicks = micros();    // store the current micros() value
        else
                rc1_val = micros() - rc1_PulseStartTicks;
}

void rc2()
{
        // did the pin change to high or low?
        if (digitalRead( ppm2 ) == HIGH)
                rc2_PulseStartTicks = micros();   
        else
                rc2_val = micros() - rc2_PulseStartTicks;
}

void loop() {
        Serial.print("channel 1:");
        Serial.print(rc1_val);
        Serial.print("      ");
        Serial.print("channel 2:");   
        Serial.println(rc2_val);

if(rc2_val!=0)
{
if(rc2_val>1900)
    {
      up();
    }
if(rc2_val<1100)
    {
      dow();   
    }
}

if(rc1_val!=0)
{
if(rc1_val>1900)
    {
      lef();
    }
if(rc1_val<1100)
    {
      rig();
    }

}
if(rc1_val>1400 &&rc1_val<1600 &&rc2_val>1400 &&rc2_val<1600)
{
    sto();
}
}
void up()
{
    digitalWrite(4,HIGH);      
    digitalWrite(5,LOW);      
    digitalWrite(6,HIGH);   
    digitalWrite(7,LOW);      

    digitalWrite(8,HIGH);      
    digitalWrite(9,LOW);      
    digitalWrite(10,HIGH);   
    digitalWrite(11,LOW);
}
void dow()
{
    digitalWrite(4,LOW);      
    digitalWrite(5,HIGH);      
    digitalWrite(6,LOW);   
    digitalWrite(7,HIGH);      

    digitalWrite(8,LOW);      
    digitalWrite(9,HIGH);      
    digitalWrite(10,LOW);   
    digitalWrite(11,HIGH);   
}
void rig()
{
    digitalWrite(8,LOW);      
    digitalWrite(9,HIGH);      
    digitalWrite(10,HIGH);   
    digitalWrite(11,LOW);   
}
void lef()
{
    digitalWrite(8,HIGH);      
    digitalWrite(9,LOW);      
    digitalWrite(10,LOW);   
    digitalWrite(11,HIGH);   
}
void sto()
{
    digitalWrite(4,LOW);      
    digitalWrite(5,LOW);      
    digitalWrite(6,LOW);      
    digitalWrite(7,LOW);      
    digitalWrite(8,LOW);      
    digitalWrite(9,LOW);      
    digitalWrite(10,LOW);   
    digitalWrite(11,LOW);
}

dkm382638608 发表于 2015-7-30 13:58:06

六通的接受机+遥控

I-robofan 发表于 2015-7-30 16:14:01

滤波
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=7694&highlight=%C2%CB%B2%A8

dkm382638608 发表于 2015-7-30 19:36:35

I-robofan 发表于 2015-7-30 16:14 static/image/common/back.gif
滤波
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=7694&highlight=%C2%CB%B2%A8

太高深卡不懂= =

qiaoli3484 发表于 2015-7-30 23:53:30

谢谢分享:D:D
页: [1]
查看完整版本: 【遥控器控制小车】Arduino如何获取遥控器平均数值?