Lok24
18.12.2016, 15:44

Als Antwort auf den Beitrag von Lok24

Re: Hilfe bei JAVA für leJOS gesucht

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();

}

}



Gesamter Thread: