Hallo,
es wird besser, aber noch nicht gut
Eine Unit besteht im Modell immer aus einem konkreten Motor und einem konkreten Sensor.
Deswegen werden die in einem Array "Unit[]" definiert.
(Man könnte die Objekte auch im Konstruktor von Unit erzeugen, dann müsste man aber Art und Port als string übergeben, also quasi
U[4] = new Unit("L", "A"). Vertagt auf später.
In der Klasse "Unit" werden jedoch die 'Parents' (RegulatedMotor, SensorModes ) genutzt.
Ist das noch halbwegs sauber programmiert, oder geht das nur zufällig?
Die Methode "move" bekommt die Geschwindigkeit übergeben, der Motor dreht, bis der Sensor auslöst.
Überraschenderweise: das geht auch
Jetzt sollen die aber gleichzeitig laufen!
Also geändert in
"public Unit(RegulatedMotor m, SensorModes s ) extends thread"
Erfolg: kein Fehler, aber da läuft auch nix parallel.
Ich vermute die Idee mit den while-Schleifen ist da kontraproduktiv...
Wie macht man sowas "richtig"?
Grüße
Werner
--------------------------------------
public static void main(String[] args)
Unit[] U = new Unit[2];
EV3LargeRegulatedMotor m11 = new EV3
LargeRegulatedMotor(MotorPort.A);
EV3ColorSensor s12 = new EV3ColorSensor(SensorPort.S2);
U[1]= new Unit(m11,s12);
EV3MediumRegulatedMotor m12 = new EV3
MediumRegulatedMotor(MotorPort.B);
EV3TouchSensor s11 = new EV3TouchSensor(SensorPort.S1);
U[2]= new Unit(m12,s11);
U[2].move(100);
U[2].stop();
U[1].move(700);
U[1].stop();
---------------------------------------
public class Unit {
private RegulatedMotor m;
private SensorModes s;
private float[] sample;
public Unit(RegulatedMotor m, SensorModes s ) {
this.m = m;
this.s = s;
}
public void move(int v) {
if (s.getClass().getName().indexOf("Color") > 0){
SampleProvider sp = s.getMode("ColorID");
sample = new float[sp.sampleSize()];
}
if (s.getClass().getName().indexOf( "Touch") > 0){
SampleProvider sp = s.getMode("Touch");
sample = new float[sp.sampleSize()];
}
m.backward();
m.setSpeed(v);
while (true) {
s.fetchSample(sample, 0);
System.out.println(sample[0]);
Delay.msDelay(100);
if (sample[0] == 3) break;
if (sample[0] == 1) break;
}
//m.setSpeed(0);
//m.waitComplete();
//Sound.beep();
//Delay.msDelay(1000);
}
public void stop() {
m.stop();
m.flt();
}
}