@@ -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