Instrukcja do u BASIC PR-02 Wojciech Pietkiewicz 22.03.2000
1 Wprowadzenie BASIC jest językiem owania wyższego rzędu, który umożliwia w łatwy i czytelny sposób sterować robotem PR-02 bezpośrednio z komputera. 2 Praca z BASIC em 2.1 Przygotowanie do pracy Aby zaczać pracę z BASIC em należy: 1) przejść do katalogu D:\BASIC\ 1, 2) uruchomić procom.exe, 3) włączyć sterownik BASIC a, 2.2 Przesyłanie u Przed przesłaniem u należy uruchomić plik basic.bat i jako parametr podać, który ma zostać przesłany do BASIC a 2. Wynikiem działania basic.bat bedzie plik o tej samej nazwie co przez nas napisany, ale o rozszerzeniu out. Tak właśnie przygotowany należy przesłać do interpretera. Jak to zrobić wyjaśnia instrukcja poniżej, przedstawiająca całą procedurę krok po kroku (zakładamy, iż napisaliśmy o nazwie prog.bas): 1 Uwaga! Położenie plików może się zmienić. 2 Program powinien mieć rozszerzenie bas. 2
1) wykonujemy komę basic.bat prog 3, w wyniku której otrzymujemy plik prog.out, 2) przesyłamy ten plik do BASIC a za pomocą kom 4 : a) przejście do trybu ładowania pliku: PG-UP, b) wybór rodzaju pliku: 7, (ASCI), c) podanie nazwy pliku: prog.out, 3 Tworzenie u 3.1 Uwagi ogólne Pisząc warto pamiętać o następujących cechach BASIC a 5 : 1) musi być plikiem tekstowym o rozszerzeniu bas, 2) BASIC ignoruje wielkość liter, 3) wszelkie deklaracje zmiennych umieszczone przed słowem kluczowym są globalne (ich wartości początkowe są zerowane), natomiast zmienne deklarowane wewnątrz procedur, bądź funkcji otrzymują statut lokalnych (ich wartości początkowe są losowe), 4) deklaracje funkcji, procedur są umieszczane przed słowem kluczowym, 5) zaczyna słowo, koniec u następuje po słowie, 6) komentarz zaczyna się od znaków /*, kończy się na znakach */, 7) wstawianie plików nagłówkowych wykonuje się za pomocą komy: #include "nazwa_pliku", przy czym wymagane jest podanie pełnej ścieżki dostępu, albo #include <nazwa_pliku>, gdzie nazwa_pliku znajduje się w katalogu D:\BASIC\PR02, 8) pierwszą funkcją w ie musi być: inicjalizacja() 3 Uwaga! Nie wolno dodać rozszerzenia bas 4 Uwaga! Wcześniej musi być uruchomiony BASIC (patrz: rozdział 2.1 punkt??). 5 Pod warunkiem, że został przetworzony przez plik basic.bat. 3
3.2 Przykładowy Poniższy pokazuje podstawowe komy dostępne dzięki dołączeniu pliku nagłówkowego pr02.inc. #include <pr02.inc> /* plik nagłówkowy do obsługi robota PR-02 */ /* tu zaczyna się */ inicjalizacja() /* inicjalizacja */ ruszaj(tyl) /* wsunięcie ramienia */ ruszaj(dol) /* opuszczenie chwytaka */ ruszaj(otworz) /* otwarcie chwytaka */ ruszaj(prawo) /* obrócenie chwytaka w prawo */ if klocek() /* jeżeli klocek leży na palecie */ zielona(1) /* zapal zieloną diodę */ czerwona(0) /* zgaś czerwoną diodę */ else zielona(0) /* zgaś zieloną diodę */ czerwona(1) /* zapal zieloną diodę */ if /* koniec u */ 3.3 Opis kom Poniżej opisane są dwa rodzaje kom: bezpośrednio dostępne w BASIC u oraz dostepne za pomocą dołączenia pliku nagłówkowego pr02.inc. Wszystkie komy są wystarczające do realizacji ćwiczenia. 3.3.1 Komy bezpośrednio dostępne w BASIC u Bezpośrednio w BASIC u dostępne są następujące komy: var <zmienna> deklaracja zmiennych 16bit, dim <zmienna> deklaracja zmiennych, function <nazwa_funkcji>([par],...) deklaracja funkcji 6, funkcja może być bezparametrowa wówczas deklarujemy ją tak: function <nazwa_funkcji>(), koniec funkcji następuje po słowie f, np.: 6 UWAGA: argumentem funkcji nie może być inna funkcja. 4
function f1(parametr) /* funkcja z parametrem i zwracająca wartość */ return parametr + 100 f function f2(parametr) /* funkcja z parametrem, niezwracająca wartości */ print "Podany parametr: " printfl parametr f function f3() /* funkcja bezparametrowa, niezwracająca wartości */ printl "Funkcja bez parametrow." f dim j j = f1(2) f2(j) f3() if <wyr> <instr>... else <instr> if każdorazowo if musi być zakończony instrukcją if, instrukcje zawarte w else wykonają się w przypadku spełnienia wyr, insrukcja if może się zagłębiać, np.: i = 5 if i > 5 printl "wieksze" else if i = 5 printl "rowne" else printl "mniejsze" if if while <wyr> <instrukcje>... w jeżeli wyr jest spełnione to instrukcje będą wykonane tak długo aż wyr nie będzie spełnione, while zamyka słowo kluczowe w, np: 5
i = 100 while i > 0 print "i = " printfl i i = i - 1 w repeat... until <wyr> powtarzaj do spełnienia wyr, np.: repeat printf i print ", " i = i + 1 until i>10 print mamy do dyspozycji kilka wersji komy print: print <wyr>, wyświetla wyr w formie pięciu cyfr (ze znakiem), print "tekst", wyświetla tekst na ekranie, printl "tekst", wyświetla tekst na ekranie przechodzac do nowej linii, printh <wyr>, wyświetla wartość wyrażenia wyr na ekranie w postaci szesnastkowej (heksadecymalnej), printhl <wyr>, wyświetla wartość wyrażenia wyr na ekranie w postaci szesnastkowej przechodząc do nowej linii, printf <wyr>, wyświetla wartość wyrażenia wyr na ekranie, printfl <wyr>, wyświetla wartość wyrażenia wyr na ekranie przechodząc do nowej linii, input <zmienna> wpisuje wprowadzoną z klawiatury wartość do zmiennej, np: print "Podaj i: " input i print "i = " print i 6
for <zm> = <wyr1> to <wyr2> [step <wyr3>] <instr> next, powtarzanie <instr> aż zm = wyr2,np.: for i = 1 to 10 step 2 printfl i next for i = 10 to 1 step -2 printfl i next define <stała> <wartość> zadeklarowanie stałej o zadanej wartości, (po define nie może być wyrażenia, np define stala 2+3), np: define zmienna $003A delay <wyr> opoznienie wyr 0.01sek, np.: printl "Start" delay 200 printl "Stop" TimerX <wyr> gdzie X jest literą od A do D, liczniki 16bit zliczające do 0 od wyr 0.01sek, np.: TimerA=100 TimerB=200 i = 1 while TimerA>0 i = i + 1 printf i print ", " w 3.3.2 Komy dostępne za pomoca pliku pr02.inc Poniższe komy są dostępne jedynie gdy dołączymy do u plik nagłówkowy pr02.inc. inicjalizacja() inicjalizacja, jest to funkcja, która musi być wykonana jako pierwsza, ruszaj(<ruch>) wykonanie ruchu robotem, gdzie ruch może być następujący: 7
OTWORZ, otwarcie chwytaka, ZAMKNIJ, zamknięcie chwytaka, PRZOD, wysunięcie ramienia, TYL, wsunięcie ramienia, GORA, podniesienie chwytaka, DOL, opuszczenie chwytaka, LEWO, obrót chwytaka w lewo, PRAWO, obrót chwytaka w prawo, klocek() funkcja, która zwraca wartość 1 gdy czujnik na palecie jest wciśnięty, 0 gdy czujnik jest wyciśnięty, wsuniete() funkcja, która zwraca wartość 1 gdy ramię jest wsunięte, 0 gdy ramię nie jest wsunięte, wysuniete() funkcja, która zwraca wartość 1 gdy ramię jest wysunięte, 0 gdy ramię nie jest wysunięte, zielona(<flaga>) funkcja zapalająca zieloną diodę gdy f laga = 1, gasząca gdy f laga = 0, czerwona(<flaga>) funkcja zapalająca czerwoną diodę gdy f laga = 1, gasząca gdy f laga = 0, kolor() funkcja zwracajaca 0 gdy kolor górnej powierzchni klocka jest czarny, 1 w innym przypadku. 8