Ursprungsmitteilung
Thema Nachlaufen bei MediumMotor im DirektMode über WIFI 
Autor Andre 
Eingangsdatum 2019-12-06 23:22:48.0 
Mitteilung Hallo zusammen,

ich erlebe gerade ein seltsames Phänomen. Ich benutze den direktMode um einen
kleinen Rover fernzusteuern. Die Steuerung erfolgt über KeyListener.
Die Ansteuerung der großen Motoren über gear erfolgt problemlos. Den MediumMotor
benutze ich als eine Art Greifer. Nach der Ansteuerung und dem eigentlichen Stop zuckt der Motor vor und zurück. Die Methode sieht folgendermaßen aus:

private static void gripperUp() {
gripper.setSpeed(gripperSpeed);
while (gripper.getMotorCount() <= 0) {
System.out.println(gripper.getMotorCount());
gripper.forward();
}
gripper.stop();
}

private static void gripperDown() {
gripper.setSpeed(gripperSpeed);
while (gripper.getMotorCount() > -90) {
System.out.println(gripper.getMotorCount());
gripper.backward();
}
gripper.stop();
}


Die Auslösung:

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == 38) // Arrow up
forward();
if (e.getKeyCode() == 40) // Arrow down
backward();
if (e.getKeyCode() == 37) // Arrow left
circleLeftStart();
if (e.getKeyCode() == 39) // Arrow right
circleRightStart();
if (e.getKeyCode() == 65) // a
gripperUp();
if (e.getKeyCode() == 68) // d
gripperDown();
}

Kennt jemand das Problem?
Wäre froh über jede Hilfe. 
 
      
Antworten
Thema Motor-Ansteuerung 
Autor Jarka 
Eingangsdatum 2019-12-08 14:40:34.0 
Mitteilung Hallo Andre
Es ist etwas schwierig ohne die passende Hardware das Problem zu lösen. Etwas unlogisch scheinen mir aber die beiden while-Bedingungen
while (gripper.getMotorCount() <= 0)
und
while (gripper.getMotorCount() > -90)
denn wenn der Count > -90 ist ist er gleichzeitig auch <= 0. Das kann doch nicht gehen.

Du kannst auch versuchen die Methoden rotateTo() und continueTo() zu verwenden:

public GenericMotor rotateTo(int count,
boolean blocking)

Sets the rotation counter to zero and rotates the motor until the given count is reached. If count is negative, the motor turns backwards. If blocking = false, the method returns immediately. You may register a motion listener with addMotionListener() to get a callback when the count is reached and the motor stops. If blocking = true, the method returns when the count is reached and the motor stops.

public GenericMotor continueTo(int count,
boolean blocking)

Same as rotateTo(int count, boolean blocking), but the rotation counter is not set to zero. The given count is the absolute value of the rotation counter to be reached. If the current count is higher than the count to reach, the motor turns backward.

Wenn du den Motor mit einer Tastaturtaste steuerst, könntest du einfache auch forward() bei Taste a, backward() bei Taste b, und stop() bei Taste c verwenden.

 
 
Thema Nachlaufen bei MediumMotor im DirektMode über WIFI 
Autor Andre 
Eingangsdatum 2019-12-09 22:18:38.0 
Mitteilung Hallo Jarka,

vielen Dank für deine Hilfe. Du hast recht die Schleifen machen keinen Sinn so. ich hab die rotateTo Methode verwendet.

private static void gripperUp() {
gripper.setSpeed(gripperSpeed);
gripper.rotateTo(-90);
gripper.stop();
}

private static void gripperDown() {
gripper.setSpeed(gripperSpeed);
gripper.rotateTo(90);
gripper.stop();
}

Das Problem besteht aber weiterhin. Ich habe die Vermutung, dass nach dem Beenden der Rotation der Motor weiter unter Spannung steht. Ich kann ihn zu mindest nicht mit der Hand bewegen. Bevor ich die Bewegung ausgelöst habe ist das aber noch möglich. Das sollte doch das Stop Kommando eigentlich verhindern. Bei den beiden großen Motoren als Gear ist nach dem Stop auch ein Freilauf möglich. Ein wechsel zur NXTMotor Klasse hat auch keinen Erfolg gebracht.

Vielen Dank, Grüße André