package de.otto.roborace.controller; import de.otto.roborace.controller.EventLoop.EventLoopListener; import de.otto.roborace.model.DataModel; import de.otto.roborace.model.Steering; import lejos.hardware.motor.Motor; import lejos.hardware.motor.NXTRegulatedMotor; import java.util.Date; /** * Created by luca on 27.03.15. */ public class SteeringController implements EventLoopListener { private NXTRegulatedMotor motor; private Steering steering = Steering.NONE; private long timeOfLastSteering = 0; private DataModel dataModel; public SteeringController(NXTRegulatedMotor motor, DataModel dataModel) { this.motor = motor; this.dataModel = dataModel; motor.setSpeed(75); } @Override public void process() { // detect steering change if(dataModel.getDesiredSteeringDirection() != null) { //System.out.println("process steering direction: " + dataModel.getDesiredSteeringDirection()); turn(dataModel.getDesiredSteeringDirection()); dataModel.resetSteering(); } Long now = System.currentTimeMillis(); if(now - timeOfLastSteering > 2000) { motor.flt(); } else { switch(steering) { case LEFT: motor.forward(); break; case RIGHT: motor.backward(); break; case NONE: motor.stop(); break; default: motor.stop(); } } } public void turn(Steering steering) { this.steering = steering; timeOfLastSteering = System.currentTimeMillis(); } }