2013-12-15 11 views
6

Ich bin neu in der NBC - Programmierung und versuche meinen Lego NXT Brick zu programmieren, um eine Reihe von schwarzem Isolierband zu suchen und zu verfolgen, die ich auf dem Boden habe (ich habe den Lichtsensor vorne und direkt auf den Boden zeigen). Im Moment schaltet sich das Licht ein, aber der Roboter fährt einfach fort, über das Band zu gehen, ohne es zu bestätigen. Ich habe es auch eingerichtet, um zu stoppen und umzudrehen, wenn es gegen eine Wand stößt, die funktioniert. Das einzige, was nicht funktioniert, ist, das schwarze Band zu bestätigen und zu verfolgen, wenn das Licht darüber geht. Kann jemand meinen Code ansehen und mir sagen, wo ich falsch liege?LEGO NXT Brick mit NBC

          dseg segment 
    Switch sword 0 
    Volume sword 0 
    Level sword 0 
    Distance sword 0 
dseg ends 

thread main 
    SetSensorTouch(IN_1) // touch sensor connected to IN_1 
    SetSensorSound(IN_2) // sound sensor connected to IN_2 
    SetSensorLight(IN_3) // Light Sensor connected to input 3 
    SetSensorUltrasonic(IN_4) // Ultrasonic Sensor connected to input 4 
    OnFwd(OUT_BC,80)  // move forward 

CheckSensor: 

    ReadSensor(IN_1,Switch)  // reads current value of sensor (0/1) 
    brtst EQ, CheckSensor, Switch // branch to CheckSensor if Switch = 0 
           // i.e., exit the loop when Switch = 1 


    OnRev(OUT_BC,40)  // move backward 
    wait 500 
    OnFwd(OUT_B,20)  // turn 
    wait 500 

    jmp CheckSound 

CheckSound: 
    ReadSensor(IN_2, Volume) 
    brcmp GT, ExitCheck, Volume, 60 

    jmp CheckSound 

ExitCheck: 

OnFwd(OUT_BC,60) 

    jmp CheckLight 

    CheckLight: 
    ReadSensor(IN_3,Level) 
    brcmp LT, CheckLight, Level, 60 

    ReadSensorUS(IN_4,Distance) 
    brcmp LT, EndPoint, Distance, 30 

    OnFwd(OUT_C, 10) 

    FindPath: 
    ReadSensor(IN_3,Level) 
    brcmp GTEQ, FindPath, Level, 60 

    OnFwd(OUT_BC, 60) 

    jmp CheckLight 

    EndPoint: 

    Off(OUT_BC) 

    wait 1500 



endt 

enter image description here

+2

Können Sie unnötige Sounds entfernen, um Ihren Code zu programmieren (um das zu vereinfachen)? Und auch LDD oder zumindest Foto von Ihrem Bot wird nützlich sein, um zu verstehen, wo Sie Sensor gelegen und wie Sie Ihre Räder fahren –

+1

Bearbeitete den Beitrag mit einem Bild von dem, wie der Bot aussieht und nahm die Sound-Teile im Code. – Brett

+0

Wenn ich noch etwas tun muss, um es Ihnen leichter zu machen, mir zu helfen, lassen Sie es mich wissen. Würde mich über Hilfe freuen! – Brett

Antwort

3

Ist dies der gleiche NXT, die ich verwendet, dann bekommen Sie nicht überall bald. Der Lichtsensor in diesem Kit ist Müll, man muss nur mit dem herumspielen, was er für "Ein" hält, bis er es tatsächlich aufnimmt. Ich wünschte, ich hätte eine bessere Antwort für Sie, aber ich habe diese Dinge seit 4 Jahren verwendet und hatte es nie funktioniert genau so, wie ich will. Ich benutzte die visuelle Software, die mit dem Kit geliefert wurde, und es gab eine Option, um festzulegen, wie viel benötigt wurde, um es einzustellen, versuche, nach etwas ähnlichem zu suchen.

+0

Wenn das Licht angeht, sollte ich erwarten, dass es das schwarze Band erkennt, oder ist das nicht unbedingt der Fall? – Brett

+1

@Bryan Nicht unbedingt. Es kann ziemlich schwierig sein, genau einzustellen, was der Roboter als "schwarz" und "nicht-schwarz" definiert. –

+0

Ich habe einige Tests durchgeführt und bestätigt, dass der Lichtsensor auf dem schwarzen Isolierband sitzt, es ist nur mein Code, der nicht richtig funktioniert. Irgendwelche Hilfe mit meinem Code? – Brett

0

Wenn Sie NXT-G verwenden, gibt es viele Möglichkeiten, Ihren Code auf Ihr dunkles Band reagieren zu lassen.

Das einfachste (aber vielleicht nicht das Beste für das, was Sie tun) ist eine Warteblock warten auf das Lesen des Lichts unter einen bestimmten Wert (wenn es Dunkelheit erkennt) während die Räder drehen "unbegrenzt" . Sie geben diesen Wert im Detailbereich unten an.

Oder Sie könnten einen gelben Sensorblock verwenden, um den Messwert vom Lichtsensor zu erhalten, und gelbe Datenleitungen verwenden, um diese Zahl in einen Vergleichsblock zu schreiben. Dann prüft der Vergleichsblock, ob Ihre Helligkeit mit der True/False-Ausgabedatenleitung dunkel genug ist.

Ein Tipp für die Verwendung von Isolierband: es ist glänzend! Schalte vielleicht rotes Licht aus, indem du die Box deaktivierst, sonst wird es nur Licht reflektieren und der Roboter wird es nicht sehen.

Verwandte Themen