Skip to content

Commit ca3b4c8

Browse files
neel1998CloudyPadmal
authored andcommitted
feature to see altitude from pressure added in Barometer (#1924)
1 parent 1568f2f commit ca3b4c8

File tree

7 files changed

+117
-26
lines changed

7 files changed

+117
-26
lines changed

app/src/main/java/io/pslab/activity/DataLoggerActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ private RealmObject getObject(String objectType, String[] data, long time, long
261261
returnObject = new LuxData(time, block, Float.valueOf(data[2]), Double.valueOf(data[3]), Double.valueOf(data[4]));
262262
break;
263263
case "Barometer":
264-
returnObject = new BaroData(time, block, Float.valueOf(data[2]), Double.valueOf(data[3]), Double.valueOf(data[4]));
264+
returnObject = new BaroData(time, block, Float.valueOf(data[2]), Float.valueOf(data[3]), Double.valueOf(data[4]), Double.valueOf(data[5]));
265265
break;
266266
case "Accelerometer":
267267
returnObject = new AccelerometerData(time, block, Float.valueOf(data[2]), Float.valueOf(data[3]), Float.valueOf(data[4]), Double.valueOf(data[5]), Double.valueOf(data[6]));

app/src/main/java/io/pslab/adapters/SensorLoggerListAdapter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ private void populateMapData(SensorDataBlock block) {
313313
JSONObject i = new JSONObject();
314314
i.put("date", CSVLogger.FILE_NAME_FORMAT.format(d.getTime()));
315315
i.put("data", d.getBaro());
316+
i.put("altitude", d.getAltitude());
316317
i.put("lon", d.getLon());
317318
i.put("lat", d.getLat());
318319
if (d.getLat() != 0.0 && d.getLon() != 0.0) array.put(i);

app/src/main/java/io/pslab/fragment/BaroMeterDataFragment.java

Lines changed: 89 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@
2929
import com.github.mikephil.charting.data.Entry;
3030
import com.github.mikephil.charting.data.LineData;
3131
import com.github.mikephil.charting.data.LineDataSet;
32+
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
3233

3334
import java.io.File;
3435
import java.io.FileNotFoundException;
3536
import java.io.FileOutputStream;
3637
import java.io.IOException;
3738
import java.util.ArrayList;
3839
import java.util.Date;
40+
import java.util.List;
3941
import java.util.Locale;
4042
import java.util.Timer;
4143
import java.util.TimerTask;
@@ -87,21 +89,26 @@ private enum BARO_SENSOR {INBUILT_SENSOR, BMP180_SENSOR}
8789
LineChart mChart;
8890
@BindView(R.id.baro_meter)
8991
PointerSpeedometer baroMeter;
92+
@BindView(R.id.alti_value)
93+
TextView altiValue;
9094

9195
private Timer graphTimer;
9296
private SensorManager sensorManager;
9397
private Sensor sensor;
9498
private long startTime, block;
95-
private ArrayList<Entry> entries;
99+
private ArrayList<Entry> pressureEntries;
100+
private ArrayList<Entry> altitudeEntries;
96101
private ArrayList<BaroData> recordedBaroArray;
97102
private BaroData sensorData;
98103
private float currentMin = 2;
99104
private float currentMax = 0.5f;
100105
private YAxis y;
106+
private YAxis y2;
101107
private Unbinder unbinder;
102108
private long previousTimeElapsed = (System.currentTimeMillis() - startTime) / updatePeriod;
103109
private BarometerActivity baroSensor;
104110
private View rootView;
111+
private String csvHeader = "Timestamp,DateTime,Pressure,Altitude,Latitude,Longitude";
105112

106113
public static BaroMeterDataFragment newInstance() {
107114
return new BaroMeterDataFragment();
@@ -117,7 +124,8 @@ public static void setParameters(float highLimit, int updatePeriod, String type)
117124
public void onCreate(Bundle savedInstanceState) {
118125
super.onCreate(savedInstanceState);
119126
startTime = System.currentTimeMillis();
120-
entries = new ArrayList<>();
127+
pressureEntries = new ArrayList<>();
128+
altitudeEntries = new ArrayList<>();
121129
baroSensor = (BarometerActivity) getActivity();
122130
}
123131

@@ -149,7 +157,8 @@ public void onResume() {
149157
count = 0;
150158
currentMin = 2;
151159
currentMax = 0.5f;
152-
entries.clear();
160+
pressureEntries.clear();
161+
altitudeEntries.clear();
153162
mChart.clear();
154163
mChart.invalidate();
155164
initiateBaroSensor(sensorType);
@@ -181,23 +190,37 @@ private void plotAllRecordedData() {
181190
currentMin = d.getBaro();
182191
}
183192
Entry entry = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getBaro());
184-
entries.add(entry);
193+
pressureEntries.add(entry);
194+
altitudeEntries.add(new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAltitude()));
195+
altiValue.setText(String.format(Locale.getDefault(), PSLabSensor.BAROMETER_DATA_FORMAT, d.getAltitude()));
185196
baroMeter.setWithTremble(false);
186197
baroMeter.setSpeedAt(d.getBaro());
187198
sum += entry.getY();
188199
}
189200
y.setAxisMaximum(currentMax);
190201
y.setAxisMinimum(currentMin);
191202
y.setLabelCount(10);
203+
y2.setAxisMaximum(getAltitude(currentMax));
204+
y2.setAxisMinimum(getAltitude(currentMin));
205+
y2.setLabelCount(10);
192206
statMax.setText(String.format(Locale.getDefault(), PSLabSensor.BAROMETER_DATA_FORMAT, currentMax));
193207
statMin.setText(String.format(Locale.getDefault(), PSLabSensor.BAROMETER_DATA_FORMAT, currentMin));
194208
statMean.setText(String.format(Locale.getDefault(), PSLabSensor.BAROMETER_DATA_FORMAT, (sum / recordedBaroArray.size())));
195209

196-
LineDataSet dataSet = new LineDataSet(entries, getString(R.string.baro_unit));
210+
List<ILineDataSet> dataSets = new ArrayList<>();
211+
LineDataSet dataSet = new LineDataSet(pressureEntries, getString(R.string.baro_unit));
197212
dataSet.setDrawCircles(false);
198213
dataSet.setDrawValues(false);
199214
dataSet.setLineWidth(2);
200-
LineData data = new LineData(dataSet);
215+
dataSets.add(dataSet);
216+
217+
dataSet = new LineDataSet(altitudeEntries, getString(R.string.alti_unit));
218+
dataSet.setDrawCircles(false);
219+
dataSet.setDrawValues(false);
220+
dataSet.setLineWidth(2);
221+
dataSet.setColor(Color.YELLOW);
222+
dataSets.add(dataSet);
223+
LineData data = new LineData(dataSets);
201224

202225
mChart.setData(data);
203226
mChart.notifyDataSetChanged();
@@ -251,20 +274,34 @@ public void run() {
251274
y.setAxisMaximum(currentMax);
252275
y.setAxisMinimum(currentMin);
253276
y.setLabelCount(10);
277+
y2.setAxisMaximum(getAltitude(currentMax));
278+
y2.setAxisMinimum(getAltitude(currentMin));
279+
y2.setLabelCount(10);
254280
baroMeter.setWithTremble(false);
255281
baroMeter.setSpeedAt(d.getBaro());
256282

257283
Entry entry = new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getBaro());
258-
entries.add(entry);
284+
pressureEntries.add(entry);
285+
altitudeEntries.add(new Entry((float) (d.getTime() - d.getBlock()) / 1000, d.getAltitude()));
259286
count++;
260287
sum += entry.getY();
261288
statMean.setText(DataFormatter.formatDouble((sum / count), PSLabSensor.BAROMETER_DATA_FORMAT));
289+
altiValue.setText(String.format(Locale.getDefault(), PSLabSensor.BAROMETER_DATA_FORMAT, d.getAltitude()));
262290

263-
LineDataSet dataSet = new LineDataSet(entries, getString(R.string.baro_unit));
291+
List<ILineDataSet> dataSets = new ArrayList<>();
292+
LineDataSet dataSet = new LineDataSet(pressureEntries, getString(R.string.baro_unit));
264293
dataSet.setDrawCircles(false);
265294
dataSet.setDrawValues(false);
266295
dataSet.setLineWidth(2);
267-
LineData data = new LineData(dataSet);
296+
dataSets.add(dataSet);
297+
298+
dataSet = new LineDataSet(altitudeEntries, getString(R.string.alti_unit));
299+
dataSet.setDrawCircles(false);
300+
dataSet.setDrawValues(false);
301+
dataSet.setLineWidth(2);
302+
dataSet.setColor(Color.YELLOW);
303+
dataSets.add(dataSet);
304+
LineData data = new LineData(dataSets);
268305

269306
mChart.setData(data);
270307
mChart.notifyDataSetChanged();
@@ -309,7 +346,7 @@ public void stopData() {
309346
graphTimer = null;
310347
}
311348
recordedBaroArray.clear();
312-
entries.clear();
349+
pressureEntries.clear();
313350
plotAllRecordedData();
314351
baroSensor.startedPlay = false;
315352
baroSensor.playingData = false;
@@ -320,11 +357,12 @@ public void stopData() {
320357
public void saveGraph() {
321358
baroSensor.csvLogger.prepareLogFile();
322359
baroSensor.csvLogger.writeMetaData(getResources().getString(R.string.baro_meter));
323-
baroSensor.csvLogger.writeCSVFile("Timestamp,DateTime,Readings,Latitude,Longitude");
360+
baroSensor.csvLogger.writeCSVFile(csvHeader);
324361
for (BaroData baroData : baroSensor.recordedBaroData) {
325362
baroSensor.csvLogger.writeCSVFile(baroData.getTime() + ","
326363
+ CSVLogger.FILE_NAME_FORMAT.format(new Date(baroData.getTime())) + ","
327364
+ baroData.getBaro() + ","
365+
+ baroData.getAltitude() + ","
328366
+ baroData.getLat() + ","
329367
+ baroData.getLon());
330368
}
@@ -343,7 +381,7 @@ private void setupInstruments() {
343381
baroMeter.setMaxSpeed(PreferenceManager.getDefaultSharedPreferences(getActivity()).getFloat(baroSensor.BAROMETER_LIMIT, 2));
344382
XAxis x = mChart.getXAxis();
345383
this.y = mChart.getAxisLeft();
346-
YAxis y2 = mChart.getAxisRight();
384+
this.y2 = mChart.getAxisRight();
347385

348386
mChart.setTouchEnabled(true);
349387
mChart.setHighlightPerDragEnabled(true);
@@ -372,8 +410,11 @@ private void setupInstruments() {
372410
y.setDrawGridLines(true);
373411
y.setLabelCount(10);
374412

375-
y2.setDrawGridLines(false);
376-
y2.setMaxWidth(0);
413+
y2.setTextColor(Color.WHITE);
414+
y2.setAxisMinimum(getAltitude(currentMin));
415+
y2.setAxisMaximum(getAltitude(currentMax));
416+
y2.setDrawGridLines(true);
417+
y2.setLabelCount(10);
377418
}
378419

379420
@Override
@@ -416,7 +457,7 @@ private void writeLogToFile(long timestamp, float sensorReading) {
416457
if (getActivity() != null && baroSensor.isRecording) {
417458
if (baroSensor.writeHeaderToFile) {
418459
baroSensor.csvLogger.prepareLogFile();
419-
baroSensor.csvLogger.writeCSVFile("Timestamp,DateTime,Readings,Latitude,Longitude");
460+
baroSensor.csvLogger.writeCSVFile(csvHeader);
420461
block = timestamp;
421462
baroSensor.recordSensorDataBlockID(new SensorDataBlock(timestamp, baroSensor.getSensorName()));
422463
baroSensor.writeHeaderToFile = !baroSensor.writeHeaderToFile;
@@ -425,13 +466,13 @@ private void writeLogToFile(long timestamp, float sensorReading) {
425466
String dateTime = CSVLogger.FILE_NAME_FORMAT.format(new Date(timestamp));
426467
Location location = baroSensor.gpsLogger.getDeviceLocation();
427468
baroSensor.csvLogger.writeCSVFile(timestamp + "," + dateTime + ","
428-
+ sensorReading + "," + location.getLatitude() + "," + location.getLongitude());
429-
sensorData = new BaroData(timestamp, block, baroValue, location.getLatitude(), location.getLongitude());
469+
+ sensorReading + "," + getAltitude(sensorReading) + "," + location.getLatitude() + "," + location.getLongitude());
470+
sensorData = new BaroData(timestamp, block, baroValue, getAltitude(baroValue), location.getLatitude(), location.getLongitude());
430471
} else {
431472
String dateTime = CSVLogger.FILE_NAME_FORMAT.format(new Date(timestamp));
432473
baroSensor.csvLogger.writeCSVFile(timestamp + "," + dateTime + ","
433-
+ sensorReading + ",0.0,0.0");
434-
sensorData = new BaroData(timestamp, block, baroValue, 0.0, 0.0);
474+
+ sensorReading + "," + getAltitude(sensorReading) + ",0.0,0.0");
475+
sensorData = new BaroData(timestamp, block, baroValue, getAltitude(baroValue), 0.0, 0.0);
435476
}
436477
baroSensor.recordSensorData(sensorData);
437478
} else {
@@ -451,6 +492,9 @@ private void visualizeData() {
451492
y.setAxisMaximum(currentMax);
452493
y.setAxisMinimum(currentMin);
453494
y.setLabelCount(10);
495+
y2.setAxisMaximum(getAltitude(currentMax));
496+
y2.setAxisMinimum(getAltitude(currentMin));
497+
y2.setLabelCount(10);
454498
if (baroValue >= 0) {
455499
baroMeter.setWithTremble(false);
456500
baroMeter.setSpeedAt(baroValue);
@@ -465,16 +509,28 @@ private void visualizeData() {
465509
Entry entry = new Entry((float) timeElapsed, baroValue);
466510
Long currentTime = System.currentTimeMillis();
467511
writeLogToFile(currentTime, baroValue);
468-
entries.add(entry);
512+
pressureEntries.add(entry);
513+
altitudeEntries.add(new Entry((float) timeElapsed, getAltitude(baroValue)));
469514

470515
count++;
471516
sum += entry.getY();
472517
statMean.setText(DataFormatter.formatDouble((sum / count), PSLabSensor.BAROMETER_DATA_FORMAT));
473-
LineDataSet dataSet = new LineDataSet(entries, getString(R.string.baro_unit));
518+
altiValue.setText(String.format(Locale.getDefault(), PSLabSensor.BAROMETER_DATA_FORMAT, getAltitude(baroValue)));
519+
520+
List<ILineDataSet> dataSets = new ArrayList<>();
521+
LineDataSet dataSet = new LineDataSet(pressureEntries, getString(R.string.baro_unit));
474522
dataSet.setDrawCircles(false);
475523
dataSet.setDrawValues(false);
476524
dataSet.setLineWidth(2);
477-
LineData data = new LineData(dataSet);
525+
dataSets.add(dataSet);
526+
527+
dataSet = new LineDataSet(altitudeEntries, getString(R.string.alti_unit));
528+
dataSet.setDrawCircles(false);
529+
dataSet.setDrawValues(false);
530+
dataSet.setLineWidth(2);
531+
dataSet.setColor(Color.YELLOW);
532+
dataSets.add(dataSet);
533+
LineData data = new LineData(dataSets);
478534

479535
mChart.setData(data);
480536
mChart.notifyDataSetChanged();
@@ -512,9 +568,11 @@ private void resetInstrumentData() {
512568
statMax.setText(DataFormatter.formatDouble(0, DataFormatter.LOW_PRECISION_FORMAT));
513569
statMin.setText(DataFormatter.formatDouble(0, DataFormatter.LOW_PRECISION_FORMAT));
514570
statMean.setText(DataFormatter.formatDouble(0, DataFormatter.LOW_PRECISION_FORMAT));
571+
altiValue.setText(DataFormatter.formatDouble(0, DataFormatter.LOW_PRECISION_FORMAT));
515572
baroMeter.setSpeedAt(0);
516573
baroMeter.setWithTremble(false);
517-
entries.clear();
574+
pressureEntries.clear();
575+
altitudeEntries.clear();
518576
}
519577

520578
private void initiateBaroSensor(int type) {
@@ -564,4 +622,12 @@ private void initiateBaroSensor(int type) {
564622
break;
565623
}
566624
}
625+
626+
private float getAltitude(float pressure) {
627+
if (pressure <= 0.0) {
628+
return 0;
629+
} else {
630+
return (float) (44330 * (1 - Math.pow(pressure, 1.0 / 5.255)));
631+
}
632+
}
567633
}

app/src/main/java/io/pslab/models/BaroData.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@ public class BaroData extends RealmObject {
1313
private long time;
1414
private long block;
1515
private float baro;
16+
private float altitude;
1617
private double lat, lon;
1718

1819
public BaroData() {/**/}
1920

20-
public BaroData(long time, long block, float baro, double lat, double lon) {
21+
public BaroData(long time, long block, float baro, float altitude, double lat, double lon) {
2122
this.time = time;
2223
this.block = block;
2324
this.baro = baro;
25+
this.altitude = altitude;
2426
this.lat = lat;
2527
this.lon = lon;
2628
}
@@ -49,6 +51,14 @@ public void setBaro(float baro) {
4951
this.baro = baro;
5052
}
5153

54+
public float getAltitude() {
55+
return altitude;
56+
}
57+
58+
public void setAltitude(float altitude) {
59+
this.altitude = altitude;
60+
}
61+
5262
public double getLat() {
5363
return lat;
5464
}
@@ -67,6 +77,6 @@ public void setLon(double lon) {
6777

6878
@Override
6979
public String toString() {
70-
return "Block - " + block + ", Time - " + time + ", Baro - " + baro + ", Lat - " + lat + ", Lon - " + lon;
80+
return "Block - " + block + ", Time - " + time + ", Baro - " + baro + ", Altitude - " + altitude + ", Lat - " + lat + ", Lon - " + lon;
7181
}
7282
}

app/src/main/res/layout/fragment_barometer_data.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,17 @@
5757
android:id="@+id/baro_avg"
5858
style="@style/baro_meter_stat_display" />
5959

60+
<TextView
61+
android:id="@+id/label_alti_stat_avg"
62+
style="@style/baro_meter_stat_heading"
63+
android:text="@string/avg_alti" />
64+
65+
<TextView
66+
android:id="@+id/alti_value"
67+
style="@style/baro_meter_stat_display"
68+
android:layout_marginBottom="@dimen/baro_altitude_box_margin"
69+
/>
70+
6071
</LinearLayout>
6172

6273
<LinearLayout

app/src/main/res/values/dimens.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@
282282
<dimen name="baro_display_font_size">16sp</dimen>
283283
<dimen name="baro_guage_font_size">8sp</dimen>
284284
<dimen name="baro_sensor_label_title_size">16sp</dimen>
285+
<dimen name="baro_altitude_box_margin">10dp</dimen>
285286

286287
<dimen name="gas_sensor_label_title_size">16sp</dimen>
287288

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,8 +898,10 @@
898898
<string name="delete_all">Delete All Data</string>
899899
<string name="delete_all_message">Are You Sure?</string>
900900
<string name="baro_meter">Barometer</string>
901+
<string name="alti_unit">m</string>
901902
<string name="baro_unit">atm</string>
902903
<string name="avg_baro">Avg (atm)</string>
904+
<string name="avg_alti">Altitude (m)</string>
903905
<string name="min_baro">Min (atm)</string>
904906
<string name="max_baro">Max (atm)</string>
905907
<string name="baro_meter_description">Measures the atmospheric pressure</string>

0 commit comments

Comments
 (0)