Advertisement
Guest User

Untitled

a guest
Mar 16th, 2021
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.53 KB | None | 0 0
  1.  
  2. import android.content.Context;
  3. import android.hardware.Sensor;
  4. import android.hardware.SensorEvent;
  5. import android.hardware.SensorEventListener;
  6. import android.hardware.SensorManager;
  7. import android.os.Bundle;
  8. import androidx.appcompat.app.AppCompatActivity;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.widget.TextView;
  12.  
  13. public class SensorsActivity extends AppCompatActivity implements SensorEventListener {
  14. private SensorManager sensorManager;
  15. private Sensor accelerometer;
  16. private Sensor gyroscopemeter;
  17. private Sensor magnetometer;
  18. private Sensor barometer;
  19. private int speed = SensorManager.SENSOR_DELAY_UI;
  20.  
  21. private float[] accelerometerVector = new float[3];
  22. private float[] magneticVector = new float[3];
  23. private float[] gyroVector = new float[3];
  24. private float pressure = 0;
  25.  
  26. private int acceleroCountDisplay = 0;
  27. private int gyroCountDisplay = 0;
  28. private int magnetoCountDisplay = 0;
  29.  
  30. private int acceleroAccuracy = 0;
  31. private int gyroAccuracy = 0;
  32. private int magnetoAccuracy = 0;
  33. private int pressureAccuracy = 0;
  34.  
  35. // Text UI
  36. private TextView currentAccX,
  37. currentAccY,
  38. currentAccZ,
  39. currentRotX,
  40. currentRotY,
  41. currentRotZ,
  42. currentMagX,
  43. currentMagY,
  44. currentMagZ,
  45. currentPressure,
  46. currentAccuracyAccelero,
  47. currentAccuracyGyro,
  48. currentAccuracyMagneto,
  49. currentAccuracyPressure;
  50.  
  51. // Button UI
  52. private Button btnFinishActivity;
  53.  
  54. @Override
  55. protected void onCreate(Bundle savedInstanceState) {
  56. super.onCreate(savedInstanceState);
  57. setContentView(R.layout.activity_sensors);
  58.  
  59. // Init Ui
  60. initializeUi();
  61.  
  62. // Start Sensors
  63. startSensors();
  64.  
  65. // Finish The Activity
  66. btnFinishActivity.setOnClickListener(new View.OnClickListener() {
  67. @Override
  68. public void onClick(View view) {
  69. finish();
  70. }
  71. });
  72. }
  73.  
  74. // Init UI
  75. private void initializeUi() {
  76. currentAccX = findViewById(R.id.currentAccX);
  77. currentAccY = findViewById(R.id.currentAccY);
  78. currentAccZ = findViewById(R.id.currentAccZ);
  79.  
  80. currentRotX = findViewById(R.id.currentRotX);
  81. currentRotY = findViewById(R.id.currentRotY);
  82. currentRotZ = findViewById(R.id.currentRotZ);
  83.  
  84. currentMagX = findViewById(R.id.currentMagX);
  85. currentMagY = findViewById(R.id.currentMagY);
  86. currentMagZ = findViewById(R.id.currentMagZ);
  87.  
  88. currentPressure = findViewById(R.id.currentPressure);
  89.  
  90. currentAccuracyAccelero = findViewById(R.id.currentAccuracyAccelero);
  91. currentAccuracyGyro = findViewById(R.id.currentAccuracyGyro);
  92. currentAccuracyMagneto = findViewById(R.id.currentAccuracyMagneto);
  93. currentAccuracyPressure = findViewById(R.id.currentAccuracyPressure);
  94.  
  95. btnFinishActivity = findViewById(R.id.back_to_previous_activity);
  96. }
  97.  
  98. // Start Sensors
  99. private void startSensors() {
  100. sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
  101.  
  102. accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  103. gyroscopemeter = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
  104. magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
  105. barometer = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
  106.  
  107. sensorManager.registerListener(this, accelerometer, speed);
  108. sensorManager.registerListener(this, gyroscopemeter, speed);
  109. sensorManager.registerListener(this, magnetometer, speed);
  110. sensorManager.registerListener(this, barometer, speed);
  111. }
  112.  
  113. // Display Value
  114. private void displayCurrentValues() {
  115. currentAccX.setText(String.format("%.3f", accelerometerVector[0]));
  116. currentAccY.setText(String.format("%.3f", accelerometerVector[1]));
  117. currentAccZ.setText(String.format("%.3f", accelerometerVector[2]));
  118.  
  119. currentRotX.setText(String.format("%.3f", gyroVector[0]));
  120. currentRotY.setText(String.format("%.3f", gyroVector[1]));
  121. currentRotZ.setText(String.format("%.3f", gyroVector[2]));
  122.  
  123. currentMagX.setText(String.format("%.3f", magneticVector[0]));
  124. currentMagY.setText(String.format("%.3f", magneticVector[1]));
  125. currentMagZ.setText(String.format("%.3f", magneticVector[2]));
  126.  
  127. currentPressure.setText(String.format("%.2f", pressure));
  128.  
  129. currentAccuracyAccelero.setText(getAccuracy(acceleroAccuracy));
  130. currentAccuracyGyro.setText(getAccuracy(gyroAccuracy));
  131. currentAccuracyMagneto.setText(getAccuracy(magnetoAccuracy));
  132. currentAccuracyPressure.setText(getAccuracy(pressureAccuracy));
  133. }
  134.  
  135. @Override
  136. public void onAccuracyChanged(Sensor sensor, int accuracy) {}
  137.  
  138. @Override
  139. public void onSensorChanged(SensorEvent event) {
  140. switch (event.sensor.getType()) {
  141. case Sensor.TYPE_ACCELEROMETER:
  142. accelerometerVector[0] = event.values[0];
  143. accelerometerVector[1] = event.values[1];
  144. accelerometerVector[2] = event.values[2];
  145. acceleroAccuracy = event.accuracy;
  146. acceleroCountDisplay++;
  147. break;
  148. case Sensor.TYPE_GYROSCOPE:
  149. gyroVector[0] = event.values[0];
  150. gyroVector[1] = event.values[1];
  151. gyroVector[2] = event.values[2];
  152. gyroAccuracy = event.accuracy;
  153. gyroCountDisplay++;
  154. break;
  155. case Sensor.TYPE_MAGNETIC_FIELD:
  156. magneticVector[0] = event.values[0];
  157. magneticVector[1] = event.values[1];
  158. magneticVector[2] = event.values[2];
  159. magnetoAccuracy = event.accuracy;
  160. magnetoCountDisplay++;
  161. break;
  162. case Sensor.TYPE_PRESSURE:
  163. pressure = event.values[0];
  164. pressureAccuracy = event.accuracy;
  165. break;
  166. default:
  167. return;
  168. }
  169. if (acceleroCountDisplay + gyroCountDisplay + magnetoCountDisplay >= 15) {
  170. displayCurrentValues();
  171. acceleroCountDisplay = 0;
  172. gyroCountDisplay = 0;
  173. magnetoCountDisplay = 0;
  174. }
  175. }
  176.  
  177. // Get Sensors Accuracy
  178. private String getAccuracy(int accuracyValue) {
  179. switch (accuracyValue) {
  180. case 0:
  181. return "UNRELIABLE";
  182. case 1:
  183. return "LOW";
  184. case 2:
  185. return "MEDIUM";
  186. case 3:
  187. return "HIGH";
  188. case -1:
  189. return "NO CONTACT";
  190. default:
  191. return null;
  192. }
  193. }
  194.  
  195. // onResume() register the accelerometer for listening the events
  196. protected void onResume() {
  197. super.onResume();
  198. sensorManager.registerListener(this, accelerometer, speed);
  199. sensorManager.registerListener(this, gyroscopemeter, speed);
  200. sensorManager.registerListener(this, magnetometer, speed);
  201. sensorManager.registerListener(this, barometer, speed);
  202. }
  203.  
  204. // onPause() unregister the accelerometer for stop listening the events
  205. protected void onPause() {
  206. super.onPause();
  207. sensorManager.unregisterListener(this);
  208. }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement