找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 10001|回复: 13

NXT 超声波传感器问题

[复制链接]
发表于 2012-2-21 09:22:07 | 显示全部楼层 |阅读模式
请教各位大侠,我写了个小程序,用超声波传感器测量距离(其实我是来测试超声波传感器好不好用),在液晶屏上显示测量值,但是情况和我想象的不一样,在距离较短时,显示的单位好像是毫米,一直能显示到900多,距离再远就显示厘米了,对着空旷的地方显示255。用尺子量过,误差不大。显示屏也留有充分的空间,应该不存在显示不完全的问题。

SetSensorLowSpeed(),和SetSensorLowspeed()都用过,结果一样。
取值用的SensorUS(),
一开始用Sensor(),显示0。

程序在家里的电脑上,没附上。
谢谢各位。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2012-2-21 11:46:15 | 显示全部楼层
sensor()是读普通模拟传感器的,比如触碰,光电,声音的值,sensorus()是读超声波的,
读出的数值单位应该是厘米,超声波传感器有盲区的,测量范围应该是4cm-255cm,超出这个范围的都显示是255.
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-2-21 14:10:25 | 显示全部楼层
我知道,资料上都是这么写的,但我实际测试的不是这样,比如在50cm时显示500,在120cm时,显示120。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-2-21 18:35:51 | 显示全部楼层
现在你能把程序发上来吗
或者简述一下编程思路
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-2-21 20:43:07 | 显示全部楼层
回家后贴上来,你帮着看一看哪里有问题i。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-2-22 17:27:06 | 显示全部楼层
本帖最后由 prcthinker 于 2012-2-22 17:29 编辑

我的程序,请高手分析一下.
task main()
{
SetSensorLowspeed(IN_4);
//SetSensorUltrasonic(IN_4);

TextOut(30, LCD_LINE2, "Ultrasonic");
TextOut(5, LCD_LINE4, "Distance:    cm");

while(true)
{
   NumOut(60, LCD_LINE4, SensorUS(IN_4));
   Wait(200);
}

}
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-2-22 19:49:12 | 显示全部楼层
又编了个测试程序,让电机A在超声波传感器探测到距障碍物20cm时反转,否则正传,结果执行正确。但显示在屏幕上的数字还是和上述一样。1m以内,屏幕显示数字200以上正转,以下反转。1m以上数字显示3位数,如123,电机正转。疑惑中。
程序:
task main()
{
SetSensor(IN_4,SENSOR_LOWSPEED);

while(true)
{
if(SensorUS(IN_4)>=20)
    OnFwd(OUT_A,50);

else
   OnRev(OUT_A,50);
NumOut(10,30,SensorUS(IN_4));
}
}
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2012-2-25 17:05:12 来自手机 | 显示全部楼层
有没有人能解释一下啊。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2012-8-24 15:45:26 | 显示全部楼层
程序贴上来看看,是不是单位没有设置好
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-6 13:21:09 | 显示全部楼层
我的现象也一样?难道是固件版本的问题?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-6 14:24:06 | 显示全部楼层
prcthinker 发表于 2012-2-22 17:27
我的程序,请高手分析一下.
task main()
{

终于搞清楚了,实际上你的程序犯了一个小错误。NumOut您使用的是非清除方式,大于100的数字个位始终没有
被清除。NumOut那句应该改成NumOut(60,LDC_LINE4,SensorUS(IN_4),true);
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2013-5-6 14:35:04 | 显示全部楼层
本帖最后由 wlgrass 于 2013-5-6 15:06 编辑
prcthinker 发表于 2012-2-22 17:27
我的程序,请高手分析一下.
task main()
{


这句错了,如果先显示3位数字,再显示2位数字最后一位不会被清掉: NumOut(60, LCD_LINE4, SensorUS(IN_4));
改为NumOut(......, true);
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2013-5-10 17:36:30 | 显示全部楼层
本帖最后由 prcthinker 于 2013-5-15 21:13 编辑
wlgrass 发表于 2013-5-6 14:24
终于搞清楚了,实际上你的程序犯了一个小错误。NumOut您使用的是非清除方式,大于100的数字个位始终没有
...

没想到去年问的问题今天有人给解决了,非常感谢.
这类问题在计算机编程的时候也遇到过,但这次没意识到.
不过改成NumOut(60, LCD_LINE4, SensorUS(IN_4),true);会把前后的文字给清除掉.
我在NumOut(60, LCD_LINE4, SensorUS(IN_4));前加了一句NumOut(60, LCD_LINE4, "   ");
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2013-5-10 17:36:50 | 显示全部楼层
本帖最后由 prcthinker 于 2013-5-15 21:13 编辑
wlgrass 发表于 2013-5-6 14:24
终于搞清楚了,实际上你的程序犯了一个小错误。NumOut您使用的是非清除方式,大于100的数字个位始终没有
...

上边的程序也有问题
NumOut(60, LCD_LINE4, "   ");
并不能把前面的数字去掉,好像空格给忽略掉了,也就是说空格并不能清除上一屏的数字
正确的程序应该是
task main()
{
SetSensorLowspeed(IN_4);
while(true)
{
    ClearScreen();
    TextOut(30, LCD_LINE2, "Ultrasonic");
    TextOut(5, LCD_LINE4, "Distance:    cm");
    NumOut(60, LCD_LINE4, SensorUS(IN_4));
    Wait(200);
}
}
最终结果达到预期效果了.
再次感谢这位朋友,有机会多探讨.
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-4-28 02:28 , Processed in 0.199516 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表