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. public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World!"); Wykonaj po kolej: nxjc HelloWorld.java nxjlink -v HelloWorld -o HelloWorld.nxj nxjupload HelloWorld.nxj
Prosty program Skompiluj i uruchom poniższy program. public class ProstyProgram { 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!"); Klasy Button, Sound i LCD Sprawdź działanie klasy LCD, Sound i Button na poniższym przykładzie. public class ButtonSoundLCD { LCD.drawString("NXT ", 0,1); LCD.drawString("leJOS", 4,2); LCD.drawInt(2011,8,3); Sound.playTone(440, 100); // 440Hz, 100ms LCD.drawString("Cleared the screen...",0,3); LCD.drawString("Press button to continue!",0,4); 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()? public class ThreadExample {
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ć. 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
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