final push
[des2015.git] / dsl / runtime / src / nl / ru / des / Marster.java
1 package nl.ru.des;
2
3 import java.io.File;
4 import java.io.PrintStream;
5 import java.util.LinkedList;
6 import java.util.Random;
7
8 import lejos.hardware.Sound;
9 import lejos.hardware.ev3.EV3;
10 import lejos.hardware.ev3.LocalEV3;
11 import lejos.hardware.lcd.Font;
12 import lejos.hardware.lcd.LCDOutputStream;
13 import lejos.hardware.motor.EV3LargeRegulatedMotor;
14 import lejos.hardware.motor.EV3MediumRegulatedMotor;
15 import lejos.hardware.port.MotorPort;
16 import lejos.hardware.sensor.EV3ColorSensor;
17 import lejos.hardware.sensor.EV3GyroSensor;
18 import lejos.hardware.sensor.EV3TouchSensor;
19 import lejos.hardware.sensor.EV3UltrasonicSensor;
20 import lejos.hardware.sensor.NXTLightSensor;
21 import lejos.robotics.RegulatedMotor;
22 import lejos.robotics.SampleProvider;
23 import lejos.utility.Delay;
24 import nl.ru.des.sensors.BTController;
25 import nl.ru.des.sensors.RemoteSensors;
26 import nl.ru.des.sensors.SensorCollector;
27
28 public class Marster {
29 public static Arbitrator arb;
30 public static Random random;
31
32 public static void playPacman(){
33 int whole = 2000;
34 Sound.playNote(Sound.PIANO, 494, whole/16);// b4
35 Sound.playNote(Sound.PIANO, 988, whole/16);// b5
36 Sound.playNote(Sound.PIANO, 740, whole/16);// f#5
37 Sound.playNote(Sound.PIANO, 622, whole/16);// eb5
38 Sound.playNote(Sound.PIANO, 988, whole/32);// b5
39 Sound.playNote(Sound.PIANO, 740, whole/16+whole/32);// f#5
40 Sound.playNote(Sound.PIANO, 622, whole/8);// eb5
41
42 Sound.playNote(Sound.PIANO, 523, whole/16);// c5
43 Sound.playNote(Sound.PIANO, 1047, whole/16);// c6
44 Sound.playNote(Sound.PIANO, 784, whole/16);// g5
45 Sound.playNote(Sound.PIANO, 659, whole/16);// e5
46 Sound.playNote(Sound.PIANO, 1047, whole/32);// c6
47 Sound.playNote(Sound.PIANO, 784, whole/16+whole/32);// g5
48 Sound.playNote(Sound.PIANO, 659, whole/8);// e5
49
50 Sound.playNote(Sound.PIANO, 494, whole/16);// b4
51 Sound.playNote(Sound.PIANO, 988, whole/16);// b5
52 Sound.playNote(Sound.PIANO, 740, whole/16);// f#5
53 Sound.playNote(Sound.PIANO, 622, whole/16);// eb5
54 Sound.playNote(Sound.PIANO, 988, whole/32);// b5
55 Sound.playNote(Sound.PIANO, 740, whole/16+whole/32);// f#5
56 Sound.playNote(Sound.PIANO, 622, whole/8);// eb5
57
58 Sound.playNote(Sound.PIANO, 622, whole/32);// eb5
59 Sound.playNote(Sound.PIANO, 659, whole/32);// e5
60 Sound.playNote(Sound.PIANO, 698, whole/16);// f5
61 Sound.playNote(Sound.PIANO, 698, whole/32);// f5
62 Sound.playNote(Sound.PIANO, 740, whole/32);// f#5
63 Sound.playNote(Sound.PIANO, 784, whole/16);// g5
64 Sound.playNote(Sound.PIANO, 784, whole/32);// g5
65 Sound.playNote(Sound.PIANO, 831, whole/32);// ab5
66 Sound.playNote(Sound.PIANO, 880, whole/16);// a5
67 Sound.playNote(Sound.PIANO, 988, whole/8);// b5
68 }
69
70 @SuppressWarnings("resource")
71 public static void main(String[] args) {
72 EV3 brick = LocalEV3.get();
73 PrintStream lcd = new PrintStream(new LCDOutputStream(brick.getTextLCD(Font.getSmallFont())));
74 System.setOut(lcd);
75 System.setErr(lcd);
76
77 System.out.println("Loading keylistener...");
78 brick.getKey("Escape").addKeyListener(new ButtonListener());
79 if(brick.getName().equalsIgnoreCase("Rover6") || brick.getName().equalsIgnoreCase("Rover8")){
80 System.out.println("Starting as a slave...");
81 System.out.println("My name is " + brick.getName());
82 System.out.println("Loading touch sensors...");
83 SampleProvider leftTouch = new EV3TouchSensor(brick.getPort("S1")).getTouchMode();
84 SampleProvider rightTouch = new EV3TouchSensor(brick.getPort("S2")).getTouchMode();
85
86 System.out.println("Loading ultrasone sensor...");
87 SampleProvider frontUltra = new EV3UltrasonicSensor(brick.getPort("S3")).getDistanceMode();
88
89 System.out.println("Loading color sensors...");
90 SampleProvider color = new EV3ColorSensor(brick.getPort("S4")).getColorIDMode();
91 RemoteSensors rs = new RemoteSensors(leftTouch, rightTouch, frontUltra, color);
92
93 BTController.startSlave();
94 try {
95 rs.start(BTController.buf);
96 } catch (Exception e){
97 System.exit(0);
98 }
99 } else {
100 String slave = brick.getName().equalsIgnoreCase("Rover5") ? "Rover6" : "Rover8";
101 System.out.println("Starting as as master...");
102 System.out.println("My name is " + brick.getName());
103 System.out.println("Going to connect to: " + slave);
104 System.out.println("Loading motors...");
105 RegulatedMotor rightMotor = new EV3LargeRegulatedMotor(MotorPort.A);
106 RegulatedMotor leftMotor = new EV3LargeRegulatedMotor(MotorPort.B);
107 RegulatedMotor measMotor = new EV3MediumRegulatedMotor(MotorPort.C);
108 leftMotor.setSpeed(Constants.speed);
109 rightMotor.setSpeed(Constants.speed);
110 measMotor.setSpeed(50);
111 rightMotor.setAcceleration(Constants.acceleration);
112 leftMotor.setAcceleration(Constants.acceleration);
113 measMotor.setAcceleration(50);
114
115 System.out.println("Loading touch sensors...");
116 SampleProvider leftLight = new NXTLightSensor(brick.getPort("S1")).getRedMode();
117 SampleProvider rightLight = new NXTLightSensor(brick.getPort("S2")).getRedMode();
118
119 System.out.println("Loading ultrasone sensor...");
120 SampleProvider backUltra = new EV3UltrasonicSensor(brick.getPort("S3")).getDistanceMode();
121
122 System.out.println("Loading gyro sensor...");
123 SensorCollector sc = new SensorCollector(backUltra, leftLight, rightLight, new EV3GyroSensor(brick.getPort("S4")));
124
125 BTController.startMaster(slave, sc);
126 System.out.println("Finished loading");
127 sc.calibrate();
128 LinkedList<Mission> missions = Missions.getMissions(sc, rightMotor, leftMotor, measMotor);
129 random = new Random();
130 Delay.msDelay(2000);
131 playPacman();
132 for(Mission m : missions){
133 System.out.println("Start " + m.name + " mission...");
134 arb = new Arbitrator(m.behaviours);
135 sc.reset();
136 arb.start();
137 Sound.buzz();
138 Delay.msDelay(5000);
139 System.out.println(m.name + " finished!!1one!");
140 }
141 Sound.playSample(new File("rick.wav"), Sound.VOL_MAX);
142 System.exit(0);
143 }
144 }
145 }