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

Podobne dokumenty