package com.example.greenwatch.sensors; import androidx.lifecycle.MutableLiveData; import java.util.ArrayList; public class AccelerometerSensor { private MutableLiveData mAccelerometerAlarmDetected = new MutableLiveData<>(); private static AccelerometerSensor accelerometerSensorInstance; private boolean accelerometerAlarmDetected; private ArrayList Gesamt_be; int arraySize = 500; int functionCallCount; float meanValue; float offsetValue; float thresholdValue; boolean startMeasuring; private AccelerometerSensor() { initGesamtBE(); accelerometerAlarmDetected = false; setMutableLiveDataAccelerometerAlarmDetected(); functionCallCount = 0; meanValue = 0.0f; offsetValue = 0.1f; thresholdValue = 0.15f; startMeasuring = false; } public static synchronized AccelerometerSensor getInstance() { if (accelerometerSensorInstance == null){ accelerometerSensorInstance = new AccelerometerSensor(); } return accelerometerSensorInstance; } public MutableLiveData getAccelerometerAlarmDetected() { setMutableLiveDataAccelerometerAlarmDetected(); return mAccelerometerAlarmDetected; } private void setMutableLiveDataAccelerometerAlarmDetected() { mAccelerometerAlarmDetected.setValue(accelerometerAlarmDetected); } private void initGesamtBE() { Gesamt_be = new ArrayList<>(arraySize); for (int i = 0; i < arraySize; i++) { Gesamt_be.add(0.0f); } } public void addValueToGesamtBE(float newValue) { if (Gesamt_be.size() == arraySize) { Gesamt_be.remove(Gesamt_be.size() -1); } Gesamt_be.add(0, newValue); functionCallCount++; } public void meanValueCalculation() { for (float element : Gesamt_be) { meanValue += Math.abs(element); } meanValue = meanValue/arraySize; } public void calibrateAccelerometerSensor() { if (functionCallCount <= arraySize) { offsetValue = meanValue; } else { startMeasuring = true; } } public void checkAlarmCondition() { if (meanValue > (thresholdValue + offsetValue) && startMeasuring && !mAccelerometerAlarmDetected.getValue()) { mAccelerometerAlarmDetected.setValue(true); } else if (meanValue < (thresholdValue + offsetValue) && mAccelerometerAlarmDetected.getValue()){ mAccelerometerAlarmDetected.setValue(false); } } public float getAccelerometerSensorMeanValue() { return meanValue; } }