ESP32_Scope/ESP32_Oscilloscope/options_handler.ino

327 lines
5.7 KiB
C++

int voltage_division[6] = { //screen has 4 divisions, 31 pixels each (125 pixels of height)
550, //fullscreen 3.3V peak-peak
500,
375,
180,
100,
50
};
/*each sample represents 1us (1Msps),
thus, the time division is the number
of samples per screen division
*/
float time_division[9] = { //screen has 4 divisions, 60 pixel each (WIDTH pixel of width)
10,
25,
50,
100,
250,
500,
1000,
2500,
5000
};
//, //1Mhz 35ms of data (of 50ms possible)
// 10000, //100khz 70ms/500ms
// 25000, //100khz 175ms/500ms of data
// 50000, //100khz 350ms/500ms of data
// 100000 //50khz 700ms/1000ms of data
//};
void menu_handler() {
button();
}
void button()
{
if (btnok == 1 || btnbk == 1 || btnpl == 1 || btnmn == 1)
{
menu_action = true;
}
if (menu == true)
{
if (set_value)
{
switch (opt)
{
case Vdiv:
if (btnpl == 1)
{
volts_index++;
if (volts_index >= sizeof(voltage_division) / sizeof(*voltage_division))
{
volts_index = 0;
}
btnpl = 0;
}
else if (btnmn == 1)
{
volts_index--;
if (volts_index < 0)
{
volts_index = sizeof(voltage_division) / sizeof(*voltage_division) - 1;
}
btnmn = 0;
}
v_div = voltage_division[volts_index];
break;
case Sdiv:
if (btnmn == 1)
{
tscale_index++;
if (tscale_index >= sizeof(time_division) / sizeof(*time_division))
{
tscale_index = 0;
}
btnmn = 0;
}
else if (btnpl == 1)
{
tscale_index--;
if (tscale_index < 0)
{
tscale_index = sizeof(time_division) / sizeof(*time_division) - 1;
}
btnpl = 0;
}
s_div = time_division[tscale_index];
break;
case Offset:
if (btnmn == 1)
{
offset += 0.1 * (v_div * 4) / 3300;
btnmn = 0;
}
else if (btnpl == 1)
{
offset -= 0.1 * (v_div * 4) / 3300;
btnpl = 0;
}
if (offset > 3.3)
offset = 3.3;
if (offset < -3.3)
offset = -3.3;
break;
case TOffset:
if (btnpl == 1)
{
toffset += 0.1 * s_div;
btnpl = 0;
}
else if (btnmn == 1)
{
toffset -= 0.1 * s_div;
btnmn = 0;
}
break;
default:
break;
}
if (btnbk == 1)
{
set_value = 0;
btnbk = 0;
btnok = 0;
}
}
else
{
if (btnpl == 1)
{
opt++;
if (opt > Single)
{
opt = 1;
}
//Serial.print("option : ");
//Serial.println(opt);
btnpl = 0;
}
if (btnmn == 1)
{
opt--;
if (opt < 1)
{
opt = 9;
}
//Serial.print("option : ");
//Serial.println(opt);
btnmn = 0;
}
if (btnbk == 1)
{
hide_menu();
btnbk = 0;
}
if (btnok == 1)
{
switch (opt)
{
case Autoscale:
auto_scale = !auto_scale;
break;
case Vdiv:
case Sdiv:
case Offset:
case TOffset:
set_value = true;
break;
case Stop:
stop = !stop;
//Serial.print("Stop : ");
//Serial.println(stop);
set_value = false;
break;
case Single:
single_trigger = true;
set_value = false;
break;
case Reset:
offset = 0;
v_div = 550;
s_div = 10;
tscale_index = 0;
volts_index = 0;
break;
case Probe:
break;
case Mode:
digital_wave_option++;
if (digital_wave_option > 2)
digital_wave_option = 0;
break;
case Filter:
current_filter++;
if (current_filter > 3)
current_filter = 0;
break;
default:
break;
}
btnok = 0;
}
}
}
else
{
if (btnok == 1)
{
opt = 1;
show_menu();
btnok = 0;
}
if (btnbk == 1)
{
if (info == true)
{
hide_all();
}
else
{
info = true;
}
btnbk = 0;
}
if (btnpl == 1)
{
volts_index++;
if (volts_index >= sizeof(voltage_division) / sizeof(*voltage_division))
{
volts_index = 0;
}
btnpl = 0;
v_div = voltage_division[volts_index];
}
if (btnmn == 1)
{
tscale_index++;
if (tscale_index >= sizeof(time_division) / sizeof(*time_division))
{
tscale_index = 0;
}
btnmn = 0;
s_div = time_division[tscale_index];
}
}
}
void hide_menu()
{
menu = false;
}
void hide_all()
{
menu = false;
info = false;
}
void show_menu()
{
menu = true;
}
String strings_vdiv()
{
return "";
}
String strings_sdiv()
{
return "";
}
String strings_offset()
{
return "";
}
String strings_toffset()
{
return "";
}
String strings_freq()
{
return "";
}
String strings_peak()
{
return "";
}
String strings_vmax()
{
return "";
}
String strings_vmin()
{
return "";
}
String strings_filter()
{
return "";
}