Podstawy programowania w leJOS
Transkrypt
Podstawy programowania w leJOS
8 listopada 2011 Podstawy programowania w leJOS Plan wykładu 1. Prezentacja rozwiązań zadań domowych z pierwszych zajęć. 2. Maszyna wirtualna leJOS: a. instalacja SDK leJOS na komputerze, b. instalacja leJOSa na kostce NXT, c. kompilacja i wgrywanie programów na NXT. ■ nxjc HelloWorld.java ■ nxjlink -v HelloWorld -o HelloWorld.nxj ■ nxjupload HelloWorld.nxj 3. Pierwszy program a. struktura programu b. instrukcje sterujące: ■ if ( … ){ … } else { … } ■ while ( … ) c. podstawowe klasy w leJOSie ■ klasa Motor ■ klasy LCD i Sound ■ klasa Thread ● metoda sleep ● rzucanie wyjątków 8 listopada 2011 Ćwiczenia Wszystkie pliki źródłowe dostępne są również na stronie warsztatów oraz pod adresem: http://robotyka.wmi.amu.edu.pl/warsztaty/02_lejos/ Instalacja leJOS Wgraj na kostkę najnowszą wersję leJOSa (0.9.0). ● Zainstaluj sterowniki NXT na swoim komputerze ● Zainstaluj i skonfiguuruj leJOSa ● Podłącz NXT do komputera za pomocą kabla USB ● Włącz kostkę pomarańczowym przyciskiem - poczekaj aż system rozpozna robota i doinstaluje odpowiednie sterowniki. ● Uruchom wiersz poleceń i wpisz: nxjflashg ● Postępuje zgodnie z instrukcjami na ekranie Hello World Skompiluj, wgraj i uruchom swój pierwszy program. import lejos.nxt.*; public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); Button.waitForPress(); } } Wykonaj po kolej: ● nxjc HelloWorld.java ● nxjlink -v HelloWorld -o HelloWorld.nxj ● nxjupload HelloWorld.nxj 8 listopada 2011 Prosty program Skompiluj i uruchom poniższy program. import lejos.nxt.*; public class ProstyProgram { public static void main(String[] args) throws Exception { System.out.println("Basic Motor Test!"); Motor.A.setSpeed(3000); Motor.B.setSpeed(500); Motor.A.forward(); Motor.B.backward(); Thread.sleep(1000); Motor.A.stop(); Motor.B.stop(); System.out.println("KONIEC!"); Button.waitForPress(); } } Klasy Button, Sound i LCD Sprawdź działanie klasy LCD, Sound i Button na poniższym przykładzie. import lejos.nxt.*; public class ButtonSoundLCD { public static void main(String[] args) throws Exception { LCD.clear(); LCD.drawString("NXT ", 0,1); LCD.drawString("leJOS", 4,2); LCD.drawInt(2011,8,3); Sound.playTone(440, 100); // 440Hz, 100ms Button.waitForPress(); LCD.clear(); LCD.drawString("Cleared the screen...",0,3); LCD.drawString("Press button to continue!",0,4); Button.waitForPress(); } } Obsługa wątków Zapoznaj się z poniższym kodem i działaniem wątków. Skompiluj program i wgraj go na kostkę. Przeanalizuj jego przebieg, co się stanie, gdy odkomentujemy linie z poleceniem setDaemon()? import lejos.nxt.*; public class ThreadExample { public static void main(String[] args) throws Exception { LCD.clear(); Button.waitForPress(); 8 listopada 2011 Timer t = new Timer(); //t.setDaemon(true); Controler c = new Controler(); //c.setDaemon(true); t.start(); } } class Timer extends Thread { @Override public void run(){ int i = 10; Sound.playTone(440, 100); try { while(i>0) { LCD.drawString("Time left: ", 0, 0); LCD.drawInt(i, 10, 0); i--; this.sleep(1000); } System.out.println("Timer - koniec!"); } catch (Exception e) {} } } class Controler extends Thread { @Override public void run() { try { Sound.playTone(660, 400); Motor.A.setSpeed(360); Motor.A.forward(); this.sleep(5000); Motor.A.stop(); System.out.println("Controller - koniec!"); } catch (Exception e) {} } } Obsługa wyjątków Spróbuj skompilować poniższy program. W razie potrzeby zmodyfikuj go tak, aby można go było uruchomić. import lejos.nxt.*; public class ExceptionsExample { public static void main(String[] args) { System.out.println("Test the Exceptions"); Thread.sleep(500); } } Zadania Kwadrat (2 punkty) Zaprogramuj robota tak, aby podróżował po kwadracie. Robot powinien wykonać co najmniej 8 listopada 2011 trzy okrążenia pod rząd. Dodatkowo powinien zaczynać i kończyć zadanie w tym samym punkcie. Koło (2 punkty) Jak wyżej, ale tor ma kształt koła o wyznaczonej średnicy. Koło plus (1 punkt) Jak wyżej ale robot musi na ekranie wyświetlać liczbę okrążeń jakie wykonał oraz co okrążenie wydawać dźwięk. Zadania domowe Ósemka (1 punkt) Podobnie jak w zadaniu Koło, ale robot podróżuje po kształcie cyfry 8. Katapulta (3 punkty) Przebuduj swojego robota na mobilną katapultę. Zaprogramuj go tak, aby w cykliczny sposób wyjeżdzał z bazy (gdzie będzie ładowany), ustawiał się na pozycji, oddawał strzał i wracał do bazy. Jego trasa za każdym razem powinna być trochę inna. Do obsługi katapulty wykorzystaj wątki. Katapulta+ (1punkt) Punkty przyznawane za ciekawe rozwiązania zadania Katapulta