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