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.

MySensor.java 3.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.feemers.android.fftdrawer.SignalProcessing;
  2. import android.hardware.Sensor;
  3. import android.hardware.SensorEvent;
  4. import android.hardware.SensorEventListener;
  5. import android.hardware.SensorManager;
  6. import android.util.Log;
  7. public class MySensor extends SensorImpl implements SensorEventListener {
  8. private SensorManager sensorManager;
  9. private Sensor m_sensor;
  10. private int sensorType = Sensor.TYPE_ACCELEROMETER;
  11. private long time_former_value;
  12. private long time_current_value;
  13. private int sample_cnt;
  14. public MySensor()
  15. {
  16. m_sensor = null;
  17. time_former_value = 0;
  18. time_current_value = 0;
  19. sample_cnt = 0;
  20. }
  21. @Override
  22. public void onSensorChanged(SensorEvent event)
  23. {
  24. //Log.d("MySensor","onSensorChanged()\n");
  25. // Calculating the sample rate
  26. time_current_value = System.currentTimeMillis();
  27. long period = time_current_value - time_former_value;
  28. if ((time_former_value != 0) && (period != 0)) {
  29. m_sampleRate = (double) (1.0 / period) * 1000.0; // in Hz
  30. m_detector.setSampleRate(m_sampleRate);
  31. }
  32. /*if (sample_cnt == 100) //TODO: Delete this part before final use (inc. sample_cnt) -> only meant for debugging
  33. {
  34. Log.d("MySensor", "m_sampleRate:" + m_sampleRate + "\n");
  35. Log.d("MySensor", "time_current_value:" + time_current_value + "\n");
  36. Log.d("MySensor", "time_former_value:" + time_former_value + "\n");
  37. Log.d("MySensor", "currentTimeMillis:" + System.currentTimeMillis() + "\n");
  38. Log.d("MySensor", "period:" + period + "\n");
  39. sample_cnt = 0;
  40. }*/
  41. time_former_value = time_current_value;
  42. // Calculating the acceleration
  43. double acceleration = (Math.sqrt(event.values[0] * event.values[0] + event.values[1] * (event.values[1] + event.values[2] * event.values[2]))) - 9.81;
  44. m_detector.onNewSample(acceleration);
  45. sample_cnt++;
  46. }
  47. @Override
  48. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  49. Log.d("MySensor","onAccuracyChanged()\n");
  50. }
  51. @Override
  52. public double getSampleRate() {
  53. return m_sampleRate;
  54. }
  55. @Override
  56. public void startSampling() {
  57. if (m_sensor != null) {
  58. if (sensorManager.registerListener(this, m_sensor, SensorManager.SENSOR_DELAY_GAME)) {
  59. Log.d("MySensor", "Bei Sensor angemeldet.\n");
  60. } else {
  61. Log.d("MySensor", "Kann dem Sensor keinen Beobachter hinzufügen\n");
  62. }
  63. }
  64. }
  65. @Override
  66. public void stopSampling() {
  67. if (m_sensor != null) {
  68. sensorManager.unregisterListener(this, m_sensor);
  69. Log.d("MySensor","Von Sensor abgemeldet.\n");
  70. }
  71. }
  72. public void connectSensorManager(SensorManager sensorManager){
  73. this.sensorManager = sensorManager;
  74. if (sensorManager.getSensorList(sensorType).size() == 0) {
  75. Log.d("MySensor", "Es gibt den Sensor nicht.\n");
  76. m_sensor = null;
  77. } else {
  78. m_sensor = sensorManager.getSensorList(sensorType).get(0);
  79. }
  80. }
  81. }