Projekt 2.1 - Přechod pro chodce
10. Rozšíření programu o zvuk
JAVA verze
import lejos.nxt.*;
public class semafory3
{
// Nadefinujeme si třídu Lamp pro ovládání světel.
// Využijeme třídy MotorPort k ovládání světla.
// Konkrétně metodu controlMotor, která má parametry (power,mode).
// power - power from 0-100
// mode - 1=forward, 2=backward, 3=stop, 4=float
public static class Lamp {
// soukromé proměnné třídy:
private MotorPort _M = MotorPort.A;
private boolean _IsLighting;
// Konstruktor třídy:
public Lamp(MotorPort M) {
_M = M;
_M.controlMotor(0,1);
_IsLighting = false;
}
// Metoda zapni
public void On() {
_M.controlMotor(100,1);
_IsLighting = true;
}
// metoda vypni
public void Off() {
_M.controlMotor(0,1);
_IsLighting = false;
}
// metoda vracející stav lampy
public boolean IsLighting() {
return _IsLighting;
}
} // Konec třídy Lamp
// Vytvoříme třídu Zvuk, jejíž metoda run poběží paralerně s hlavním programem.
public static class Zvuk extends Thread {
// soukromá proměnná třídy:
private boolean _chodci;
// Konstruktor třídy:
public Zvuk() {
_chodci = false;
}
// Metoda run vyuziva metody
// public static void playTone(int aFrequency,
// int aDuration,
// int aVolume) tridy Sound.
public void run() {
while (true) {
Sound.playTone(500,50,100);
if (_chodci)
Sound.pause(300);
else
Sound.pause(1000);
} // konec cyklu while
} // konec metody run
public void setChodci(boolean chodci) {
_chodci = chodci;
} // konec metody setChodci
} // Konec třídy Zvuk
public static void main (String[] aArg)
throws Exception
{
// Vytvoříme tři nové instance třídy Lamp pro jednotlivé barvy:
Lamp zelena = new Lamp(MotorPort.B);
Lamp cervena = new Lamp(MotorPort.A);
Lamp zluta = new Lamp(MotorPort.C);
Zvuk zvuk1 = new Zvuk();
// Vytvoříme novou instanci třídy touch sensor - připojeném na vstupu 1:
TouchSensor touch1 = new TouchSensor(SensorPort.S1);
// Spustime paralerni vetev programu zvuk1:
zvuk1.setChodci(false);
zvuk1.start();
// Vlastní nekonečný cyklus pro řízení přechodu:
while (true) {
zelena.On();
// Čekáme na dotyk senzoru touch1, pokud je stisknuto tlačítko ESCAPE program se ukončí.
while(!touch1.isPressed()) {
if (Button.ESCAPE.isPressed())
System.exit(1);
}
// V cyklu, ktery bezi 10x zobrazujeme i (cislo pruchodu):
for (int i = 16; i >= 6; i--)
{
LCD.drawString(Integer.toString(i),2,2);
Thread.sleep(1000);
}
zelena.Off();
zluta.On();
// V cyklu, ktery bezi 5x zobrazujeme i (cislo pruchodu):
for (int i = 5; i >= 0; i--)
{
LCD.drawString(Integer.toString(i),2,2);
Thread.sleep(1000);
}
zluta.Off();
cervena.On();
zvuk1.setChodci(true);
Thread.sleep(10000);
cervena.Off();
zvuk1.setChodci(false);
zluta.On();
Thread.sleep(5000);
zluta.Off();
} // konec sekvence příkazů nekonečného cyklu
} // konec metody main
} // konec třídy