/// <summary> /// Creates a new <see cref="ADXL362"/> with the specified <see cref="SPI.Port">Port</see> /// and <see cref="AccelerometerRange">Range</see>. /// </summary> /// <param name="port">The SPI Port the accelerometer is connected to.</param> /// <param name="range">The range that the accelerometer will measure.</param> public ADXL362(SPI.Port port, AccelerometerRange range) { m_spi = new SPI(port); m_spi.SetClockRate(3000000); m_spi.SetMSBFirst(); m_spi.SetSampleDataOnRising(); m_spi.SetClockActiveHigh(); m_spi.SetChipSelectActiveLow(); byte[] commands = new byte[] { RegRead, PartIdRegister, 0, }; m_spi.Transaction(commands, commands, 3); if (commands[2] != 0xF2) { DriverStation.ReportError("Could not find ADXL362", false); m_gsPerLSB = 0.0; return; } AccelerometerRange = range; commands[0] = RegWrite; commands[1] = PowerCtlRegister; commands[2] = PowerCtlRegister | PowerCtl_UltraLowNoise; m_spi.Write(commands, 3); Report(ResourceType.kResourceType_ADXL362, (byte)port); LiveWindow.LiveWindow.AddSensor("ADXL362", port.ToString(), this); }
/// <summary> /// Constructor /// </summary> /// <param name="port">The <see cref="SPI.Port"/> that the gyro is connected to.</param> public ADXRS450_Gyro(SPI.Port port) { m_spi = new SPI(port); if (RobotBase.IsSimulation) { m_spi.InitAccumulator(SamplePeriod, 0x20000000, 4, 0x0c000000, 0x04000000, 10, 16, true, true); m_spi.ResetAccumulator(); return; } m_spi.SetClockRate(3000000); m_spi.SetMSBFirst(); m_spi.SetSampleDataOnRising(); m_spi.SetClockActiveHigh(); m_spi.SetChipSelectActiveLow(); // Validate the part ID if ((ReadRegister(PIDRegister) & 0xff00) != 0x5200) { m_spi.Dispose(); m_spi = null; DriverStation.ReportError("could not find ADXRS450 gyro on SPI port " + port.ToString(), false); return; } m_spi.InitAccumulator(SamplePeriod, 0x20000000, 4, 0x0c000000, 0x04000000, 10, 16, true, true); Calibrate(); Report(ResourceType.kResourceType_ADXRS450, (byte)port); LiveWindow.LiveWindow.AddSensor("ADXRS450_Gyro", port.ToString(), this); }