package engineControl;
import lejos.nxt.Button;
import lejos.nxt.Motor;
import lejos.robotics.navigation.TachoPilot;
public class Nxt25_Engine {
final private int ROTATE_FOR_GRABBING = 90;
final private float ROTATE_LEFT_RIGHT = 29.87f;
private final Motor Motor_grabbing = Motor.C;
private final TachoPilot Motor_left_right = new TachoPilot(3.2f, 11.4f, Motor.A, Motor.B);
//Zielfeld
private int target_column;
//Verbindung auf NXT-Block
private ConnAg con;
//Feld über dem der Roboter sich im moment befindet
private int current_field;
Nxt25_Engine() {
this.current_field = 0;
this.Motor_left_right.setSpeed(210);
Motor_grabbing.setSpeed(150);
}
public static void main(String args[]) {
//Erstelle Objekt der Bewegungsklasse
Nxt25_Engine t1 = new Nxt25_Engine();
boolean gameExists = true;
//Erstelle ConnAg Objekt, Warte auf Verbindung
t1.con = new ConnAg();
//While schleife solange spiel existiert
while(gameExists) {
//Variable, welche die Koordinate und die Art der Bewegung enthält muss noch aufgeteilt werden
System.out.println("Warte auf Eingabe...");
int which_move = t1.con.getInt();
System.out.println("Eingabe ist angekommen: "+which_move);
if (which_move == -1) {
System.out.println("Verbindung wurde getrennt oder Übertragung ist Fehlerhaft");
System.out.println("Betätige beliebigen Knopf um Programm zu beenden.");
Button.waitForPress();
gameExists = false;
}
t1.target_column = which_move/10 -1;
which_move %= 10 ;
switch(which_move) {
case 1:
System.out.println("Bewege mich zur Spalte: "+t1.target_column);
if(t1.moveToColumn()) t1.con.sendInt(1);
break;
/*case 2:
System.out.println("Bewege mich zur 'Zu-Spalte': "+coordinate);
t1.columnTo = coordinate;
if(t1.moveToColumnTo()) t1.con.sendInt(1);
break;*/
case 3:
System.out.println("Greife Figur");
if(t1.grabfigure()) t1.con.sendInt(1);
break;
case 4:
System.out.println("Lasse Figur los");
if(t1.dropfigure()) t1.con.sendInt(1);
break;
case 5:
System.out.println("Fahre zum Start");
if(t1.moveToInit()) t1.con.sendInt(1);
break;
default:
System.out.println("Irgendwas ist schief gelaufen "+which_move);
break;
}
}
}
/*
* Methode zur Links-Rechts-Bewegung
*/
boolean moveToColumn() {
//Distanz welche er zurücklegen soll, Zielfeld-momentanes Feld
int distance = this.target_column - this.current_field;
//Führe Bewegung aus
this.Motor_left_right.travel(distance*(this.ROTATE_LEFT_RIGHT/7));
//derzeitiges Feld wird gespeichert
this.current_field = this.target_column;
return true;
}
boolean grabfigure() {
this.Motor_grabbing.rotate(ROTATE_FOR_GRABBING);
return true;
}
boolean dropfigure() {
this.Motor_grabbing.rotate(-ROTATE_FOR_GRABBING);
return true;
}
boolean moveToInit() {
this.Motor_left_right.travel(-this.current_field*(this.ROTATE_LEFT_RIGHT/7));
this.current_field = 0;
return true;
}
}