1

プログラミング言語NBC(Next Byte Code)を使用して、レゴNXTロボットから超音波センサーの読み取り値を読み取ろうとしています。レゴのウェブサイトには、センサーの読み取り値は0〜255 cmの範囲であると記載されていますが、センサーデータを出力すると、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
4

3 に答える 3

1

@Charbonierが言ったように、ディスプレイをクリアしていません。このように、数字の一部のみが上書きされ、センサーが狂ったような錯覚を引き起こします。

(は として定義された定数です) の代わりにこれを使用してみてください:NumOut()DRAW_OPT_CLEAR_SCREEN1

NumOutEx(0, 10, Distance, DRAW_OPT_CLEAR_SCREEN)

または、のコード行を の前に配置することもできますNumOut()

ClearScreen()
于 2012-04-28T01:29:24.203 に答える
1

まあ、テーブルはおそらくそれをより明確にし、とどまります:

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

前の 255 から 5 が表示されます。

于 2012-04-27T14:47:54.237 に答える
0

ディスプレイから数字を読み取っていますか?これらはセンサーが読み取った値ですか?

例えば、

Value of Distance    Display
    255                255
    80                 805

ご覧のとおり、ディスプレイ805に印刷80しても、最後の5from255はそこにとどまります。

では表示は消えませんNumOut()。表示を消去するオプションがあるはずです。

于 2012-04-27T14:26:36.287 に答える