package lejos.nxt.addon;
import lejos.nxt.*;
/*
* 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.
*/
/**
* This class has been designed to manage the device
* MSC8, Mindsensors NXT Servo which manages up to 8 RC Servos.
*
* For example, do:
*
* <code>msc.servo1.setAngle(angle)</code>
*
* to set the angle of the servo at location 1.
*
* Many thanks to Luis Bunuel (bunuel66@hotmail.com) in Testing process
*
* @author Juan Antonio Brenha Moral
*
*/
public class MSC extends I2CSensor {
public static final byte NXTSERVO_ADDRESS = (byte)0x58;
public static final byte MSC8_VBATT = 0x41;//The I2C Register to read the battery
/**
* Servo at location 1
*/
public MServo servo1;
/**
* Servo at location 2
*/
public MServo servo2;
/**
* Servo at location 3
*/
public MServo servo3;
/**
* Servo at location 4
*/
public MServo servo4;
/**
* Servo at location 5
*/
public MServo servo5;
/**
* Servo at location 6
*/
public MServo servo6;
/**
* Servo at location 7
*/
public MServo servo7;
/**
* Servo at location 8
*/
public MServo servo8;
private MServo[] arrServo; //ServoController manages up to 8 RC Servos
//I2C
private SensorPort portConnected;
/**
*
* Constructor
*
* @param port the NXTServo is connected to
*
*/
public MSC(SensorPort port){
super(port);
port.setType(TYPE_LOWSPEED_9V);
this.setAddress(NXTSERVO_ADDRESS);
portConnected = port;
servo1 = new MServo(portConnected,1);
servo2 = new MServo(portConnected,2);
servo3 = new MServo(portConnected,3);
servo4 = new MServo(portConnected,4);
servo5 = new MServo(portConnected,5);
servo6 = new MServo(portConnected,6);
servo7 = new MServo(portConnected,7);
servo8 = new MServo(portConnected,8);
arrServo = new MServo[8];
arrServo[0] = servo1;
arrServo[1] = servo2;
arrServo[2] = servo3;
arrServo[3] = servo4;
arrServo[4] = servo5;
arrServo[5] = servo6;
arrServo[6] = servo7;
arrServo[7] = servo8;
}
/**
* Method to get an RC Servo in from the NXTServo
*
* @param location location of the servo (from 1 to 8)
* @return the MServo object
*
*/
public MServo getServo(int location){
return arrServo[location-1];
}
/**
* Read the battery voltage data from
* NXTServo module (in millivolts)
*
* @return the battery voltage in millivolts
*/
public int getBattery(){
byte[] bufReadResponse= new byte[1];
getData(MSC8_VBATT, bufReadResponse, 1);
// 37 is calculated from 4700 mv /128
return(37*(0xFF & bufReadResponse[0]));
}
}