package lego.explorer; import lego.lib.Motor; public class Drive { private static final int LEFT = 0, RIGHT = 1; private Motor motor[] = new Motor[2]; private int motorState[] = { Motor.STATE_OFF, Motor.STATE_OFF }; private int motorDuty[] = { 0, 0 }; public int[][] motorEMF = { new int[2], new int[2] }; public Drive(int motorLeft, int motorRight) { this.motor[LEFT] = new Motor(motorLeft); this.motor[RIGHT] = new Motor(motorRight); } public void write() { for(int i = 0; i < 2; i++) { motor[i].setMotorPercentage(motorState[i], true, motorDuty[i]); } } public void read() { Motor.synchronizedReadBackEMF(); for(int i = 0; i < 2; i++) { motor[i].updateSynchronizedNormalizedBackEMF(motorEMF[i]); } } public void goForward(int duty) { goTogether(duty, Motor.STATE_FORWARD); } public void goBackward(int duty) { goTogether(duty, Motor.STATE_BACKWARD); } public void stopMotor() { goTogether(75, Motor.STATE_BRAKE); } private void goTogether(int duty, int state) { for(int i = 0; i < 2; i++) { motorState[i] = state; motorDuty[i] = duty; } } public void set(int stateL, int dutyL, int stateR, int dutyR) { motorState[LEFT] = stateL; motorDuty[LEFT] = dutyL; motorState[RIGHT] = stateR; motorDuty[RIGHT] = dutyR; } public void dump() { for(int i = 0; i < 2; i++) { System.out.print("Motor "); if(i==LEFT) System.out.print("LEFT"); else System.out.print("RIGHT"); System.out.print("(state,duty,emf[0],emf[1]): ("); System.out.print(motorState[i]);System.out.print(", "); System.out.print(motorDuty[i]);System.out.print(", "); System.out.print(motorEMF[i][0]);System.out.print(", "); System.out.print(motorEMF[i][1]);System.out.println(")"); } } }