2013-12-15 19 views
6

Jestem nowy w programowaniu NBC i próbuję zaprogramować moją klocek Lego NXT, aby wyszukać i śledzić linię czarnej taśmy elektrycznej, którą mam na podłodze (mam czujnik światła z przodu i wskazując prosto na ziemię). W tej chwili światło włącza się, ale robot po prostu kontynuuje przewijanie taśmy, nie uznając tego. Mam też ustawiony tak, aby zatrzymać się i odwrócić, jeśli wpadnie na ścianę, która działa. Jedyną rzeczą, która nie działa, jest uznawanie i śledzenie czarnej taśmy, kiedy światło przechodzi nad nią. Czy ktoś może rzucić okiem na mój kod i powiedzieć mi, gdzie idę źle?Klocek LEGO NXT za pomocą 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

możesz usunąć zbędne dźwięki zadzwonić do ciebie kod (w celu uproszczenia zrozumieć)? A także LDD lub przynajmniej zdjęcie twojego bota będzie przydatne, aby zrozumieć, gdzie znajduje się twój czujnik i jak twój napęd się kręci –

+1

Edytował post z obrazem tego, jak wygląda bot i wyjął części dźwiękowe z kodu. – Brett

+0

Jeśli potrzebuję zrobić coś więcej, aby ułatwić mi pomoc, proszę dać mi znać. Naprawdę doceniam pomoc! – Brett

Odpowiedz

3

Jeśli jest to ten sam NXT że użyłem, to nie są nigdzie szybko. Czujnik światła w tym zestawie jest śmieciem, musisz po prostu bawić się z tym, co uważa za "włączone", dopóki go nie podniesie. Chciałbym mieć dla ciebie lepszą odpowiedź, ale używałem tych rzeczy przez 4 lata i nigdy nie pracowałem dokładnie tak, jak chcę. Użyłem oprogramowania wizualnego dostarczonego z zestawem i miałem opcję ustawienia, ile było potrzebne, aby ustawić, spróbuj poszukać czegoś podobnego.

+0

Jeśli lampka się zapala, czy powinienem oczekiwać, że rozpozna czarną taśmę, czy też niekoniecznie tak jest? – Brett

+1

@Bryan Niekoniecznie. Dokładne dostrojenie tego, co robot definiuje jako "czarny" i "nie-czarny", może być dość trudne. –

+0

Przeprowadziłem kilka testów i potwierdziłem, że czujnik światła odbiera się na czarnej taśmie elektrycznej, to tylko mój kod nie działa poprawnie. Każda pomoc z moim kodem? – Brett

0

Jeśli używasz NXT-G, istnieje wiele sposobów, aby twój kod zareagował na ciemną taśmę.

Najprostszym (ale może nie najlepszym z tego co robisz) jest poczekanie, aż odczyt światła spadnie poniżej pewnej wartości (gdy wykryje ciemność), podczas gdy koła obracają się "bez ograniczeń" . Tę wartość określasz w okienku szczegółów u dołu.

Można też użyć żółtego bloku czujnika, aby odczytać odczyt z czujnika światła i użyć żółtego przewodu danych, aby umieścić ten numer w bloku porównania. Następnie blok porównawczy sprawdzi, czy jasność jest wystarczająco ciemna, czy jest to przewód danych wyjściowych true/false.

Wskazówka dotycząca używania taśmy izolacyjnej: jest błyszcząca! Więc może wyłączyć czerwone światło, odznaczając pole, w przeciwnym razie będzie po prostu odbijać światło, a robot go nie zobaczy.