Projekt 1.5 - Střežení objektu
8. Časování
JAVA verze
import lejos.nxt.*;
public class alarm
{
public static void main (String[] aArg)
throws Exception
{
int cislo1 = 0;
int cislo2 = 0;
int cislo3 = 0;
int cislo4 = 0;
int pozice = 1;
long tik = 0;
int sekundy = 0;
long scas = 0;
boolean kodOK = false;
// Vytvoříme novou instanci třídy ultrasonic sensor
// - připojeném na vstupu 1:
UltrasonicSensor sonic1 = new UltrasonicSensor(SensorPort.S3);
Motor.B.resetTachoCount();
LCD.drawString("STREZIM",0,4);
// Cekani na naruseni objektu:
while (sonic1.getRange()>10) {
if (Button.ESCAPE.isPressed())
System.exit(1);
}
LCD.clear();
Sound.playTone(1000,300);
// Cyklus zadavani kodu
// bezi dokud neni zadan spravny kod a zaroven neuplynulo pul minuty:
while ((!kodOK) && (sekundy < 30)) {
// Nacti systemovy cas v sekundach:
scas = System.nanoTime()/1000000000;
LCD.drawString("Zbyva cas: " + Long.toString(30-sekundy) + " ",0,4);
// LCD.drawString("Tacho: " + Motor.B.getTachoCount(),0,5);
// Pripocti sekundu, kdyz se cas zmeni:
if (!(scas==tik)) {
tik=scas;
sekundy +=1;
Sound.playTone(1000,50);
}
if (pozice==1) {
LCD.drawString("PRVNI CISLO: " + cislo1,0,0);
} else {
LCD.drawString("Prvni cislo: " + cislo1,0,0);
}
if (pozice==2) {
LCD.drawString("DRUHE CISLO: " + cislo2,0,1);
} else {
LCD.drawString("Druhe cislo: " + cislo2,0,1);
}
if (pozice==3) {
LCD.drawString("TRETI CISLO: " + cislo3,0,2);
} else {
LCD.drawString("Treti cislo: " + cislo3,0,2);
}
if (pozice==4) {
LCD.drawString("CTVRTE CISLO: " + cislo4,0,3);
} else {
LCD.drawString("Ctvrte cislo: " + cislo4,0,3);
}
// Když stiskneme ESC program se ukončí:
if (Button.ESCAPE.isPressed())
System.exit(1);
// Když :
if (Motor.B.getTachoCount()>30) {
Sound.playTone(1000,300);
switch (pozice) {
case 1: cislo1+=1; if (cislo1 > 9) cislo1=0; break;
case 2: cislo2+=1; if (cislo2 > 9) cislo1=0; break;
case 3: cislo3+=1; if (cislo3 > 9) cislo1=0; break;
case 4: cislo4+=1; if (cislo4 > 9) cislo1=0; break;
} // konec switch
Motor.B.resetTachoCount();
} // konec if
// Když :
if (Motor.B.getTachoCount()<(-30)) {
Sound.playTone(1000,300);
switch (pozice) {
case 1: cislo1-=1; if (cislo1 < 0) cislo1=9; break;
case 2: cislo2-=1; if (cislo2 < 0) cislo2=9; break;
case 3: cislo3-=1; if (cislo3 < 0) cislo3=9; break;
case 4: cislo4-=1; if (cislo4 < 0) cislo4=9; break;
} // konec switch
Motor.B.resetTachoCount();
} // konec if
if (Button.ENTER.isPressed()) {
pozice+=1;
Sound.playTone(800,300);
}
// Muzeme prejit i na dalsi pokus:
if (pozice>4) pozice=1;
// Vyhodnoceni spravneho kodu:
if ((cislo1==1) & (cislo2==2) & (cislo3==3) & (cislo4==4) ) {
kodOK=true;
}
Thread.sleep(300);
} // Konec cyklu zadavani kodu
if (kodOK) {
// KOD OK :
LCD.clear();
LCD.drawString(" kombinace OK ",0,0);
Thread.sleep(10000);
} else {
LCD.clear();
LCD.drawString(" POPLACH ",0,0);
while (true) {
// Poplach:
Sound.playTone(2000,1000);
Sound.playTone(4000,1000);
if (Button.ESCAPE.isPressed())
System.exit(1);
}
}
} // Konec hlavniho programu main
} // konec cele tridy