made mSensor App ready for recording session at manfreds house
This commit is contained in:
@@ -51,7 +51,7 @@ public class MainActivity extends FragmentActivity implements PopupMenu.OnMenuIt
|
||||
//textview to show the bpm estimation
|
||||
mBpmTextView = (TextView) findViewById(R.id.bpmText);
|
||||
|
||||
mEstimator = new Estimator();
|
||||
mEstimator = new Estimator(this);
|
||||
mEstimator.addListener(this);
|
||||
|
||||
// ensures the connection to the bt sensor board
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.tonifetzer.conductorssensor.estimation;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.Log;
|
||||
|
||||
import java.util.LinkedList;
|
||||
@@ -9,6 +10,7 @@ import java.util.TimerTask;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import de.tonifetzer.conductorssensor.sensor.SensorBoard;
|
||||
import de.tonifetzer.conductorssensor.utilities.SensorDataFileWriter;
|
||||
import de.tonifetzer.conductorssensor.utilities.Utils;
|
||||
|
||||
public class Estimator implements SensorBoard.OnSensorBoardDataListener {
|
||||
@@ -18,18 +20,25 @@ public class Estimator implements SensorBoard.OnSensorBoardDataListener {
|
||||
private BpmEstimator mBpmEstimator;
|
||||
|
||||
private Timer mTimer = new Timer();
|
||||
private SensorDataFileWriter mFileWriter;
|
||||
private Context mContext;
|
||||
|
||||
public Estimator(){
|
||||
public Estimator(Context context){
|
||||
|
||||
mAccelerometerWindowBuffer = new AccelerometerWindowBuffer(6000, 750);
|
||||
mBpmEstimator = new BpmEstimator(mAccelerometerWindowBuffer, 0, 5000);
|
||||
|
||||
mContext = context;
|
||||
}
|
||||
|
||||
public void start(SensorBoard sensorBoard){
|
||||
if(sensorBoard != null){
|
||||
mSensorBoard = sensorBoard;
|
||||
mSensorBoard.addListener(this);
|
||||
mSensorBoard.startAccelerometer();
|
||||
//mSensorBoard.startAccelerometer();
|
||||
mSensorBoard.startLinearAccelerometer();
|
||||
|
||||
mFileWriter = new SensorDataFileWriter(mContext);
|
||||
|
||||
startWorker();
|
||||
|
||||
@@ -41,11 +50,14 @@ public class Estimator implements SensorBoard.OnSensorBoardDataListener {
|
||||
public void stop(){
|
||||
if(mSensorBoard != null){
|
||||
mSensorBoard.removeListener(this);
|
||||
mSensorBoard.stopAccelerometer();
|
||||
//mSensorBoard.stopAccelerometer();
|
||||
mSensorBoard.stopLinearAccelerometer();
|
||||
|
||||
mAccelerometerWindowBuffer.clear();
|
||||
mBpmEstimator.reset();
|
||||
|
||||
mFileWriter.toDisk();
|
||||
|
||||
} else {
|
||||
Log.i("Estimator","Cant stop estimator. SensorBoard is null.");
|
||||
}
|
||||
@@ -55,8 +67,11 @@ public class Estimator implements SensorBoard.OnSensorBoardDataListener {
|
||||
public void onAccelerometerChanged(AccelerometerData data) {
|
||||
mAccelerometerWindowBuffer.add(data);
|
||||
|
||||
//Log.d("Acc: ", "x: " + data.x + " y: " + data.y + " z: " + data.z);
|
||||
|
||||
//todo: save data into stream and write on disk
|
||||
|
||||
mFileWriter.writeVector3D(data.ts, 2, data.x, data.y, data.z);
|
||||
}
|
||||
|
||||
private void startWorker() {
|
||||
|
||||
@@ -9,8 +9,6 @@ import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.mbientlab.metawear.Data;
|
||||
@@ -22,6 +20,8 @@ import com.mbientlab.metawear.builder.RouteBuilder;
|
||||
import com.mbientlab.metawear.builder.RouteComponent;
|
||||
import com.mbientlab.metawear.data.Acceleration;
|
||||
import com.mbientlab.metawear.module.Accelerometer;
|
||||
import com.mbientlab.metawear.module.SensorFusionBosch;
|
||||
import com.mbientlab.metawear.module.SensorFusionBosch.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
@@ -36,7 +36,9 @@ public class SensorBoard implements ServiceConnection {
|
||||
private BtleService.LocalBinder serviceBinder;
|
||||
private MetaWearBoard mMetaBoard;
|
||||
private BluetoothDevice mBluetoothDevice;
|
||||
|
||||
private Accelerometer mAccelerometer;
|
||||
private SensorFusionBosch mSensorFusion;
|
||||
|
||||
private boolean mBoardConnected = false;
|
||||
|
||||
@@ -203,6 +205,7 @@ public class SensorBoard implements ServiceConnection {
|
||||
|
||||
mAccelerometer.configure()
|
||||
.odr(75f) // 75hz
|
||||
.range(4f)
|
||||
.commit();
|
||||
|
||||
mAccelerometer.acceleration().addRouteAsync(new RouteBuilder() {
|
||||
@@ -243,6 +246,51 @@ public class SensorBoard implements ServiceConnection {
|
||||
|
||||
}
|
||||
|
||||
public void startLinearAccelerometer(){
|
||||
|
||||
if(mMetaBoard.isConnected()){
|
||||
mSensorFusion = mMetaBoard.getModule(SensorFusionBosch.class);
|
||||
|
||||
mSensorFusion.configure()
|
||||
.mode(Mode.NDOF)
|
||||
.accRange(AccRange.AR_16G)
|
||||
.gyroRange(GyroRange.GR_2000DPS)
|
||||
.commit();
|
||||
|
||||
mSensorFusion.linearAcceleration().addRouteAsync(new RouteBuilder() {
|
||||
@Override
|
||||
public void configure(RouteComponent source) {
|
||||
source.stream(new Subscriber() {
|
||||
@Override
|
||||
public void apply(Data data, Object... env) {
|
||||
for(OnSensorBoardDataListener listener : mDataListeners){
|
||||
listener.onAccelerometerChanged(new AccelerometerData(
|
||||
System.currentTimeMillis(),
|
||||
data.value(Acceleration.class).x(),
|
||||
data.value(Acceleration.class).y(),
|
||||
data.value(Acceleration.class).z()));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}).continueWith(new Continuation<Route, Void>() {
|
||||
@Override
|
||||
public Void then(Task<Route> task) throws Exception {
|
||||
mSensorFusion.linearAcceleration().start();
|
||||
mSensorFusion.start();
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
public void stopLinearAccelerometer(){
|
||||
|
||||
if(mMetaBoard.isConnected()){
|
||||
mSensorFusion.stop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Interface for callback onConnectionInfos
|
||||
|
||||
@@ -47,5 +47,5 @@ dependencies {
|
||||
implementation 'com.android.support:recyclerview-v7:26.1.0'
|
||||
implementation 'com.android.support:wear:26.1.0'
|
||||
compileOnly 'com.google.android.wearable:wearable:2.2.0'
|
||||
compile 'com.github.wendykierp:JTransforms:3.1'
|
||||
api 'com.github.wendykierp:JTransforms:3.1'
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@
|
||||
%measurements = dlmread('../measurements/wearR/recording_180bpm_4-4_177011641.csv', ';'); *
|
||||
%measurements = dlmread('../measurements/wearR/recording_180bpm_4-4_177064915.csv', ';'); *
|
||||
|
||||
|
||||
files = dir(fullfile('../../measurements/lgWear/', '*.csv'));
|
||||
files = dir(fullfile('../../measurements/mSensor/', '*.csv'));
|
||||
%files = dir(fullfile('../../measurements/lgWear/', '*.csv'));
|
||||
%files = dir(fullfile('../../measurements/wearR/', '*.csv'));
|
||||
%files = dir(fullfile('../../measurements/peter_failed/', '*.csv'));
|
||||
|
||||
@@ -52,7 +52,7 @@ for file = files'
|
||||
|
||||
%draw the raw acc data
|
||||
m_idx = [];
|
||||
m_idx = (measurements(:,2)==2); %Android App: 10, Normal Data: 2
|
||||
m_idx = (measurements(:,2)==3); %Android App: 10, Normal Data: 2
|
||||
m = measurements(m_idx, :);
|
||||
|
||||
%Interpolate to generate a constant sample rate to 250hz (4ms per sample)
|
||||
|
||||
Reference in New Issue
Block a user