From 3a06270f18be9171420ce98a83815aaa42be4e37 Mon Sep 17 00:00:00 2001 From: Kunal Date: Mon, 24 Jun 2019 16:11:05 +0530 Subject: [PATCH] accelerometer refactored code --- .../pslab/activity/AccelerometerActivity.java | 15 +- .../io/pslab/activity/GyroscopeActivity.java | 12 +- .../fragment/AccelerometerDataFragment.java | 847 ++++-------------- .../fragment/AccelerometerViewFragment.java | 187 ++++ .../pslab/fragment/GyroscopeViewFragment.java | 16 - .../io/pslab/models/AccelerometerData.java | 4 + .../res/layout/accelerometer_list_item.xml | 147 +++ .../layout/fragment_accelerometer_data.xml | 453 +--------- 8 files changed, 558 insertions(+), 1123 deletions(-) create mode 100644 app/src/main/java/io/pslab/fragment/AccelerometerViewFragment.java create mode 100644 app/src/main/res/layout/accelerometer_list_item.xml diff --git a/app/src/main/java/io/pslab/activity/AccelerometerActivity.java b/app/src/main/java/io/pslab/activity/AccelerometerActivity.java index 2047c2af6..243d5fd54 100644 --- a/app/src/main/java/io/pslab/activity/AccelerometerActivity.java +++ b/app/src/main/java/io/pslab/activity/AccelerometerActivity.java @@ -115,19 +115,8 @@ private void reinstateConfigurations() { accelerometerConfigurations = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); locationEnabled = accelerometerConfigurations.getBoolean(AccelerometerSettingsFragment.KEY_INCLUDE_LOCATION, true); AccelerometerDataFragment.setParameters( - getValueFromText(accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_HIGH_LIMIT, "2000"), - 10, 10000), - getValueFromText(accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_UPDATE_PERIOD, "1000"), - 100, 1000), - accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_ACCELEROMETER_SENSOR_TYPE, "0"), + Float.valueOf(accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_HIGH_LIMIT, "20")), + Integer.valueOf(accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_UPDATE_PERIOD, "1000")), accelerometerConfigurations.getString(AccelerometerSettingsFragment.KEY_ACCELEROMETER_SENSOR_GAIN, "1")); } - - private int getValueFromText(String strValue, int lowerBound, int upperBound) { - if (strValue.isEmpty()) return lowerBound; - int value = Integer.parseInt(strValue); - if (value > upperBound) return upperBound; - else if (value < lowerBound) return lowerBound; - else return value; - } } \ No newline at end of file diff --git a/app/src/main/java/io/pslab/activity/GyroscopeActivity.java b/app/src/main/java/io/pslab/activity/GyroscopeActivity.java index ef03eb09f..c953cd3f6 100644 --- a/app/src/main/java/io/pslab/activity/GyroscopeActivity.java +++ b/app/src/main/java/io/pslab/activity/GyroscopeActivity.java @@ -107,12 +107,12 @@ protected void onResume() { } private void reinstateConfigurations() { - SharedPreferences accelerometerConfigurations; - accelerometerConfigurations = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); - locationEnabled = accelerometerConfigurations.getBoolean(GyroscopeSettingsFragment.KEY_INCLUDE_LOCATION, true); + SharedPreferences gyroscopeConfigurations; + gyroscopeConfigurations = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); + locationEnabled = gyroscopeConfigurations.getBoolean(GyroscopeSettingsFragment.KEY_INCLUDE_LOCATION, true); GyroscopeDataFragment.setParameters( - Float.valueOf(accelerometerConfigurations.getString(GyroscopeSettingsFragment.KEY_HIGH_LIMIT, "20")), - Integer.valueOf(accelerometerConfigurations.getString(GyroscopeSettingsFragment.KEY_UPDATE_PERIOD, "1000")), - accelerometerConfigurations.getString(GyroscopeSettingsFragment.KEY_GYROSCOPE_SENSOR_GAIN, "1")); + Float.valueOf(gyroscopeConfigurations.getString(GyroscopeSettingsFragment.KEY_HIGH_LIMIT, "20")), + Integer.valueOf(gyroscopeConfigurations.getString(GyroscopeSettingsFragment.KEY_UPDATE_PERIOD, "1000")), + gyroscopeConfigurations.getString(GyroscopeSettingsFragment.KEY_GYROSCOPE_SENSOR_GAIN, "1")); } } diff --git a/app/src/main/java/io/pslab/fragment/AccelerometerDataFragment.java b/app/src/main/java/io/pslab/fragment/AccelerometerDataFragment.java index c808e3eef..2792fdf1b 100644 --- a/app/src/main/java/io/pslab/fragment/AccelerometerDataFragment.java +++ b/app/src/main/java/io/pslab/fragment/AccelerometerDataFragment.java @@ -13,17 +13,11 @@ import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.text.Html; +import android.util.Pair; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; import android.widget.Toast; - -import com.github.mikephil.charting.charts.LineChart; -import com.github.mikephil.charting.components.Legend; -import com.github.mikephil.charting.components.XAxis; -import com.github.mikephil.charting.components.YAxis; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; @@ -42,20 +36,11 @@ import java.util.Locale; import java.util.Timer; import java.util.TimerTask; - -import butterknife.BindView; -import butterknife.ButterKnife; -import butterknife.Unbinder; import io.pslab.R; import io.pslab.activity.AccelerometerActivity; -import io.pslab.communication.ScienceLab; -import io.pslab.communication.peripherals.I2C; -import io.pslab.communication.sensors.BH1750; -import io.pslab.communication.sensors.TSL2561; import io.pslab.models.AccelerometerData; import io.pslab.models.SensorDataBlock; import io.pslab.others.CSVLogger; -import io.pslab.others.ScienceLabCommon; import static android.content.Context.SENSOR_SERVICE; import static io.pslab.others.CSVLogger.CSV_DIRECTORY; @@ -66,84 +51,20 @@ public class AccelerometerDataFragment extends Fragment { - private static int sensorType = 0; - private static int highLimit = 2000; - private static int updatePeriod = 100; - private static int gain = 1; - private int count = 0, turns = 0; - private float sum = 0; + private static int updatePeriod = 1000; + private static float highLimit = 1.2f; + private static float gain = 1; + private int turns = 0; private boolean returningFromPause = false; - private int[] colors = {Color.YELLOW, Color.MAGENTA, Color.GREEN}; - private float accelerometerValue_X = -1; - private float accelerometerValue_Y = -1; - private float accelerometerValue_Z = -1; - - private enum ACCELEROMETER_SENSOR {INBUILT_SENSOR, BH1750_SENSOR, TSL2561_SENSOR} - - @BindView(R.id.x_axis_image) - ImageView x_axis; - @BindView(R.id.x_accel_value) - TextView x_accel_value; - @BindView(R.id.x_accel_min_text) - TextView x_accel_min; - @BindView(R.id.x_accel_max_text) - TextView x_accel_max; - @BindView(R.id.x_tv_graph_label_xaxis_hmc) - TextView x_tv_graph_label_xaxis_hmc; - @BindView(R.id.x_tv_label_left_yaxis_hmc) - TextView x_tv_label_left_yaxis_hmc; - @BindView(R.id.chart_accelerometer_x) - LineChart x_chart_accelerometer; - - @BindView(R.id.y_axis_image) - ImageView y_axis; - @BindView(R.id.y_accel_value) - TextView y_accel_value; - @BindView(R.id.y_accel_min_text) - TextView y_accel_min_text; - @BindView(R.id.y_accel_max_text) - TextView y_accel_max_text; - @BindView(R.id.y_tv_graph_label_xaxis_hmc) - TextView y_tv_graph_label_xaxis_hmc; - @BindView(R.id.y_tv_label_left_yaxis_hmc) - TextView y_tv_label_left_yaxis_hmc; - @BindView(R.id.y_chart_accelerometer) - LineChart y_chart_accelerometer; - - @BindView(R.id.z_axis_image) - ImageView z_axis_image; - @BindView(R.id.z_accel_value) - TextView z_accel_value; - @BindView(R.id.z_accel_min_text) - TextView z_accel_min_text; - @BindView(R.id.z_accel_max_text) - TextView z_accel_max_text; - @BindView(R.id.z_tv_graph_label_xaxis_hmc) - TextView z_tv_graph_label_xaxis_hmc; - @BindView(R.id.z_tv_label_left_yaxis_hmc) - TextView z_tv_label_left_yaxis_hmc; - @BindView(R.id.z_chart_accelerometer) - LineChart z_chart_accelerometer; - private Timer graphTimer; private SensorManager sensorManager; private Sensor sensor; private long startTime, block; - private ArrayList entriesX, entriesY, entriesZ; - private ArrayList recordedAccelerometerArray; private AccelerometerData sensorData; - private float currentMinX = Integer.MAX_VALUE; - private float currentMaxX = Integer.MIN_VALUE; - private float currentMinY = Integer.MAX_VALUE; - private float currentMaxY = Integer.MIN_VALUE; - private float currentMinZ = Integer.MAX_VALUE; - private float currentMaxZ = Integer.MIN_VALUE; - private YAxis y; - private Unbinder unbinder; - private long previousTimeElapsed_X = (System.currentTimeMillis() - startTime) / updatePeriod; - private long previousTimeElapsed_Y = (System.currentTimeMillis() - startTime) / updatePeriod; - private long previousTimeElapsed_Z = (System.currentTimeMillis() - startTime) / updatePeriod; + private ArrayList recordedAccelerometerArray; private AccelerometerActivity accelerometerSensor; + private ArrayList accelerometerViewFragments = new ArrayList<>(); + private int[] colors = {Color.YELLOW, Color.MAGENTA, Color.GREEN}; private DecimalFormat df = new DecimalFormat("+#0.0;-#0.0"); private View rootView; @@ -151,28 +72,38 @@ public static AccelerometerDataFragment newInstance() { return new AccelerometerDataFragment(); } - public static void setParameters(int highLimit, int updatePeriod, String type, String gain) { + public static void setParameters(float highLimit, int updatePeriod, String gain) { AccelerometerDataFragment.highLimit = highLimit; AccelerometerDataFragment.updatePeriod = updatePeriod; - AccelerometerDataFragment.sensorType = Integer.valueOf(type); AccelerometerDataFragment.gain = Integer.valueOf(gain); } + public static Pair> getParameters() { + return new Pair<>(updatePeriod, new Pair<>(highLimit, gain)); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); startTime = System.currentTimeMillis(); - entriesX = new ArrayList<>(); - entriesY = new ArrayList<>(); - entriesZ = new ArrayList<>(); accelerometerSensor = (AccelerometerActivity) getActivity(); + for (AccelerometerViewFragment fragment : accelerometerViewFragments) { + fragment.clear(); + } } @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_accelerometer_data, container, false); - unbinder = ButterKnife.bind(this, rootView); + accelerometerViewFragments.clear(); + accelerometerViewFragments.add((AccelerometerViewFragment) getChildFragmentManager().findFragmentById(R.id.accelerometer_x_axis_fragment)); + accelerometerViewFragments.add((AccelerometerViewFragment) getChildFragmentManager().findFragmentById(R.id.accelerometer_y_axis_fragment)); + accelerometerViewFragments.add((AccelerometerViewFragment) getChildFragmentManager().findFragmentById(R.id.accelerometer_z_axis_fragment)); + + accelerometerViewFragments.get(1).getAccelerationAxisImage().setImageResource(R.drawable.phone_y_axis); + accelerometerViewFragments.get(2).getAccelerationAxisImage().setImageResource(R.drawable.phone_z_axis); + setupInstruments(); return rootView; } @@ -185,109 +116,17 @@ public void onResume() { resetInstrumentData(); playRecordedData(); } else if (accelerometerSensor.viewingData) { - recordedAccelerometerArray = new ArrayList<>(); - resetInstrumentData(); - plotAllRecordedData(); + recordedAccelerometerArray = new ArrayList<>(); + resetInstrumentData(); + plotAllRecordedData(); } else if (!accelerometerSensor.isRecording) { updateGraphs(); - sum = 0; - count = 0; - currentMinX = Integer.MAX_VALUE; - currentMaxX = Integer.MIN_VALUE; - currentMinY = Integer.MAX_VALUE; - currentMaxY = Integer.MIN_VALUE; - currentMinZ = Integer.MAX_VALUE; - currentMaxZ = Integer.MIN_VALUE; - entriesX.clear(); - entriesY.clear(); - entriesZ.clear(); - - x_chart_accelerometer.clear(); - x_chart_accelerometer.invalidate(); - - y_chart_accelerometer.clear(); - y_chart_accelerometer.invalidate(); - - z_chart_accelerometer.clear(); - z_chart_accelerometer.invalidate(); - - initiateAccelerometerSensor(sensorType); + initiateAccelerometerSensor(); } else if (returningFromPause) { updateGraphs(); } } - private void plotAllRecordedData() { - recordedAccelerometerArray.addAll(accelerometerSensor.recordedAccelerometerData); - if (recordedAccelerometerArray.size() != 0) { - for (AccelerometerData d : recordedAccelerometerArray) { - if (currentMaxX < d.getAccelerometerX()) { - currentMaxX = d.getAccelerometerX(); - } - if (currentMinX > d.getAccelerometerX()) { - currentMinX = d.getAccelerometerX(); - } - Entry entryX = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAccelerometerX()); - entriesX.add(entryX); - count++; - sum += entryX.getY(); - Entry entryY = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAccelerometerY()); - entriesY.add(entryY); - count++; - sum += entryY.getY(); - Entry entryZ = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAccelerometerZ()); - entriesZ.add(entryZ); - count++; - sum += entryZ.getY(); - } - y.setAxisMaximum(20); - y.setAxisMinimum(-20); - y.setLabelCount(5); - - LineDataSet dataSet_X = new LineDataSet(entriesX, getString(R.string.accelerometer)); - LineData data_x = new LineData(dataSet_X); - dataSet_X.setDrawCircles(false); - dataSet_X.setDrawValues(false); - dataSet_X.setMode(LineDataSet.Mode.CUBIC_BEZIER); - dataSet_X.setLineWidth(1); - dataSet_X.setColor(colors[0]); - - x_chart_accelerometer.setData(data_x); - x_chart_accelerometer.notifyDataSetChanged(); - x_chart_accelerometer.setVisibleXRangeMaximum(3); - x_chart_accelerometer.moveViewToX(data_x.getEntryCount()); - x_chart_accelerometer.invalidate(); - - LineDataSet dataSet_Y = new LineDataSet(entriesY, getString(R.string.accelerometer)); - LineData data_y = new LineData(dataSet_Y); - dataSet_Y.setDrawCircles(false); - dataSet_Y.setDrawValues(false); - dataSet_Y.setMode(LineDataSet.Mode.CUBIC_BEZIER); - dataSet_Y.setLineWidth(1); - dataSet_Y.setColor(colors[1]); - - y_chart_accelerometer.setData(data_y); - y_chart_accelerometer.notifyDataSetChanged(); - y_chart_accelerometer.setVisibleXRangeMaximum(3); - y_chart_accelerometer.moveViewToX(data_y.getEntryCount()); - y_chart_accelerometer.invalidate(); - - LineDataSet dataSet_Z = new LineDataSet(entriesZ, getString(R.string.accelerometer)); - LineData data_z = new LineData(dataSet_Z); - dataSet_Z.setDrawCircles(false); - dataSet_Z.setDrawValues(false); - dataSet_Z.setMode(LineDataSet.Mode.CUBIC_BEZIER); - dataSet_Z.setLineWidth(1); - dataSet_Z.setColor(colors[2]); - - z_chart_accelerometer.setData(data_z); - z_chart_accelerometer.notifyDataSetChanged(); - z_chart_accelerometer.setVisibleXRangeMaximum(3); - z_chart_accelerometer.moveViewToX(data_z.getEntryCount()); - z_chart_accelerometer.invalidate(); - } - } - @Override public void onDestroyView() { super.onDestroyView(); @@ -297,7 +136,40 @@ public void onDestroyView() { if (sensorManager != null) { sensorManager.unregisterListener(accelerometerSensorEventListener); } - unbinder.unbind(); + } + + private void plotAllRecordedData() { + recordedAccelerometerArray.addAll(accelerometerSensor.recordedAccelerometerData); + if (recordedAccelerometerArray.size() != 0) { + for (int i = 0; i < accelerometerViewFragments.size(); i++) { + AccelerometerViewFragment fragment = accelerometerViewFragments.get(i); + for (AccelerometerData d : recordedAccelerometerArray) { + if (fragment.getCurrentMax() < d.getAccelerometer()[i]) { + fragment.setCurrentMax(d.getAccelerometer()[i]); + } + if (fragment.getCurrentMin() > d.getAccelerometer()[i]) { + fragment.setCurrentMin(d.getAccelerometer()[i]); + } + Entry entry = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAccelerometer()[i]); + fragment.addEntry(entry); + } + + fragment.setYaxis(highLimit); + + LineDataSet dataSet = new LineDataSet(fragment.getEntries(), getString(R.string.accelerometer)); + dataSet.setDrawCircles(false); + dataSet.setDrawValues(false); + dataSet.setLineWidth(2); + + dataSet.setDrawCircles(false); + dataSet.setDrawValues(false); + dataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); + dataSet.setLineWidth(1); + dataSet.setColor(colors[i]); + LineData data = new LineData(dataSet); + fragment.setChartData(data); + } + } } private void playRecordedData() { @@ -329,146 +201,59 @@ public void run() { handler.post(new Runnable() { @Override public void run() { - try { - boolean playComplete = false; - AccelerometerData d = recordedAccelerometerArray.get(turns); - turns++; - StringBuilder builder_x = new StringBuilder(); - builder_x.append(df.format(d.getAccelerometerX())); - builder_x.append(" "); - builder_x.append(getResources().getString(R.string.meters_per_sec_text)); - x_accel_value.setText(Html.fromHtml(builder_x.toString())); - - if (currentMaxX < d.getAccelerometerX()) { - currentMaxX = d.getAccelerometerX(); - StringBuilder builder_x_max = new StringBuilder(); - builder_x_max.append("Max: "); - builder_x_max.append(df.format(currentMaxX)); - builder_x_max.append(" "); - builder_x_max.append(getResources().getString(R.string.meters_per_sec_text)); - x_accel_max.setText(Html.fromHtml(builder_x_max.toString())); + if (accelerometerSensor.viewingData) { + try { + AccelerometerData d = recordedAccelerometerArray.get(turns); + turns++; + for (int i = 0; i < accelerometerViewFragments.size(); i++) { + AccelerometerViewFragment fragment = accelerometerViewFragments.get(i); + StringBuilder builder = new StringBuilder(); + builder.append(df.format(d.getAccelerometer()[i])); + builder.append(" "); + builder.append(getResources().getString(R.string.acceleration_unit)); + fragment.setAccelerationValue(Html.fromHtml(builder.toString())); + + if (fragment.getCurrentMax() < d.getAccelerometer()[i]) { + fragment.setCurrentMax(d.getAccelerometer()[i]); + StringBuilder max_builder = new StringBuilder(); + max_builder.append("Max: "); + max_builder.append(df.format(fragment.getCurrentMax())); + max_builder.append(" "); + max_builder.append(getResources().getString(R.string.acceleration_unit)); + fragment.setAccelerationMax(Html.fromHtml(max_builder.toString())); + } + if (fragment.getCurrentMin() > d.getAccelerometer()[i]) { + fragment.setCurrentMin(d.getAccelerometer()[i]); + StringBuilder min_builder = new StringBuilder(); + min_builder.append("Min: "); + min_builder.append(df.format(fragment.getCurrentMax())); + min_builder.append(" "); + min_builder.append(getResources().getString(R.string.acceleration_unit)); + fragment.setAccelerationMin(Html.fromHtml(min_builder.toString())); + } + + fragment.setYaxis(highLimit); + Entry entryX = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAccelerometer()[i]); + fragment.addEntry(entryX); + + LineDataSet dataSet = new LineDataSet(fragment.getEntries(), getString(R.string.accelerometer)); + dataSet.setDrawCircles(false); + dataSet.setDrawValues(false); + dataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); + dataSet.setLineWidth(1); + dataSet.setColor(colors[i]); + LineData data = new LineData(dataSet); + + fragment.setChartData(data); + } + } catch (IndexOutOfBoundsException e) { + graphTimer.cancel(); + graphTimer = null; + turns = 0; + accelerometerSensor.playingData = false; + accelerometerSensor.startedPlay = false; + accelerometerSensor.invalidateOptionsMenu(); } - if (currentMinX > d.getAccelerometerX()) { - currentMinX = d.getAccelerometerX(); - StringBuilder builder_x_min = new StringBuilder(); - builder_x_min.append("Min: "); - builder_x_min.append(df.format(currentMinX)); - builder_x_min.append(" "); - builder_x_min.append(getResources().getString(R.string.meters_per_sec_text)); - x_accel_min.setText(Html.fromHtml(builder_x_min.toString())); - } - StringBuilder builder_y = new StringBuilder(); - builder_y.append(df.format(d.getAccelerometerY())); - builder_y.append(" "); - builder_y.append(getResources().getString(R.string.meters_per_sec_text)); - y_accel_value.setText(Html.fromHtml(builder_y.toString())); - if (currentMaxY < d.getAccelerometerY()) { - currentMaxY = d.getAccelerometerY(); - StringBuilder builder_y_max = new StringBuilder(); - builder_y_max.append("Max: "); - builder_y_max.append(df.format(currentMaxY)); - builder_y_max.append(" "); - builder_y_max.append(getResources().getString(R.string.meters_per_sec_text)); - y_accel_max_text.setText(Html.fromHtml(builder_y_max.toString())); - } - if (currentMinY > d.getAccelerometerY()) { - currentMinY = d.getAccelerometerY(); - StringBuilder builder_y_min = new StringBuilder(); - builder_y_min.append("Min: "); - builder_y_min.append(df.format(currentMinY)); - builder_y_min.append(" "); - builder_y_min.append(getResources().getString(R.string.meters_per_sec_text)); - y_accel_min_text.setText(Html.fromHtml(builder_y_min.toString())); - } - StringBuilder builder_z = new StringBuilder(); - builder_z.append(df.format(d.getAccelerometerZ())); - builder_z.append(" "); - builder_z.append(getResources().getString(R.string.meters_per_sec_text)); - z_accel_value.setText(Html.fromHtml(builder_z.toString())); - if (currentMaxZ < d.getAccelerometerZ()) { - currentMaxZ = d.getAccelerometerZ(); - StringBuilder builder_z_max = new StringBuilder(); - builder_z_max.append("Max: "); - builder_z_max.append(df.format(currentMaxZ)); - builder_z_max.append(" "); - builder_z_max.append(getResources().getString(R.string.meters_per_sec_text)); - z_accel_max_text.setText(Html.fromHtml(builder_z_max.toString())); - } - if (currentMinZ > d.getAccelerometerZ()) { - currentMinZ = d.getAccelerometerZ(); - StringBuilder builder_z_min = new StringBuilder(); - builder_z_min.append("Min: "); - builder_z_min.append(df.format(currentMinZ)); - builder_z_min.append(" "); - builder_z_min.append(getResources().getString(R.string.meters_per_sec_text)); - z_accel_min_text.setText(Html.fromHtml(builder_z_min.toString())); - } - y.setAxisMaximum(20); - y.setAxisMinimum(-20); - y.setLabelCount(5); - - Entry entryX = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAccelerometerX()); - entriesX.add(entryX); - count++; - sum += entryX.getY(); - Entry entryY = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAccelerometerY()); - entriesY.add(entryY); - count++; - sum += entryY.getY(); - Entry entryZ = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAccelerometerZ()); - entriesZ.add(entryZ); - count++; - sum += entryZ.getY(); - - LineDataSet dataSet_X = new LineDataSet(entriesX, getString(R.string.accelerometer)); - LineData data_x = new LineData(dataSet_X); - dataSet_X.setDrawCircles(false); - dataSet_X.setDrawValues(false); - dataSet_X.setMode(LineDataSet.Mode.CUBIC_BEZIER); - dataSet_X.setLineWidth(1); - dataSet_X.setColor(colors[0]); - - x_chart_accelerometer.setData(data_x); - x_chart_accelerometer.notifyDataSetChanged(); - x_chart_accelerometer.setVisibleXRangeMaximum(3); - x_chart_accelerometer.moveViewToX(data_x.getEntryCount()); - x_chart_accelerometer.invalidate(); - - LineDataSet dataSet_Y = new LineDataSet(entriesY, getString(R.string.accelerometer)); - LineData data_y = new LineData(dataSet_Y); - dataSet_Y.setDrawCircles(false); - dataSet_Y.setDrawValues(false); - dataSet_Y.setMode(LineDataSet.Mode.CUBIC_BEZIER); - dataSet_Y.setLineWidth(1); - dataSet_Y.setColor(colors[1]); - - y_chart_accelerometer.setData(data_y); - y_chart_accelerometer.notifyDataSetChanged(); - y_chart_accelerometer.setVisibleXRangeMaximum(3); - y_chart_accelerometer.moveViewToX(data_y.getEntryCount()); - y_chart_accelerometer.invalidate(); - - LineDataSet dataSet_Z = new LineDataSet(entriesZ, getString(R.string.accelerometer)); - LineData data_z = new LineData(dataSet_Z); - dataSet_Z.setDrawCircles(false); - dataSet_Z.setDrawValues(false); - dataSet_Z.setMode(LineDataSet.Mode.CUBIC_BEZIER); - dataSet_Z.setLineWidth(1); - dataSet_Z.setColor(colors[2]); - - z_chart_accelerometer.setData(data_z); - z_chart_accelerometer.notifyDataSetChanged(); - z_chart_accelerometer.setVisibleXRangeMaximum(3); - z_chart_accelerometer.moveViewToX(data_z.getEntryCount()); - z_chart_accelerometer.invalidate(); - - } catch (IndexOutOfBoundsException e) { - graphTimer.cancel(); - graphTimer = null; - turns = 0; - accelerometerSensor.playingData = false; - accelerometerSensor.startedPlay = false; - accelerometerSensor.invalidateOptionsMenu(); } } }); @@ -476,15 +261,32 @@ public void run() { }, 0, timeGap); } + public void playData() { + resetInstrumentData(); + accelerometerSensor.startedPlay = true; + try { + if (recordedAccelerometerArray.size() > 1) { + AccelerometerData i = recordedAccelerometerArray.get(1); + long timeGap = i.getTime() - i.getBlock(); + processRecordedData(timeGap); + } else { + processRecordedData(0); + } + } catch (IllegalArgumentException e) { + Toast.makeText(getActivity(), + getActivity().getResources().getString(R.string.no_data_fetched), Toast.LENGTH_SHORT).show(); + } + } + public void stopData() { if (graphTimer != null) { graphTimer.cancel(); graphTimer = null; } recordedAccelerometerArray.clear(); - entriesX.clear(); - entriesY.clear(); - entriesZ.clear(); + for (AccelerometerViewFragment fragment : accelerometerViewFragments) { + fragment.clearEntry(); + } plotAllRecordedData(); accelerometerSensor.startedPlay = false; accelerometerSensor.playingData = false; @@ -529,126 +331,10 @@ public void saveGraph() { } } - - public void playData() { - resetInstrumentData(); - accelerometerSensor.startedPlay = true; - try { - if (recordedAccelerometerArray.size() > 1) { - AccelerometerData i = recordedAccelerometerArray.get(1); - long timeGap = i.getTime() - i.getBlock(); - processRecordedData(timeGap); - } else { - processRecordedData(0); - } - } catch (IllegalArgumentException e) { - Toast.makeText(getActivity(), - getActivity().getResources().getString(R.string.no_data_fetched), Toast.LENGTH_SHORT).show(); - } - } - private void setupInstruments() { - LineData data_x = new LineData(); - XAxis x = x_chart_accelerometer.getXAxis(); - this.y = x_chart_accelerometer.getAxisLeft(); - YAxis y2 = x_chart_accelerometer.getAxisRight(); - - x_chart_accelerometer.setTouchEnabled(true); - x_chart_accelerometer.setHighlightPerDragEnabled(true); - x_chart_accelerometer.setDragEnabled(true); - x_chart_accelerometer.setScaleEnabled(true); - x_chart_accelerometer.setDrawGridBackground(false); - x_chart_accelerometer.setPinchZoom(true); - x_chart_accelerometer.setScaleYEnabled(false); - x_chart_accelerometer.setBackgroundColor(Color.BLACK); - x_chart_accelerometer.getDescription().setEnabled(false); - - Legend l = x_chart_accelerometer.getLegend(); - l.setForm(Legend.LegendForm.LINE); - l.setTextColor(Color.WHITE); - - x_chart_accelerometer.setData(data_x); - - x.setTextColor(Color.WHITE); - x.setDrawGridLines(true); - x.setAvoidFirstLastClipping(true); - x.setDrawLabels(false); - - y.setTextColor(Color.WHITE); - y.setAxisMaximum(20); - y.setAxisMinimum(-20); - y.setDrawGridLines(true); - y.setLabelCount(6); - - y2.setDrawGridLines(false); - - LineData data_y = new LineData(); - XAxis x_1 = y_chart_accelerometer.getXAxis(); - this.y = y_chart_accelerometer.getAxisLeft(); - YAxis y2_1 = y_chart_accelerometer.getAxisRight(); - - y_chart_accelerometer.setTouchEnabled(true); - y_chart_accelerometer.setHighlightPerDragEnabled(true); - y_chart_accelerometer.setDragEnabled(true); - y_chart_accelerometer.setScaleEnabled(true); - y_chart_accelerometer.setDrawGridBackground(false); - y_chart_accelerometer.setPinchZoom(true); - y_chart_accelerometer.setScaleYEnabled(false); - y_chart_accelerometer.setBackgroundColor(Color.BLACK); - y_chart_accelerometer.getDescription().setEnabled(false); - - Legend l_1 = y_chart_accelerometer.getLegend(); - l_1.setForm(Legend.LegendForm.LINE); - l_1.setTextColor(Color.WHITE); - - y_chart_accelerometer.setData(data_y); - - x_1.setTextColor(Color.WHITE); - x_1.setDrawGridLines(true); - x_1.setAvoidFirstLastClipping(true); - x_1.setDrawLabels(false); - - y.setTextColor(Color.WHITE); - y.setAxisMaximum(20); - y.setAxisMinimum(-20); - y.setDrawGridLines(true); - y.setLabelCount(6); - - y2_1.setDrawGridLines(false); - - LineData data_z = new LineData(); - XAxis x_2 = z_chart_accelerometer.getXAxis(); - this.y = z_chart_accelerometer.getAxisLeft(); - YAxis y2_2 = z_chart_accelerometer.getAxisRight(); - - z_chart_accelerometer.setTouchEnabled(true); - z_chart_accelerometer.setHighlightPerDragEnabled(true); - z_chart_accelerometer.setDragEnabled(true); - z_chart_accelerometer.setScaleEnabled(true); - z_chart_accelerometer.setDrawGridBackground(false); - z_chart_accelerometer.setPinchZoom(true); - z_chart_accelerometer.setScaleYEnabled(false); - z_chart_accelerometer.setBackgroundColor(Color.BLACK); - z_chart_accelerometer.getDescription().setEnabled(false); - - Legend l_2 = z_chart_accelerometer.getLegend(); - l_2.setForm(Legend.LegendForm.LINE); - l_2.setTextColor(Color.WHITE); - - z_chart_accelerometer.setData(data_z); - - x_2.setTextColor(Color.WHITE); - x_2.setDrawGridLines(true); - x_2.setAvoidFirstLastClipping(true); - x_2.setDrawLabels(false); - - y.setTextColor(Color.WHITE); - y.setAxisMaximum(20); - y.setAxisMinimum(-20); - y.setDrawGridLines(true); - y.setLabelCount(6); - - y2_2.setDrawGridLines(false); + for (AccelerometerViewFragment fragment : accelerometerViewFragments) { + fragment.setUp(); + } } @Override @@ -701,12 +387,12 @@ private void writeLogToFile(long timestamp, float readingX, float readingY, floa Location location = accelerometerSensor.gpsLogger.getDeviceLocation(); accelerometerSensor.csvLogger.writeCSVFile(timestamp + "," + dateTime + "," + readingX + "," + readingY + "," + readingZ + "," + location.getLatitude() + "," + location.getLongitude()); - sensorData = new AccelerometerData(timestamp, block, accelerometerValue_X, accelerometerValue_Y, accelerometerValue_Z, location.getLatitude(), location.getLongitude()); + sensorData = new AccelerometerData(timestamp, block, accelerometerViewFragments.get(0).getCurrentValue(), accelerometerViewFragments.get(1).getCurrentValue(), accelerometerViewFragments.get(2).getCurrentValue(), location.getLatitude(), location.getLongitude()); } else { String dateTime = CSVLogger.FILE_NAME_FORMAT.format(new Date(timestamp)); accelerometerSensor.csvLogger.writeCSVFile(timestamp + "," + dateTime + "," - + readingX + "," + readingY + "," + readingZ + ",0.0,0.0"); - sensorData = new AccelerometerData(timestamp, block, accelerometerValue_X, accelerometerValue_Y, accelerometerValue_Z, 0.0, 0.0); + + readingX + "," + readingY + "," + readingZ + "," + ",0.0,0.0"); + sensorData = new AccelerometerData(timestamp, block, accelerometerViewFragments.get(0).getCurrentValue(), accelerometerViewFragments.get(1).getCurrentValue(), accelerometerViewFragments.get(2).getCurrentValue(), 0.0, 0.0); } accelerometerSensor.recordSensorData(sensorData); } else { @@ -715,75 +401,27 @@ private void writeLogToFile(long timestamp, float readingX, float readingY, floa } private void visualizeData() { - boolean toWrite = false; - long timeElapsed = (System.currentTimeMillis() - startTime) / 1000; - if (timeElapsed != previousTimeElapsed_X) { - toWrite = true; - previousTimeElapsed_X = timeElapsed; - entriesX.add(new Entry((float) timeElapsed, accelerometerValue_X)); - - LineDataSet dataSet = new LineDataSet(entriesX, getString(R.string.accelerometer)); - LineData data = new LineData(dataSet); - dataSet.setDrawCircles(false); - dataSet.setDrawValues(false); - dataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); - dataSet.setLineWidth(1); - dataSet.setColor(colors[0]); - - x_chart_accelerometer.setData(data); - x_chart_accelerometer.notifyDataSetChanged(); - x_chart_accelerometer.setVisibleXRangeMaximum(3); - x_chart_accelerometer.moveViewToX(data.getEntryCount()); - x_chart_accelerometer.invalidate(); - } - - timeElapsed = (System.currentTimeMillis() - startTime) / 1000; - if (timeElapsed != previousTimeElapsed_Y) { - toWrite = true; - previousTimeElapsed_Y = timeElapsed; - entriesY.add(new Entry((float) timeElapsed, accelerometerValue_Y)); - - LineDataSet dataSet = new LineDataSet(entriesY, getString(R.string.accelerometer)); - LineData data = new LineData(dataSet); - dataSet.setDrawCircles(false); - dataSet.setDrawValues(false); - dataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); - dataSet.setLineWidth(1); - dataSet.setColor(colors[1]); - - y_chart_accelerometer.setData(data); - y_chart_accelerometer.notifyDataSetChanged(); - y_chart_accelerometer.setVisibleXRangeMaximum(3); - y_chart_accelerometer.moveViewToX(data.getEntryCount()); - y_chart_accelerometer.invalidate(); - } - timeElapsed = (System.currentTimeMillis() - startTime) / 1000; - if (timeElapsed != previousTimeElapsed_Z) { - toWrite = true; - previousTimeElapsed_Z = timeElapsed; - entriesZ.add(new Entry((float) timeElapsed, accelerometerValue_Z)); - - LineDataSet dataSet = new LineDataSet(entriesZ, getString(R.string.accelerometer)); - LineData data = new LineData(dataSet); - dataSet.setDrawCircles(false); - dataSet.setDrawValues(false); - dataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); - dataSet.setLineWidth(1); - dataSet.setColor(colors[2]); - - z_chart_accelerometer.setData(data); - z_chart_accelerometer.notifyDataSetChanged(); - z_chart_accelerometer.setVisibleXRangeMaximum(3); - z_chart_accelerometer.moveViewToX(data.getEntryCount()); - z_chart_accelerometer.invalidate(); - } - if (toWrite) { - long curretTime = System.currentTimeMillis(); - writeLogToFile(curretTime, accelerometerValue_X, accelerometerValue_Y, accelerometerValue_Z); + for (int i = 0; i < accelerometerViewFragments.size(); i++) { + AccelerometerViewFragment fragment = accelerometerViewFragments.get(i); + long timeElapsed = (System.currentTimeMillis() - startTime) / 1000; + if (timeElapsed != fragment.getPreviousTimeElapsed()) { + fragment.setPreviousTimeElapsed(timeElapsed); + fragment.addEntry(new Entry((float) timeElapsed, fragment.getCurrentValue())); + + LineDataSet dataSet = new LineDataSet(fragment.getEntries(), getString(R.string.accelerometer)); + dataSet.setDrawCircles(false); + dataSet.setDrawValues(false); + dataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); + dataSet.setLineWidth(1); + dataSet.setColor(colors[i]); + LineData data = new LineData(dataSet); + + fragment.setChartData(data); + fragment.setYaxis(highLimit); + } } - y.setAxisMaximum(20); - y.setAxisMinimum(-20); - y.setLabelCount(5); + Long currentTime = System.currentTimeMillis(); + writeLogToFile(currentTime, accelerometerViewFragments.get(0).getCurrentValue(), accelerometerViewFragments.get(1).getCurrentValue(), accelerometerViewFragments.get(2).getCurrentValue()); } private SensorEventListener accelerometerSensorEventListener = new SensorEventListener() { @@ -794,148 +432,47 @@ public void onAccuracyChanged(Sensor sensor, int accuracy) {/**/} @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { - accelerometerValue_X = event.values[0]; - StringBuilder builder_x = new StringBuilder(); - builder_x.append(df.format(accelerometerValue_X)); - builder_x.append(" "); - builder_x.append(getResources().getString(R.string.meters_per_sec_text)); - x_accel_value.setText(Html.fromHtml(builder_x.toString())); - if (accelerometerValue_X > currentMaxX) { - builder_x.insert(0, getResources().getString(R.string.text_max)); - builder_x.insert(3, " "); - x_accel_max.setText(Html.fromHtml(builder_x.toString())); - currentMaxX = accelerometerValue_X; - } else if (accelerometerValue_X < currentMinX) { - builder_x.insert(0, getResources().getString(R.string.text_min)); - builder_x.insert(3, " "); - x_accel_min.setText(Html.fromHtml(builder_x.toString())); - currentMinX = accelerometerValue_X; - } - accelerometerValue_Y = event.values[1]; - StringBuilder builder_y = new StringBuilder(); - builder_y.append(df.format(accelerometerValue_Y)); - builder_y.append(" "); - builder_y.append(getResources().getString(R.string.meters_per_sec_text)); - y_accel_value.setText(Html.fromHtml(builder_y.toString())); - if (accelerometerValue_Y > currentMaxY) { - builder_y.insert(0, getResources().getString(R.string.text_max)); - builder_y.insert(3, " "); - y_accel_max_text.setText(Html.fromHtml(builder_y.toString())); - currentMaxY = accelerometerValue_Y; - } else if (accelerometerValue_Y < currentMinY) { - builder_y.insert(0, getResources().getString(R.string.text_min)); - builder_y.insert(3, " "); - y_accel_min_text.setText(Html.fromHtml(builder_y.toString())); - currentMinY = accelerometerValue_Y; - } - accelerometerValue_Z = event.values[2]; - StringBuilder builder_z = new StringBuilder(); - builder_z.append(df.format(accelerometerValue_Z)); - builder_z.append(" "); - builder_z.append(getResources().getString(R.string.meters_per_sec_text)); - z_accel_value.setText(Html.fromHtml(builder_z.toString())); - - if (accelerometerValue_Z > currentMaxZ) { - builder_z.insert(0, getResources().getString(R.string.text_max)); - builder_z.insert(3, " "); - z_accel_max_text.setText(Html.fromHtml(builder_z.toString())); - currentMaxZ = accelerometerValue_Z; - } else if (accelerometerValue_Z < currentMinZ) { - builder_z.insert(0, getResources().getString(R.string.text_min)); - builder_z.insert(3, " "); - z_accel_min_text.setText(Html.fromHtml(builder_z.toString())); - currentMinZ = accelerometerValue_Z; + for (int i = 0; i < accelerometerViewFragments.size(); i++) { + AccelerometerViewFragment fragment = accelerometerViewFragments.get(i); + fragment.setCurrentValue(event.values[i]); + StringBuilder builder = new StringBuilder(); + builder.append(df.format(fragment.getCurrentValue())); + builder.append(" "); + builder.append(getResources().getString(R.string.acceleration_unit)); + fragment.setAccelerationValue(Html.fromHtml(builder.toString())); + + if (fragment.getCurrentValue() > fragment.getCurrentMax()) { + builder.insert(0, getResources().getString(R.string.text_max)); + builder.insert(3, " "); + fragment.setAccelerationMax(Html.fromHtml(builder.toString())); + fragment.setCurrentMax(fragment.getCurrentValue()); + } else if (fragment.getCurrentValue() < fragment.getCurrentMin()) { + builder.insert(0, getResources().getString(R.string.text_min)); + builder.insert(3, " "); + fragment.setAccelerationMin(Html.fromHtml(builder.toString())); + fragment.setCurrentMin(fragment.getCurrentValue()); + } } } } }; private void resetInstrumentData() { - accelerometerValue_X = 0; - accelerometerValue_Y = 0; - accelerometerValue_Z = 0; - count = 0; - currentMinX = Integer.MAX_VALUE; - currentMaxX = Integer.MIN_VALUE; - currentMinY = Integer.MAX_VALUE; - currentMaxY = Integer.MIN_VALUE; - currentMinZ = Integer.MAX_VALUE; - currentMaxZ = Integer.MIN_VALUE; - sum = 0; - sensor = null; - startTime = System.currentTimeMillis(); - z_axis_image.setImageResource(R.drawable.phone_z_axis); - y_axis.setImageResource(R.drawable.phone_y_axis); - x_axis.setImageResource(R.drawable.phone_x_axis); - entriesX.clear(); - entriesZ.clear(); - entriesY.clear(); + for (AccelerometerViewFragment fragment : accelerometerViewFragments) { + fragment.clear(); + } } - private void initiateAccelerometerSensor(int type) { - ACCELEROMETER_SENSOR s = ACCELEROMETER_SENSOR.values()[type]; + private void initiateAccelerometerSensor() { resetInstrumentData(); - ScienceLab scienceLab; - switch (s) { - case INBUILT_SENSOR: - sensorManager = (SensorManager) getContext().getSystemService(SENSOR_SERVICE); - sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); - if (sensor == null) { - Toast.makeText(getContext(), getResources().getString(R.string.no_accelerometer_sensor), Toast.LENGTH_LONG).show(); - } else { - float max = sensor.getMaximumRange(); - sensorManager.registerListener(accelerometerSensorEventListener, - sensor, SensorManager.SENSOR_DELAY_FASTEST); - } - break; - case BH1750_SENSOR: - scienceLab = ScienceLabCommon.scienceLab; - if (scienceLab.isConnected()) { - ArrayList data; - try { - I2C i2c = scienceLab.i2c; - data = i2c.scan(null); - if (data.contains(0x23)) { - BH1750 sensorBH1750 = new BH1750(i2c); - sensorBH1750.setRange(String.valueOf(gain)); - sensorType = 0; - } else { - Toast.makeText(getContext(), getResources().getText(R.string.sensor_not_connected_tls), Toast.LENGTH_SHORT).show(); - sensorType = 0; - } - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - } else { - Toast.makeText(getContext(), getResources().getText(R.string.device_not_found), Toast.LENGTH_SHORT).show(); - sensorType = 0; - } - break; - case TSL2561_SENSOR: - scienceLab = ScienceLabCommon.scienceLab; - if (scienceLab.isConnected()) { - try { - I2C i2c = scienceLab.i2c; - ArrayList data; - data = i2c.scan(null); - if (data.contains(0x39)) { - TSL2561 sensorTSL2561 = new TSL2561(i2c, scienceLab); - sensorTSL2561.setGain(String.valueOf(gain)); - sensorType = 2; - } else { - Toast.makeText(getContext(), getResources().getText(R.string.sensor_not_connected_tls), Toast.LENGTH_SHORT).show(); - sensorType = 0; - } - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - } - } else { - Toast.makeText(getContext(), getResources().getText(R.string.device_not_found), Toast.LENGTH_SHORT).show(); - sensorType = 0; - } - break; - default: - break; + sensorManager = (SensorManager) getContext().getSystemService(SENSOR_SERVICE); + sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); + if (sensor == null) { + Toast.makeText(getContext(), getResources().getString(R.string.no_accelerometer_sensor), Toast.LENGTH_LONG).show(); + } else { + sensorManager.registerListener(accelerometerSensorEventListener, + sensor, SensorManager.SENSOR_DELAY_FASTEST); } + } } \ No newline at end of file diff --git a/app/src/main/java/io/pslab/fragment/AccelerometerViewFragment.java b/app/src/main/java/io/pslab/fragment/AccelerometerViewFragment.java new file mode 100644 index 000000000..fa68ac38b --- /dev/null +++ b/app/src/main/java/io/pslab/fragment/AccelerometerViewFragment.java @@ -0,0 +1,187 @@ +package io.pslab.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.github.mikephil.charting.charts.LineChart; +import com.github.mikephil.charting.components.Legend; +import com.github.mikephil.charting.components.XAxis; +import com.github.mikephil.charting.components.YAxis; +import com.github.mikephil.charting.data.Entry; +import com.github.mikephil.charting.data.LineData; + +import java.util.ArrayList; + +import io.pslab.R; + +public class AccelerometerViewFragment extends Fragment { + + private TextView accelerationValue, accelerationMin, accelerationMax; + private LineChart accelerationChart; + private ImageView accelerationAxisImage; + private YAxis y; + private float currentMax = Integer.MIN_VALUE; + private float currentMin = Integer.MAX_VALUE; + private float currentValue = 0; + private ArrayList entries; + private long startTime; + private static int updatePeriod = 100; + private long previousTimeElapsed = (System.currentTimeMillis() - startTime) / updatePeriod; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.accelerometer_list_item, container, false); + + this.accelerationValue = rootView.findViewById(R.id.acceleration_value); + this.accelerationMax = rootView.findViewById(R.id.acceleration_max_text); + this.accelerationMin = rootView.findViewById(R.id.acceleration_min_text); + this.accelerationChart = rootView.findViewById(R.id.chart_accelerometer); + this.accelerationAxisImage = rootView.findViewById(R.id.acceleration_axis_image); + this.entries = new ArrayList<>(); + return rootView; + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + } + + @Override + public void onDetach() { + super.onDetach(); + } + + public ImageView getAccelerationAxisImage() { + return accelerationAxisImage; + } + + public float getCurrentMax() { + return currentMax; + } + + public void setCurrentMax(float currentMax) { + this.currentMax = currentMax; + } + + public float getCurrentMin() { + return currentMin; + } + + public void setCurrentMin(float currentMin) { + this.currentMin = currentMin; + } + + public float getCurrentValue() { + return currentValue; + } + + public void setCurrentValue(float currentValue) { + this.currentValue = currentValue; + } + + public void setUp() { + XAxis x = this.accelerationChart.getXAxis(); + this.y = this.accelerationChart.getAxisLeft(); + YAxis y2 = this.accelerationChart.getAxisRight(); + + this.accelerationChart.setTouchEnabled(true); + this.accelerationChart.setHighlightPerDragEnabled(true); + this.accelerationChart.setDragEnabled(true); + this.accelerationChart.setScaleEnabled(true); + this.accelerationChart.setDrawGridBackground(false); + this.accelerationChart.setPinchZoom(true); + this.accelerationChart.setScaleYEnabled(true); + this.accelerationChart.setBackgroundColor(Color.BLACK); + this.accelerationChart.getDescription().setEnabled(false); + + LineData data = new LineData(); + this.accelerationChart.setData(data); + + Legend l = this.accelerationChart.getLegend(); + l.setForm(Legend.LegendForm.LINE); + l.setTextColor(Color.WHITE); + + x.setTextColor(Color.WHITE); + x.setDrawGridLines(true); + x.setAvoidFirstLastClipping(true); + x.setDrawLabels(false); + + this.y.setTextColor(Color.WHITE); + this.y.setAxisMaximum(currentMax); + this.y.setAxisMinimum(currentMin); + this.y.setDrawGridLines(true); + this.y.setLabelCount(10); + + y2.setDrawGridLines(false); + y2.setMaxWidth(0); + } + + public void addEntry(Entry entry) { + this.entries.add(entry); + } + + public ArrayList getEntries() { + return this.entries; + } + + public void clearEntry() { + this.entries.clear(); + } + + public void setAccelerationValue(CharSequence value) { + this.accelerationValue.setText(value); + } + + public void setAccelerationMax(CharSequence value) { + this.accelerationMax.setText(value); + } + + public void setAccelerationMin(CharSequence value) { + this.accelerationMin.setText(value); + } + + public void setYaxis(float maxLimit) { + this.y.setAxisMaximum(maxLimit); + this.y.setAxisMinimum(-maxLimit); + this.y.setLabelCount(5); + } + + public void setChartData(LineData data) { + this.accelerationChart.setData(data); + this.accelerationChart.notifyDataSetChanged(); + this.accelerationChart.setVisibleXRangeMaximum(3); + this.accelerationChart.moveViewToX(data.getEntryCount()); + this.accelerationChart.invalidate(); + } + + public void clear() { + this.currentMax = Integer.MIN_VALUE; + this.currentMin = Integer.MAX_VALUE; + this.entries.clear(); + this.accelerationChart.clear(); + this.accelerationChart.invalidate(); + this.startTime = System.currentTimeMillis(); + } + + public long getPreviousTimeElapsed() { + return previousTimeElapsed; + } + + public void setPreviousTimeElapsed(long previousTimeElapsed) { + this.previousTimeElapsed = previousTimeElapsed; + } +} diff --git a/app/src/main/java/io/pslab/fragment/GyroscopeViewFragment.java b/app/src/main/java/io/pslab/fragment/GyroscopeViewFragment.java index 148e2a84b..d3d7d281e 100644 --- a/app/src/main/java/io/pslab/fragment/GyroscopeViewFragment.java +++ b/app/src/main/java/io/pslab/fragment/GyroscopeViewFragment.java @@ -54,22 +54,6 @@ public ImageView getGyroAxisImage() { return gyroAxisImage; } - public LineChart getGyroChart() { - return gyroChart; - } - - public TextView getGyroMax() { - return gyroMax; - } - - public TextView getGyroMin() { - return gyroMin; - } - - public TextView getGyroValue() { - return gyroValue; - } - public void setUp() { XAxis x = this.gyroChart.getXAxis(); this.y = this.gyroChart.getAxisLeft(); diff --git a/app/src/main/java/io/pslab/models/AccelerometerData.java b/app/src/main/java/io/pslab/models/AccelerometerData.java index 89b543a11..932ab9ec8 100644 --- a/app/src/main/java/io/pslab/models/AccelerometerData.java +++ b/app/src/main/java/io/pslab/models/AccelerometerData.java @@ -69,6 +69,10 @@ public void setAccelerometerZ(float accelerometer) { this.accelerometer_Z = accelerometer_Z; } + public float[] getAccelerometer(){ + return new float[]{this.accelerometer_X, this.accelerometer_Y, this.accelerometer_Z}; + } + public double getLat() { return lat; } diff --git a/app/src/main/res/layout/accelerometer_list_item.xml b/app/src/main/res/layout/accelerometer_list_item.xml new file mode 100644 index 000000000..d8e9c87db --- /dev/null +++ b/app/src/main/res/layout/accelerometer_list_item.xml @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_accelerometer_data.xml b/app/src/main/res/layout/fragment_accelerometer_data.xml index e42f1c599..f710cd9d8 100644 --- a/app/src/main/res/layout/fragment_accelerometer_data.xml +++ b/app/src/main/res/layout/fragment_accelerometer_data.xml @@ -2,445 +2,32 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_margin="5dp" + /> \ No newline at end of file