【问题标题】:Output Values in the Ultrasonic Sensor for the Lego NXTLego NXT 超声波传感器的输出值
【发布时间】:2012-04-26 18:18:47
【问题描述】:

我正在尝试使用编程语言 NBC(下一个字节码)读取乐高 NXT 机器人的超声波传感器读数。它在乐高网站上说传感器读数范围为 0 -255 厘米,但是当我输出传感器数据时,有时会得到高于 255 的值;这通常发生在我的传感器读取值 255 时;然后它读取大约 170 - 900 我不知道它为什么这样做。这是我的代码:(我首先读取传感器数据,然后让机器人转动 45 度并无限重复,以检查数据是如何被读取的。)

#include "NXTDefs.h"
// have the robot stay still and keep track of all the distances when turning around.

dseg segment
    Distance udword 0
dseg ends

thread main
    SetSensorUltrasonic(IN_4)
    Forever:
        ReadSensorUS(IN_4,Distance)
        NumOut(0,10,Distance)
        wait 1000
        RotateMotor(OUT_B,100,180)
        ClearSensor(IN_4)
        ResetSensor(IN_4)
        set Distance,0
        jmp Forever
        exit
endt

【问题讨论】:

    标签: nxt lego mindstorms


    【解决方案1】:

    好吧,一张表格可能会让它更清晰并保持不变:

    Value of "Distance"   Display
    _     255                255
    _      80                805 
    

    你看到前 255 个中的 5 个!

    【讨论】:

      【解决方案2】:

      正如@Charbonier 所说,您没有清除显示。这样,只有部分数字会被覆盖,从而产生您的传感器已经发疯的错觉。

      尝试使用this 代替NumOut()DRAW_OPT_CLEAR_SCREEN 是定义为1 的常量):

      NumOutEx(0, 10, Distance, DRAW_OPT_CLEAR_SCREEN)
      

      或者,您可以将the following 代码行放在NumOut() 之前:

      ClearScreen()
      

      【讨论】:

        【解决方案3】:

        正在读取显示屏上的数字吗?这些是传感器读取的值吗?

        例如,

        Value of Distance    Display
            255                255
            80                 805
        

        您会看到805,因为您在显示屏上打印了80,而来自255 的最后一个5 仍然存在。

        显示未被NumOut() 擦除。我想应该有一个擦除显示的选项。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-01
          • 2016-08-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多