Additional API interfaces and implementations


	
This should get us up to speed on most of the API stuff, in this PR we've got interfaces and implementations for: 
* Motors 
* Gyroscopes 
* Distance Sensors 
 
The only thing missing from last years robot is the accelerometer 
 
It also adds the `LimitedMotor` composite class and JUnit test cases, which though similar in concept to `SolenoidWithPostion`, isn't worth trying to abstract. 
 
Aside from that I fixed some documentation and refactored Hardware so that similar factory methods are in nested classes. 
 
Some things that might be worth considering: 
* The `Hardware` and `Mock` prefixes are a little overkill, the names are different enough to prevent conflicts, and if not, they're in separate packages. 
* If we are going to rely on the accelerometer and gyroscope more heavily then last year, it might be beneficial to have some helper classes that allow us to attach units and direction to a value, e.g. `Angle`, `Velocity`, `Displacement`, etc. 
Instead of a simple method for logging, I'd suggest using java.util.logging.Logger. It would be good for new programmers to learn this class, because it is used far more widely in production code than System.out.

- Adam Gausmann
Sent from my iPad to my service's SMTP server over a network of routers, then back over the network to your service's IMAP server, then back over the network to your device.

> On Dec 10, 2014, at 4:30 PM, Zach Anderson <notifications@github.com> wrote:
> 
> In RobotFramework/src/org/frc4931/robot/component/LimitedMotor.java:
> 
> > +	 * Moves this {@link LimitedMotor} towards the high limit. This method
> > +	 * should be called once per loop until the movement is completed, otherwise
> > +	 * the watchdog will stop the movement.
> > +	 * 
> > +	 * @param speed
> > +	 *            the speed to move the underlying {@link Motor} at
> > +	 */
> > +	public void setHigh(double speed) {
> > +		// Disregard sign and clamp
> > +		speed = Math.abs(speed);
> > +		speed = Math.min(1.0, speed);
> > +		speed = Math.max(0.0, speed);
> > +
> > +		// Motor protection
> > +		if (!isHigh())
> > +			motor.setSpeed(1.0);
> I like the idea of having a log, not only for debugging but also for general robot events and match analysis, stats like max speed, distance traveled, etc.
> 
> File output shouldn't be too hard, we can have a static method in our main class to handle all logging information, both to the console and the file. That would also let us specifiy different levels of verbosity. The cRIO has an FTP server, once it's written to a file, it's just a matter of downloading to a connected computer.
> 
> —
> Reply to this email directly or view it on GitHub.
>