package engineControl; import lejos.nxt.Button; import lejos.nxt.Motor; import lejos.nxt.Sound; import lejos.robotics.navigation.TachoPilot; public class Nxt23_Engine { //Konstanten für die Bewegungen //Wert für ein Feld final private float ROTATE_BACKWARD_AND_FORWARD = -3.03f; //Wert für Hoch- und Runterbewegung final private int ROTATE_UP_AND_DOWN = 260; //Motoren-deklaration private final TachoPilot Motors_back_and_forward = new TachoPilot(3.2f, 11.4f, Motor.A, Motor.C); private final Motor Motor_up_and_down = Motor.B; //Koordinaten (1-8) von und bis zu welchem Feld private int rowFrom; private int rowTo; //Zielreihe private int target_row; //Konstante für Anzahl der Felder vom Startpunkt des Roboters private final int FIELDS_FROM_START = 5; //Speichert bereits zurückgelegte Strecke um wieder zu INIT zurückzukehren private int movedDistance_forward_backward; private int distance_to_init; //Verbindung auf NXT-Block private ConnAg con; /* * Standard Konstruktor */ public Nxt23_Engine() { this.movedDistance_forward_backward = 0; this.distance_to_init = 0; this.Motor_up_and_down.setSpeed(150); this.Motors_back_and_forward.setSpeed(200); } /* * main methode läuft als schleife auf nxt solange bis gameExists false ist * * */ public static void main(String args[]) { //Erstelle Objekt der Bewegungsklasse Nxt23_Engine t1 = new Nxt23_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; } int coordinate = which_move/10; which_move %= 10 ; switch(which_move) { case 1: System.out.println("Bewege mich zur Reihe: "+coordinate); t1.rowFrom = coordinate+t1.FIELDS_FROM_START; if(t1.moveToRowFrom()) t1.con.sendInt(1); break; /*case 2: System.out.println("Bewege mich zur 'Zu-Reihe': "+coordinate); t1.rowTo = coordinate+t1.FIELDS_FROM_START; if(t1.moveToRowTo()) t1.con.sendInt(1); break;*/ case 3: System.out.println("Senke Greifarm"); if(t1.moveDown()) t1.con.sendInt(1); break; case 4: System.out.println("Fahre Greifarm wieder hoch"); if(t1.moveUp()) 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; } } } boolean moveDown() { this.Motor_up_and_down.rotate(-ROTATE_UP_AND_DOWN); return true; } boolean moveUp() { this.Motor_up_and_down.rotate(ROTATE_UP_AND_DOWN); return true; } boolean moveToRowFrom() { int distance = this.rowFrom - this.movedDistance_forward_backward; this.Motors_back_and_forward.travel(distance*ROTATE_BACKWARD_AND_FORWARD); this.movedDistance_forward_backward += distance; return true; } boolean moveToRowTo() { int distance = this.rowTo - this.movedDistance_forward_backward; this.Motors_back_and_forward.travel(distance*ROTATE_BACKWARD_AND_FORWARD); this.movedDistance_forward_backward += distance; return true; } boolean moveToInit() { this.Motors_back_and_forward.travel((-this.movedDistance_forward_backward*ROTATE_BACKWARD_AND_FORWARD)+0.25f); this.movedDistance_forward_backward = 0; return true; } }