You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AccelerometerSensor.java 2.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package com.example.greenwatch.sensors;
  2. import androidx.lifecycle.MutableLiveData;
  3. import java.util.ArrayList;
  4. public class AccelerometerSensor {
  5. private MutableLiveData<Boolean> mAccelerometerAlarmDetected = new MutableLiveData<>();
  6. private static AccelerometerSensor accelerometerSensorInstance;
  7. private boolean accelerometerAlarmDetected;
  8. private ArrayList<Float> Gesamt_be;
  9. int arraySize = 500;
  10. int functionCallCount;
  11. float meanValue;
  12. float offsetValue;
  13. float thresholdValue;
  14. boolean startMeasuring;
  15. private AccelerometerSensor() {
  16. initGesamtBE();
  17. accelerometerAlarmDetected = false;
  18. setMutableLiveDataAccelerometerAlarmDetected();
  19. functionCallCount = 0;
  20. meanValue = 0.0f;
  21. offsetValue = 0.1f;
  22. thresholdValue = 0.15f;
  23. startMeasuring = false;
  24. }
  25. public static synchronized AccelerometerSensor getInstance() {
  26. if (accelerometerSensorInstance == null){
  27. accelerometerSensorInstance = new AccelerometerSensor();
  28. }
  29. return accelerometerSensorInstance;
  30. }
  31. public MutableLiveData<Boolean> getAccelerometerAlarmDetected() {
  32. setMutableLiveDataAccelerometerAlarmDetected();
  33. return mAccelerometerAlarmDetected;
  34. }
  35. private void setMutableLiveDataAccelerometerAlarmDetected() {
  36. mAccelerometerAlarmDetected.setValue(accelerometerAlarmDetected);
  37. }
  38. private void initGesamtBE() {
  39. Gesamt_be = new ArrayList<>(arraySize);
  40. for (int i = 0; i < arraySize; i++) {
  41. Gesamt_be.add(0.0f);
  42. }
  43. }
  44. public void addValueToGesamtBE(float newValue) {
  45. if (Gesamt_be.size() == arraySize) {
  46. Gesamt_be.remove(Gesamt_be.size() -1);
  47. }
  48. Gesamt_be.add(0, newValue);
  49. functionCallCount++;
  50. }
  51. public void meanValueCalculation() {
  52. for (float element : Gesamt_be) {
  53. meanValue += Math.abs(element);
  54. }
  55. meanValue = meanValue/arraySize;
  56. }
  57. public void calibrateAccelerometerSensor() {
  58. if (functionCallCount <= arraySize) {
  59. offsetValue = meanValue;
  60. }
  61. else {
  62. startMeasuring = true;
  63. }
  64. }
  65. public void checkAlarmCondition() {
  66. if (meanValue > (thresholdValue + offsetValue) && startMeasuring && !mAccelerometerAlarmDetected.getValue()) {
  67. mAccelerometerAlarmDetected.setValue(true);
  68. }
  69. else if (meanValue < (thresholdValue + offsetValue) && mAccelerometerAlarmDetected.getValue()){
  70. mAccelerometerAlarmDetected.setValue(false);
  71. }
  72. }
  73. public float getAccelerometerSensorMeanValue() {
  74. return meanValue;
  75. }
  76. }