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);
}
}
看看你的TrigPin是了什么Arduino引脚? 飞翔的红猪 发表于 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;
刚刚排除发现是测距函数里面的延迟问题。可能延迟太长了。 Time_Echo_us = pulseIn(EchoPin, HIGH);
{:soso_e110:} 是这句问题
不是延迟问题,延迟到100都没事。
Time_Echo_us = pulseIn(EchoPin, HIGH);去掉这句之后 OK 纠结 是串口问题吧~ maojidan 发表于 2012-10-16 17:11 static/image/common/back.gif
是串口问题吧~
不是啦 刚刚试了 是 Time_Echo_us = pulseIn(EchoPin, HIGH); 这句代码问题。 删除这句话之后输出很流畅,加上这句话无论在什么地方都会有问题 心之永恒 发表于 2012-10-16 17:19 static/image/common/back.gif
不是啦 刚刚试了 是 Time_Echo_us = pulseIn(EchoPin, HIGH); 这句代码问题。 删除这句话之后输出很流畅, ...
哦哦~这样啊~ 心之永恒 发表于 2012-10-16 16:55 static/image/common/back.gif
Time_Echo_us = pulseIn(EchoPin, HIGH);
是这句问题
不是延迟问题,延迟到100都没事 ...
注释掉这句,就相当于删掉了超声波模块了~~,问题还是没解决 查看下超声波函数内是不是用了中断,和GPS用的冲突了 飞翔的红猪 发表于 2012-10-16 17:29 static/image/common/back.gif
注释掉这句,就相当于删掉了超声波模块了~~,问题还是没解决
arduino0022和arduino1.01都试过,1.01问题更明显 而且输出速度变慢了。
想想其他办法唉,能不能用中断呢? 用外部中断解决问题了
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]