|
|
本帖最后由 dkm382638608 于 2015-8-14 20:36 编辑
因为我是通过获取遥控器的数值大小来控制电机正反转的,但是现在有个问题就是遥控器反馈的数据有时会夹杂着一两个不正常的数据,所有导致车子行走不稳定,求大神指点,是把获取的数据平均处理还是其他方法,求教!谢谢! 以下是所有源码!
需要的就拿去研究吧。
[pre lang="arduino" line="1" file="carppm"]
//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);
}[/code] |
|