Skip to content

Commit 4a191ce

Browse files
neel1998makoteq
authored andcommitted
wave generator preview working fine (fossasia#1959)
1 parent 45dd2b6 commit 4a191ce

File tree

2 files changed

+91
-7
lines changed

2 files changed

+91
-7
lines changed

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

Lines changed: 90 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import android.graphics.drawable.Drawable;
1010
import android.location.Location;
1111
import android.location.LocationManager;
12-
import android.os.Build;
1312
import android.os.Bundle;
1413
import android.os.Handler;
1514
import android.support.annotation.NonNull;
@@ -20,6 +19,7 @@
2019
import android.support.v4.content.ContextCompat;
2120
import android.support.v7.app.AlertDialog;
2221
import android.support.v7.app.AppCompatActivity;
22+
import android.support.v7.widget.Toolbar;
2323
import android.util.DisplayMetrics;
2424
import android.util.Log;
2525
import android.view.GestureDetector;
@@ -29,26 +29,30 @@
2929
import android.view.MotionEvent;
3030
import android.view.View;
3131
import android.view.Window;
32-
import android.view.WindowManager;
3332
import android.widget.Button;
3433
import android.widget.ImageButton;
3534
import android.widget.ImageView;
3635
import android.widget.LinearLayout;
3736
import android.widget.RelativeLayout;
3837
import android.widget.TextView;
3938
import android.widget.Toast;
40-
import android.support.v7.widget.Toolbar;
4139

4240
import com.github.mikephil.charting.charts.LineChart;
41+
import com.github.mikephil.charting.components.Legend;
42+
import com.github.mikephil.charting.data.Entry;
43+
import com.github.mikephil.charting.data.LineData;
44+
import com.github.mikephil.charting.data.LineDataSet;
45+
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
4346
import com.warkiz.widget.IndicatorSeekBar;
4447

48+
import java.util.ArrayList;
4549
import java.util.Date;
50+
import java.util.List;
4651
import java.util.Timer;
4752
import java.util.TimerTask;
4853

4954
import butterknife.BindView;
5055
import butterknife.ButterKnife;
51-
import io.pslab.DataFormatter;
5256
import io.pslab.R;
5357
import io.pslab.communication.ScienceLab;
5458
import io.pslab.models.SensorDataBlock;
@@ -202,6 +206,8 @@ protected void onCreate(Bundle savedInstanceState) {
202206
pwmModeLayout = findViewById(R.id.pwm_mode_layout);
203207
previewChart = findViewById(R.id.chart_preview);
204208

209+
waveBtnActive = WaveConst.WAVE1;
210+
pwmBtnActive = WaveConst.SQR1;
205211
squareModeControls = findViewById(R.id.square_mode_controls);
206212
pwmModeControls = findViewById(R.id.pwm_mode_controls);
207213
csvLogger = new CSVLogger(getString(R.string.wave_generator));
@@ -751,6 +757,7 @@ public void selectBtn(WaveConst btn_selected) {
751757
}
752758
prop_active = null;
753759
toggleSeekBtns(false);
760+
previewWave();
754761
}
755762

756763
private void selectWaveform(final int waveType) {
@@ -778,6 +785,7 @@ private void selectWaveform(final int waveType) {
778785
}
779786
selectedWaveText.setText(waveFormText);
780787
selectedWaveImg.setImageDrawable(image);
788+
previewWave();
781789
}
782790

783791
private void toggleDigitalMode(WaveConst mode) {
@@ -800,6 +808,7 @@ private void toggleDigitalMode(WaveConst mode) {
800808
btnPwmSq4.setEnabled(true);
801809
}
802810
WaveGeneratorCommon.mode_selected = mode;
811+
previewWave();
803812
}
804813

805814
private void fetchPropertyValue(WaveConst btnActive, WaveConst property, String unit, TextView propTextView) {
@@ -897,11 +906,80 @@ private void setValue() {
897906
WaveGeneratorCommon.wave.get(waveBtnActive).put(prop_active, value);
898907
}
899908
setWave();
909+
previewWave();
900910
Double dValue = (double) value;
901911
String valueText = String.valueOf(dValue.intValue()) + " " + unit;
902912
activePropTv.setText(valueText);
903913
}
904914

915+
private void previewWave() {
916+
List<ILineDataSet> dataSets = new ArrayList<>();
917+
ArrayList<Entry> entries = getSamplePoints(false);
918+
ArrayList<Entry> refEntries = getSamplePoints(true);
919+
LineDataSet dataSet;
920+
LineDataSet refDataSet;
921+
if (WaveGeneratorCommon.mode_selected == WaveConst.PWM) {
922+
dataSet = new LineDataSet(entries, pwmBtnActive.toString());
923+
refDataSet = new LineDataSet(refEntries, getResources().getString(R.string.reference_wave_title));
924+
} else {
925+
dataSet = new LineDataSet(entries, waveBtnActive.toString());
926+
refDataSet = new LineDataSet(refEntries, getResources().getString(R.string.reference_wave_title));
927+
}
928+
dataSet.setDrawCircles(false);
929+
dataSet.setColor(Color.WHITE);
930+
refDataSet.setDrawCircles(false);
931+
refDataSet.setColor(Color.GRAY);
932+
dataSets.add(refDataSet);
933+
dataSets.add(dataSet);
934+
LineData data = new LineData(dataSets);
935+
data.setDrawValues(false);
936+
previewChart.setData(data);
937+
previewChart.notifyDataSetChanged();
938+
previewChart.invalidate();
939+
}
940+
941+
private ArrayList<Entry> getSamplePoints(boolean isReference) {
942+
ArrayList<Entry> entries = new ArrayList<>();
943+
if (WaveGeneratorCommon.mode_selected == WaveConst.PWM) {
944+
double freq = (double) WaveGeneratorCommon.wave.get(WaveConst.SQR1).get(WaveConst.FREQUENCY);
945+
double duty = ((double) WaveGeneratorCommon.wave.get(pwmBtnActive).get(WaveConst.DUTY)) / 100;
946+
double phase = 0;
947+
if (pwmBtnActive != WaveConst.SQR1 && !isReference) {
948+
phase = (double) WaveGeneratorCommon.wave.get(pwmBtnActive).get(WaveConst.PHASE);
949+
}
950+
for (int i = 0; i < 5000; i++) {
951+
double t = 2 * Math.PI * freq * (i) / 1e6 + phase * Math.PI / 180;
952+
double y;
953+
if (t % (2 * Math.PI) < 2 * Math.PI * duty) {
954+
y = 5;
955+
} else {
956+
y = -5;
957+
}
958+
entries.add(new Entry((float) i, (float) y));
959+
}
960+
} else {
961+
double phase = 0;
962+
int shape = WaveGeneratorCommon.wave.get(waveBtnActive).get(WaveConst.WAVETYPE);
963+
double freq = (double) WaveGeneratorCommon.wave.get(waveBtnActive).get(WaveConst.FREQUENCY);
964+
965+
if (waveBtnActive != WaveConst.WAVE1 && !isReference) {
966+
phase = (double) WaveGeneratorCommon.wave.get(WaveConst.WAVE2).get(WaveConst.PHASE);
967+
}
968+
if (shape == 1) {
969+
for (int i = 0; i < 5000; i++) {
970+
float y = (float) (5 * Math.sin(2 * Math.PI * (freq / 1e6) * i + phase * Math.PI / 180));
971+
entries.add(new Entry((float) i, y));
972+
}
973+
} else {
974+
for (int i = 0; i < 5000; i++) {
975+
float y = (float) ((10 / Math.PI) * (Math.asin(Math.sin(2 * Math.PI * (freq / 1e6) * i + phase * Math.PI / 180))));
976+
entries.add(new Entry((float) i, y));
977+
}
978+
}
979+
}
980+
return entries;
981+
}
982+
905983
private void chartInit() {
906984
previewChart.setTouchEnabled(true);
907985
previewChart.setHighlightPerDragEnabled(true);
@@ -912,13 +990,18 @@ private void chartInit() {
912990
previewChart.setScaleYEnabled(false);
913991
previewChart.setBackgroundColor(Color.BLACK);
914992
previewChart.getDescription().setEnabled(false);
915-
previewChart.getXAxis().setAxisMaximum(1000);
993+
previewChart.getXAxis().setAxisMaximum(5000);
916994
previewChart.getXAxis().setAxisMinimum(0);
917995
previewChart.getXAxis().setTextColor(Color.WHITE);
918-
previewChart.getAxisLeft().setAxisMaximum(5);
919-
previewChart.getAxisLeft().setAxisMinimum(-5);
996+
previewChart.getAxisLeft().setAxisMaximum(10);
997+
previewChart.getAxisLeft().setAxisMinimum(-10);
998+
previewChart.getAxisRight().setAxisMaximum(10);
999+
previewChart.getAxisRight().setAxisMinimum(-10);
9201000
previewChart.fitScreen();
9211001
previewChart.invalidate();
1002+
Legend l = previewChart.getLegend();
1003+
l.setForm(Legend.LegendForm.LINE);
1004+
l.setTextColor(Color.WHITE);
9221005
}
9231006

9241007
private void toggleSeekBtns(boolean state) {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,7 @@
682682
<string name="duty_holder_text">50 %</string>
683683
<string name="open_instrument">Open instrument</string>
684684

685+
<string name="reference_wave_title">Reference</string>
685686
<string name="built_in_mic_option">In-Built MIC</string>
686687
<string name="pslab_mic_option">PSLab MIC</string>
687688
<string name="sine">Sine</string>

0 commit comments

Comments
 (0)