心之永恒 发表于 2012-10-16 16:21:48

GPS模块和声波测距模块共存问题

最近GPS输出数据很不正常。以为GPS模块坏掉了。之后发现把声波测距函数注释掉输出正常。有人知道原因吗?
去掉声波测距之后输出正常:


加上声波之后,UTC时间也不动了,而且数据很不正常
不正常:

声波测距的函数:void lan_distance()
{
   digitalWrite(TrigPin, HIGH);            
   delayMicroseconds(20);//>10us                  
   digitalWrite(TrigPin, LOW);               
      Time_Echo_us = pulseIn(EchoPin, HIGH);   
   if((Time_Echo_us < 60000) && (Time_Echo_us > 2))   //a valid pulse width should be between (1, 60000).
    {      
      Len_mm = (Time_Echo_us*34/1000)/2;
      Serial.print(Len_mm);
    }
}

飞翔的红猪 发表于 2012-10-16 16:29:40

看看你的TrigPin是了什么Arduino引脚?

心之永恒 发表于 2012-10-16 16:38:19

飞翔的红猪 发表于 2012-10-16 16:29 static/image/common/back.gif
看看你的TrigPin是了什么Arduino引脚?

我的板子是mega1280
unsigned int EchoPin = 50;         
unsigned int TrigPin = 51;         
unsigned long Time_Echo_us = 0;
unsigned long Len_mm= 0;

刚刚排除发现是测距函数里面的延迟问题。可能延迟太长了。

心之永恒 发表于 2012-10-16 16:55:00

Time_Echo_us = pulseIn(EchoPin, HIGH);
{:soso_e110:} 是这句问题
不是延迟问题,延迟到100都没事。
Time_Echo_us = pulseIn(EchoPin, HIGH);去掉这句之后 OK 纠结

maojidan 发表于 2012-10-16 17:11:32

是串口问题吧~

心之永恒 发表于 2012-10-16 17:19:09

maojidan 发表于 2012-10-16 17:11 static/image/common/back.gif
是串口问题吧~

不是啦 刚刚试了 是 Time_Echo_us = pulseIn(EchoPin, HIGH); 这句代码问题。 删除这句话之后输出很流畅,加上这句话无论在什么地方都会有问题

maojidan 发表于 2012-10-16 17:21:37

心之永恒 发表于 2012-10-16 17:19 static/image/common/back.gif
不是啦 刚刚试了 是 Time_Echo_us = pulseIn(EchoPin, HIGH); 这句代码问题。 删除这句话之后输出很流畅, ...

哦哦~这样啊~

飞翔的红猪 发表于 2012-10-16 17:29:02

心之永恒 发表于 2012-10-16 16:55 static/image/common/back.gif
Time_Echo_us = pulseIn(EchoPin, HIGH);
   是这句问题
不是延迟问题,延迟到100都没事 ...

注释掉这句,就相当于删掉了超声波模块了~~,问题还是没解决

test01 发表于 2012-10-16 17:57:20

查看下超声波函数内是不是用了中断,和GPS用的冲突了

心之永恒 发表于 2012-10-16 18:04:54

飞翔的红猪 发表于 2012-10-16 17:29 static/image/common/back.gif
注释掉这句,就相当于删掉了超声波模块了~~,问题还是没解决

arduino0022和arduino1.01都试过,1.01问题更明显 而且输出速度变慢了。
想想其他办法唉,能不能用中断呢?

心之永恒 发表于 2012-10-16 19:04:46

用外部中断解决问题了
attachInterrupt(5,echo_time,FALLING);//18PIN
当18pin高电平转到低电平开始中断,
计算发送完检测信号到进入中断时候经历的时间。void len_distance()
{
   noInterrupts();
   digitalWrite(EchoPin, HIGH);
   digitalWrite(TrigPin, HIGH);            
   delayMicroseconds(20);//>10us
      interrupts();   
   digitalWrite(TrigPin, LOW);               
   len_now =micros();//当前时间(us)
}
void echo_time()
{
    len_in_time =micros();//当前时间(us)
    Time_Echo_us=len_in_time - len_now;
   if((Time_Echo_us < 60000) && (Time_Echo_us > 1))   //a valid pulse width should be between (1, 60000).
    {      
      Len_cm = (Time_Echo_us*34/1000)/2;
    }
}
页: [1]
查看完整版本: GPS模块和声波测距模块共存问题