Skip to content

Commit 08383cc

Browse files
authored
feat: added Triggering Controls (#2482)
1 parent 510ccdc commit 08383cc

File tree

3 files changed

+195
-41
lines changed

3 files changed

+195
-41
lines changed

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

Lines changed: 61 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ public class OscilloscopeActivity extends GuideActivity implements View.OnClickL
122122
public static boolean isInBuiltMicSelected;
123123
public boolean isAudioInputSelected;
124124
public boolean isTriggerSelected;
125+
public boolean isTriggered;
125126
public boolean isFourierTransformSelected;
126127
public boolean isXYPlotSelected;
127128
private boolean isDataAnalysisFragSelected;
@@ -130,6 +131,7 @@ public class OscilloscopeActivity extends GuideActivity implements View.OnClickL
130131
public boolean isCH1FrequencyRequired;
131132
public boolean isCH2FrequencyRequired;
132133
public String triggerChannel;
134+
public String triggerMode;
133135
public String curveFittingChannel1;
134136
public String curveFittingChannel2;
135137
public String xyPlotXAxisChannel;
@@ -211,6 +213,8 @@ public class OscilloscopeActivity extends GuideActivity implements View.OnClickL
211213

212214
private enum CHANNEL {CH1, CH2, CH3, MIC}
213215

216+
private enum MODE {RISING, FALLING, DUAL}
217+
214218
public OscilloscopeActivity() {
215219
super(R.layout.activity_oscilloscope);
216220
}
@@ -975,20 +979,21 @@ protected Void doInBackground(String... channels) {
975979
try {
976980
double[] xData;
977981
double[] yData;
982+
double xValue;
978983
ArrayList<String[]> yDataString = new ArrayList<>();
979984
String[] xDataString = null;
980985
maxAmp = 0;
981-
scienceLab.captureTraces(4, samples, timeGap, channel, isTriggerSelected, null);
986+
scienceLab.captureTraces(4, samples, timeGap, channel, false, null);
982987
Thread.sleep((long) (samples * timeGap * 1e-3));
983988
for (int i = 0; i < noOfChannels; i++) {
984989
entries.add(new ArrayList<>());
985990
channel = channels[i];
991+
isTriggered = false;
986992
HashMap<String, double[]> data;
987-
if (triggerChannel.equals(channel))
988-
scienceLab.configureTrigger(channelIndexMap.get(channel), channel, trigger, null, null);
989993
data = scienceLab.fetchTrace(channelIndexMap.get(channel));
990994
xData = data.get("x");
991995
yData = data.get("y");
996+
xValue = xData[0];
992997
int n = Math.min(xData.length, yData.length);
993998
xDataString = new String[n];
994999
yDataString.add(new String[n]);
@@ -1003,10 +1008,34 @@ protected Void doInBackground(String... channels) {
10031008
double factor = samples * timeGap * 1e-3;
10041009
maxFreq = (n / 2 - 1) / factor;
10051010
double mA = 0;
1011+
double prevY = yData[0];
1012+
boolean increasing = false;
10061013
for (int j = 0; j < n; j++) {
1014+
double currY = yData[j];
10071015
xData[j] = xData[j] / ((timebase == 875) ? 1 : 1000);
10081016
if (!isFourierTransformSelected) {
1009-
entries.get(i).add(new Entry((float) xData[j], (float) yData[j]));
1017+
if (isTriggerSelected && triggerChannel.equals(channel)) {
1018+
if (currY > prevY) {
1019+
increasing = true;
1020+
} else if (currY < prevY && increasing) {
1021+
increasing = false;
1022+
}
1023+
if (isTriggered) {
1024+
double k = xValue / ((timebase == 875) ? 1 : 1000);
1025+
entries.get(i).add(new Entry((float) k, (float) yData[j]));
1026+
xValue += timeGap;
1027+
}
1028+
if (Objects.equals(triggerMode, MODE.RISING.toString()) && prevY < trigger && currY >= trigger && increasing) {
1029+
isTriggered = true;
1030+
} else if (Objects.equals(triggerMode, MODE.FALLING.toString()) && prevY > trigger && currY <= trigger && !increasing) {
1031+
isTriggered = true;
1032+
} else if (Objects.equals(triggerMode, MODE.DUAL.toString()) && ((prevY < trigger && currY >= trigger && increasing) || (prevY > trigger && currY <= trigger && !increasing))) {
1033+
isTriggered = true;
1034+
}
1035+
prevY = currY;
1036+
} else {
1037+
entries.get(i).add(new Entry((float) xData[j], (float) yData[j]));
1038+
}
10101039
} else {
10111040
if (j < n / 2) {
10121041
float y = (float) fftOut[j].abs() / samples;
@@ -1071,6 +1100,7 @@ protected Void doInBackground(String... channels) {
10711100

10721101
if (isInBuiltMicSelected) {
10731102
noOfChannels++;
1103+
isTriggered = false;
10741104
entries.add(new ArrayList<>());
10751105
if (audioJack == null) {
10761106
audioJack = new AudioJack("input");
@@ -1094,15 +1124,41 @@ protected Void doInBackground(String... channels) {
10941124
if (xDataString == null) {
10951125
xDataString = new String[n];
10961126
}
1127+
float prevY = (float) map(buffer[0], -32768, 32767, -3, 3);
1128+
boolean increasing = false;
1129+
double xDataPoint = 0;
10971130
for (int i = 0; i < n; i++) {
10981131
float j = (float) (((double) i / SAMPLING_RATE) * 1000000.0);
10991132
j = j / ((timebase == 875) ? 1 : 1000);
11001133
float audioValue = (float) map(buffer[i], -32768, 32767, -3, 3);
1134+
float currY = audioValue;
11011135
if (!isFourierTransformSelected) {
11021136
if (noOfChannels == 1) {
11031137
xDataString[i] = String.valueOf(j);
11041138
}
1105-
entries.get(entries.size() - 1).add(new Entry(j, audioValue));
1139+
if (isTriggerSelected && triggerChannel.equals(CHANNEL.MIC.toString())) {
1140+
if (currY > prevY) {
1141+
increasing = true;
1142+
} else if (currY < prevY) {
1143+
increasing = false;
1144+
}
1145+
if (Objects.equals(triggerMode, MODE.RISING.toString()) && prevY < trigger && currY >= trigger && increasing) {
1146+
isTriggered = true;
1147+
} else if (Objects.equals(triggerMode, MODE.FALLING.toString()) && prevY > trigger && currY <= trigger && !increasing) {
1148+
isTriggered = true;
1149+
} else if (Objects.equals(triggerMode, MODE.DUAL.toString()) && ((prevY < trigger && currY >= trigger && increasing) || (prevY > trigger && currY <= trigger && !increasing))) {
1150+
isTriggered = true;
1151+
}
1152+
if (isTriggered) {
1153+
float k = (float) ((xDataPoint / SAMPLING_RATE) * 1000000.0);
1154+
k = k / ((timebase == 875) ? 1 : 1000);
1155+
entries.get(entries.size() - 1).add(new Entry(k, audioValue));
1156+
xDataPoint++;
1157+
}
1158+
prevY = currY;
1159+
} else {
1160+
entries.get(entries.size() - 1).add(new Entry(j, audioValue));
1161+
}
11061162
} else {
11071163
if (i < n / 2) {
11081164
float y = (float) fftOut[i].abs() / samples;

0 commit comments

Comments
 (0)