package lejos.nxt.addon;
import lejos.robotics.DCMotor;
/*
* WARNING: THIS CLASS IS SHARED BETWEEN THE classes AND pccomms PROJECTS.
* DO NOT EDIT THE VERSION IN pccomms AS IT WILL BE OVERWRITTEN WHEN THE PROJECT IS BUILT.
*/
/**
* Motor class for PFMate class
*
* @author Michael Smith <mdsmitty@gmail.com>
*
**/
public class PFMateMotor implements DCMotor {
private PFMate receiver;
private int operReg, speedReg;
private byte [] buffer = new byte[1];
private final static byte FLT = 0, FORWARD = 1, BACKWARD = 2, STOP = 3;
private boolean moving = false;
/**
* @param recever PFMate object reference
* @param operReg Motor register
* @param speedReg Speed Register
*/
PFMateMotor(PFMate recever, int operReg, int speedReg){
this.receiver = recever;
this.operReg = operReg;
this.speedReg = speedReg;
}
//motor operations
/**
* Floats the motor
*/
public void flt(){
receiver.sendData(operReg, FLT);
moving = false;
}
/**
* Runs the motor forward
*
*/
public void forward(){
receiver.sendData(operReg, FORWARD);
receiver.sendData(0x41, (byte)0x47);
moving = true;
}
/**
* Runs the motor backward
*
*/
public void backward(){
receiver.sendData(operReg, BACKWARD);
receiver.sendData(0x41, (byte)0x47);
moving = true;
}
/**
* Stops the Motor
*
*/
public void stop(){
receiver.sendData(operReg, STOP);
receiver.sendData(0x41, (byte)0x47);
moving = false;
}
/**
* Sets the motors speed
* @param speed 1 = 7
*/
public void setSpeed(int speed){
if(speed < 1) speed = 1;
if (speed > 7) speed = 7;
receiver.sendData(speedReg, (byte) speed);
receiver.sendData(0x41, (byte)0x47);
}
/**
* returns the speed
* @return 1 - 7
*/
public int getSpeed(){
receiver.getData(speedReg, buffer, 1);
return buffer[0];
}
/**
* Determines if motor is floating this is based on what the receiver has in its registers
* @return boolean
*/
public boolean isFlt(){
receiver.getData(operReg, buffer, 1);
if(buffer[0]== FLT) return true;
return false;
}
/**
* Determines if motor is moving forward this is based on what the receiver has in its registers
* @return boolean
*/
public boolean isForward(){
receiver.getData(operReg, buffer, 1);
if(buffer[0]== FORWARD) return true;
return false;
}
/**
* Determines if motor is moving backwards this is based on what the receiver has in its registers
* @return boolean
*/
public boolean isBackward(){
receiver.getData(operReg, buffer, 1);
if(buffer[0]== BACKWARD) return true;
return false;
}
/**
* Determines if motor is stopped this is based on what the receiver has in its registers
* @return boolean
*/
public boolean isStop(){
receiver.getData(operReg, buffer, 1);
if(buffer[0]== STOP) return true;
return false;
}
public boolean isMoving() {
return moving;
}
}