001/*----------------------------------------------------------------------------*/ 002/* Copyright (c) FIRST 2014-2017. All Rights Reserved. */ 003/* Open Source Software - may be modified and shared by FRC teams. The code */ 004/* must be accompanied by the FIRST BSD license file in the root directory of */ 005/* the project. */ 006/*----------------------------------------------------------------------------*/ 007 008package edu.wpi.first.wpilibj; 009 010import edu.wpi.first.wpilibj.hal.AccelerometerJNI; 011import edu.wpi.first.wpilibj.hal.FRCNetComm.tResourceType; 012import edu.wpi.first.wpilibj.hal.HAL; 013import edu.wpi.first.wpilibj.interfaces.Accelerometer; 014import edu.wpi.first.wpilibj.livewindow.LiveWindow; 015import edu.wpi.first.wpilibj.livewindow.LiveWindowSendable; 016import edu.wpi.first.wpilibj.tables.ITable; 017 018/** 019 * Built-in accelerometer. 020 * 021 * <p>This class allows access to the roboRIO's internal accelerometer. 022 */ 023public class BuiltInAccelerometer implements Accelerometer, LiveWindowSendable { 024 /** 025 * Constructor. 026 * 027 * @param range The range the accelerometer will measure 028 */ 029 public BuiltInAccelerometer(Range range) { 030 setRange(range); 031 HAL.report(tResourceType.kResourceType_Accelerometer, 0, 0, "Built-in accelerometer"); 032 LiveWindow.addSensor("BuiltInAccel", 0, this); 033 } 034 035 /** 036 * Constructor. The accelerometer will measure +/-8 g-forces 037 */ 038 public BuiltInAccelerometer() { 039 this(Range.k8G); 040 } 041 042 @Override 043 public void setRange(Range range) { 044 AccelerometerJNI.setAccelerometerActive(false); 045 046 switch (range) { 047 case k2G: 048 AccelerometerJNI.setAccelerometerRange(0); 049 break; 050 case k4G: 051 AccelerometerJNI.setAccelerometerRange(1); 052 break; 053 case k8G: 054 AccelerometerJNI.setAccelerometerRange(2); 055 break; 056 case k16G: 057 default: 058 throw new IllegalArgumentException(range + " range not supported (use k2G, k4G, or k8G)"); 059 060 } 061 062 AccelerometerJNI.setAccelerometerActive(true); 063 } 064 065 /** 066 * The acceleration in the X axis. 067 * 068 * @return The acceleration of the roboRIO along the X axis in g-forces 069 */ 070 @Override 071 public double getX() { 072 return AccelerometerJNI.getAccelerometerX(); 073 } 074 075 /** 076 * The acceleration in the Y axis. 077 * 078 * @return The acceleration of the roboRIO along the Y axis in g-forces 079 */ 080 @Override 081 public double getY() { 082 return AccelerometerJNI.getAccelerometerY(); 083 } 084 085 /** 086 * The acceleration in the Z axis. 087 * 088 * @return The acceleration of the roboRIO along the Z axis in g-forces 089 */ 090 @Override 091 public double getZ() { 092 return AccelerometerJNI.getAccelerometerZ(); 093 } 094 095 @Override 096 public String getSmartDashboardType() { 097 return "3AxisAccelerometer"; 098 } 099 100 private ITable m_table; 101 102 @Override 103 public void initTable(ITable subtable) { 104 m_table = subtable; 105 updateTable(); 106 } 107 108 @Override 109 public void updateTable() { 110 if (m_table != null) { 111 m_table.putNumber("X", getX()); 112 m_table.putNumber("Y", getY()); 113 m_table.putNumber("Z", getZ()); 114 } 115 } 116 117 @Override 118 public ITable getTable() { 119 return m_table; 120 } 121 122 @Override 123 public void startLiveWindowMode() { 124 } 125 126 @Override 127 public void stopLiveWindowMode() { 128 } 129}