package lejos.nxt; /** * * Abstraction for a NXT output port. * */ public class MotorPort implements TachoMotorPort { int _id; int _pwmMode = PWM_FLOAT; // default to float mode private MotorPort(int id) { _id = id; } /** * MotorPort A. */ public static final MotorPort A = new MotorPort ('A'); /** * MotorPort B. */ public static final MotorPort B = new MotorPort ('B'); /** * MotorPort C. */ public static final MotorPort C = new MotorPort ('C'); /** * Low-level method to control a motor. * * @param power power from 0-100 * @param mode 1=forward, 2=backward, 3=stop, 4=float */ public void controlMotor(int power, int mode) { // Convert lejos power and mode to NXT power and mode controlMotorById(_id - 'A', (mode >= 3 ? 0 : (mode == 2 ? -power: power)) , (mode == 3 ? 1 : (mode == 4 ? 0 : _pwmMode))); } /** * Low-level method to control a motor. * * @param power power from -100 to =100 * @param mode 0=float, 1=brake */ synchronized static native void controlMotorById(int id, int power, int mode); /** * returns tachometer count */ public int getTachoCount() { return getTachoCountById(_id - 'A'); } public static native int getTachoCountById(int aMotor); /** *resets the tachometer count to 0; */ public void resetTachoCount() { resetTachoCountById( _id - 'A'); } public void setPWMMode(int mode) { _pwmMode = mode; } public static synchronized native void resetTachoCountById(int aMotor); }