I just got this cool Accelerometer from Pololu.com… I have been successful in interfacing it with my fez domino…
Driver
public class Accelerometer
{
public enum GSelect:sbyte
{
Hi,
Low
}
private static object syncRoot = new object();
private AnalogIn pinX, pinY, pinZ;
private GSelect gSel;
private static Accelerometer objAccMeter = null;
private Accelerometer()
{
}
public static Accelerometer Instance
{
get
{
lock (syncRoot)
{
if (objAccMeter == null)
throw new NullReferenceException("Object not initialized.");
else
return objAccMeter;
}
}
}
public static Accelerometer Initialize(FEZ_Pin.AnalogIn pPinX, FEZ_Pin.AnalogIn pPinY, FEZ_Pin.AnalogIn pPinZ, GSelect pGSel)
{
lock (syncRoot)
{
if (objAccMeter == null)
{
objAccMeter = new Accelerometer() {
pinX = new AnalogIn((AnalogIn.Pin)pPinX),
pinY = new AnalogIn((AnalogIn.Pin)pPinY),
pinZ = new AnalogIn((AnalogIn.Pin)pPinZ),
gSel = pGSel };
objAccMeter.pinX.SetLinearScale(0, 3300);
objAccMeter.pinY.SetLinearScale(0, 3300);
objAccMeter.pinZ.SetLinearScale(0, 3300);
}
return objAccMeter;
}
}
public void Read_G_Values(out float XVal, out float YVal, out float ZVal)
{
float divVal = (float)((gSel == GSelect.Hi) ? 206 : 800);
XVal = (float)((pinX.Read() - 1650) / (divVal));
YVal = (float)((pinY.Read() - 1650) / (divVal));
ZVal = (float)((pinZ.Read() - 1650) / (divVal));
}
public void Dump()
{
Microsoft.SPOT.Debug.Print("X: "+pinX.Read().ToString()+"\nY: "+pinY.Read().ToString()+"\nZ: "+pinZ.Read().ToString());
}
}
The Read_G_Vals method converts the incoming raw data into G values…
The board uses 3 Analog pins and is powered by Fez’s 3V3 pin. A G select ping on the board allows us to set the G-Range ±1.5G and ±6G.
Note: The driver is still crude and needs some work…