PDF 223Kb - Marek Piasecki

Transkrypt

PDF 223Kb - Marek Piasecki
I. Twój pierwszy program w języku NQC
W tym rozdziale nauczymy się jak napisać bardzo prosty program w języku NQC w środowisku RCX
CommandCenter. Zaprogramujemy robota tak, aby przez 4 sekundy poruszał się do przodu, następnie przez
kolejne 4 sekundy do tyłu, po czym powinien się zatrzymać. Nie jest to spektakularne zadanie, ale pozwoli nam
w prosty sposób przedstawić podstawowe idee programowania. I pokaże jakie jest to łatwe! Ale zanim
napiszemy program, najpierw trzeba będzie zbudować robota.
Konstruowanie robota
Robot, który wykorzystamy w naszym przykładzie, jest prostą wersją robota “top-secret” opisanego na stronach
39-46 twojej konstruktopedii. My wykorzystamy tylko podstawowy układ jezdny, w związku z tym można
pominąć dobudowanie frontowych czujników. Również silniki napędzające można zamontować trochę inaczej –
z tyłu klocka RCX. Twój robot powinien wyglądać mniej więcej tak jak ten na ilustracji poniżej:
Sprawdź również, czy wieżyczka (transmiter komunikacji pomiędzy twoim komputerem PC i klockiem RCX)
jest poprawnie podłączona do portu COM komputera i jest ustawiona na daleki zakres nadawania. (Możesz użyć
standardowego oprogramowania dostarczanego wraz z zestawem RIS do sprawdzenia czy twój robot i transmisja
PC↔RCX działa poprawnie.)
Praca ze środowiskiem RCX Command Center
Nasz program napiszemy używając środowiska RCX Command Center. Uruchom je za pomocą podwójnego
kliknięcia na ikonie RcxCC. (Zakładam, że już zainstalowałeś RCX Command Center. Jeżeli nie to załaduj pliki
instalacyjne tego oprogramowania z odpowiedniej strony WWW ( http://www.cs.uu.nl/people/markov/lego/ )
rozpakuj, zapamiętaj w wybranej przez ciebie kartotece i zainstaluj poprzez uruchomienie programu
instalacyjnego SetUp.EXE.
Po uruchomieniu, program RCX Command Center zapyta się o typ wykorzystywanego klocka (RCX
czy CyberMaster) oraz do którego portu jest podłączony Transmiter (wieżyczka). Włącz swojego robota
i nacisnij klawisz OK. Jeżeli wszystko jest poprawnie podłączone, to program automatycznie rozpozna numer
portu COM do którego podłączony jest Transmiter oraz typ klocka.
Na ekranie powinien się ukazać następujący interfejs użytkownika (ale bez wewnętrznego okna z naszym
przykładowym programem).
Interfejs środowiska RCXcc (Command Center) wygląda jak standardowy edytor tekstowy, z typowym menu,
listwą przycisków do otwierania i zapamiętywania plików, drukowania, edytowania itd. W odróżnieniu od
zwykłych edytorów tekstowych, RCXcc posiada dodatkowe opcje menu związane z kompilacją i ładowaniem
programów dla robota (Compile) oraz narzędzia przydatne do pisania i uruchamiania programów (Tools). W tym
momencie możesz je zignorować.
My zamierzamy napisać nowy program, w związku z tym kliknij przycisk New File aby utworzyć nowe puste
okno.
Pisanie programu
W nowo otwartym oknie wpisz następujący program:
task main()
{
OnFwd(OUT_A);
OnFwd(OUT_C);
Wait(400);
OnRev(OUT_A+OUT_C);
Wait(400);
Off(OUT_A+OUT_C);
}
Za pierwszym razem to może wyglądać trochę skomplikowanie więc przeanalizujmy treść kolejnych linijek tego
programu. Programy w języku NQC składają się z zadań (tasks) które mogą być wykonywane współbieżnie.
Nasz pierwszy program będzie miał tylko jedno zadanie, które nazwiemy main. Każdy program musi mieć
zadanie o nazwie main , które będzie jako pierwsze wykonywane przez robota. Więcej o uruchamianiu zadań
nauczymy się w rozdziale Błąd! Nie można odnaleźć źródła odsyłacza..
-2-
Zadanie składa się z kilku/kilkunastu poleceń nazywanych również instrukcjami. Instrukcje są ujęte w nawiasy
klamrowe, aby zaznaczyć które z nich należą do danego zadania. Każda instrukcja jest zakończona średnikiem.
W ten sposób wyraźnie widać gdzie się kończy jedna instrukcja a gdzie się zaczyna następna. Tak więc
wszystkie zadania w ogólności będą wyglądać następująco:
task main()
{
instrukcja1;
instrukcja2;
…
}
Nasz program ma sześć instrukcji. Popatrzmy na każdą z nich osobno:
OnFwd(OUT_A);
Ta instrukcja mówi robotowi, że powinien włączyć zasilanie (On) na wyjściu A klocka RCX, to znaczy aby
silnik podłączony do wyjścia A poruszał się do przodu (Forward). Silnik będzie się poruszał z maksymalną
prędkością jeżeli wcześniej nie ustawiliśmy prędkości. Później zobaczymy jak można to zrobić.
OnFwd(OUT_C);
Taka sama instrukcja uruchomi silnik C. Po tych dwóch instrukcjach obydwa silniki będą uruchomione i robot
będzie się poruszał do przodu.
Wait(400);
Teraz jest czas aby chwilę poczekać. Ta instrukcja mówi robotowi, że powinien odczekać 4 sekundy. Argument
instrukcji, to jest liczba pomiędzy nawiasami, zadaje ilość tiknięć zegara jakie należy odczekać. Każde tiknięcie
trwa 1/100 sekundy (jedną milisekundę). Tak więc bardzo dokładnie możemy zadawać długość czasu jaki robot
powinien odczekać.
Przez 4 sekundy robot nie robi nic nowego i kontynuuje rozpoczęte poruszanie się do przodu.
OnRev(OUT_A+OUT_C);
Teraz robot przesunął się już wystarczająco daleko, więc powiemy mu aby zmienił kierunek ruchu, tzn zaczął się
poruszać do tyłu.. Zauważmy, że możemy jednocześnie sterować obydwoma silnikami podając jako argument
instrukcji OUT_A+OUT_C. W taki sam sposób moglibyśmy połączyć również dwie pierwsze instrukcje naszego
programu.
Wait(400);
Ponowne odczekanie 4 sekund.
Off(OUT_A+OUT_C);
I na koniec zatrzymujemy robota poprzez wyłączenie zasilania (Off) obu silników.
I to jest cały program. Robot porusza się przez 4 sekundy do przodu, potem przez 4 sekundy do tyłu i na
zakończenie staje.
Pewnie zauważyłeś zmiany koloru tekstu kiedy wpisywałeś treść programu. Te zmiany dokonują się
automatycznie. Wszystkie teksty pisane kolorem niebieskim to instrukcje dla robota, identyfikatory silnika lub
inne symbole który są znane robotowi. Słowo task jest wytłuszczone ponieważ jest ono ważnym
(zarezerwowanym) słowem w języku NQC. Inne ważne słowa również będą drukowane w sposób wytłuszczony.
Te kolory są przydatne do sprawdzania czy nie popełniasz jakiś błędów literowych podczas wpisywania poleceń.
Uruchomienie programu
Kiedy już napisałeś swój program, to teraz musi on zostać skompilowany (to znaczy przetłumaczony na postać
zrozumiałą dla procesora klocka poprzez polecenie Compile ) i wysłany do robota poprzez nadajnik
promieniowania podczerwonego – Transmiter (ten proces będziemy nazywać ładowaniem programu – download
program ). Na górze okna edytora znajduje się odpowiedni przycisk powodujący wykonanie tych operacji (patrz
ilustracja na poprzedniej stronie → przycisk Compile). Jeżeli wszystko przebiegnie bez błędów, to twój program
został skompilowany i załadowany do klocka RCX.
Teraz możesz uruchomić swój program. Aby to zrobić naciśnij zielony klawisz RUN na klocku RCX
lub kliknij przycisk Run Program w oknie edytora. Czy robot zachowuje się w oczekiwany sposób? Jeżeli nie to
sprawdź połączenia kabelków łączących silniki z portami A i C.
-3-