PPM信号程序 ppm输出不对
程序如下:#define PPMCH 8
#define LED 13
#define PPMOUT 8
unsigned int ppm1 = {
0, 1500, 1500, 1500, 1900, 1500, 1500, 1500, 1500};
unsigned int ppm2 = {
0, 1500, 1500, 1500, 1900, 1500, 1500, 1500, 1500};
unsigned int ppmout = {
0, 1500, 1500, 1500, 1900, 1500, 1500, 1500, 1500};
void PPM_ISR0(void)
{
volatile static char ch;
static unsigned lastmicros;
unsigned mic = micros();
if(digitalRead(2) == HIGH)
{
if(mic - lastmicros>3000)
{
ch = 0;
}
ppm1 = mic - lastmicros;
lastmicros = mic;
ch = (++ch)%(PPMCH+1);
}
}
void PPM_ISR1(void)
{
volatile static char ch;
static unsigned lastmicros;
unsigned mic = micros();
if(digitalRead(3) == HIGH)
{
if(mic - lastmicros>3000)
{
ch = 0;
}
ppm2 = mic - lastmicros;
lastmicros = mic;
ch = (++ch)%(PPMCH+1);
}
}
void setup(void)
{
Serial.begin(57600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(PPMOUT, OUTPUT);
digitalWrite(PPMOUT, HIGH);
attachInterrupt(0, PPM_ISR0, CHANGE);
attachInterrupt(1, PPM_ISR1, CHANGE);
}
void loop(void)
{
unsigned int timecount = 0;
for(int i=0; i<=PPMCH; i++)
{
if(i < 6)
{
if(ppm1 > 900 && ppm1 < 2100)
ppmout = (ppm1 + ppmout)/2;
}
else
{
if(ppm2 > 900 && ppm2 < 2100)
ppmout = (ppm2 + ppmout)/2;
}
ppmout = 1900;
}
timecount = 0;
for(int i=1; i<=PPMCH; i++)
{
digitalWrite(PPMOUT, LOW);
delayMicroseconds(300);
digitalWrite(PPMOUT, HIGH);
delayMicroseconds((ppmout/3)*2);
timecount += ppmout;
//*/
}
digitalWrite(PPMOUT, LOW);
delayMicroseconds(300);
digitalWrite(PPMOUT, HIGH);
delay((23000-timecount)/1000);
}
现在输出的波形用另外一个arduino接上上位机测试(实际上就是一个mwc的例程)检测输出波形呈正弦小范围波动 不知道是为什么
这段代码里面把ppm输出改成串口输出读入的ppm值可以正常显示..... 不知道错在哪里求指教 解释一下代码?
页:
[1]