-
Notifications
You must be signed in to change notification settings - Fork 0
/
k3-meter.ino
135 lines (99 loc) · 2.68 KB
/
k3-meter.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/***************************************************
* Multi-instrumento
*
* Author: Pavel Milanes Costa
* Email: pavelmc@gmail.com
****************************************************/
// make a read every 100 msec and average it
void powerMeasureAndShow() {
// check if we need to measure
if (millis() > nextMeasure) {
// then we need to measure
// voltage at the load
meterRead();
// print it
printLevelmV();
printLevelmW();
printLeveldBm();
// reset the next measure
nextMeasure = millis() + MEASURE_INTERVAL;
}
}
// show the interface
void showMeterMode() {
// outer box
drawMainVFObox();
// mV level as main
printLevelmV();
// main VFO in the pos of the sub
subFreqPrint(false);
// step print
stepPrint();
}
// print level in mV at load
void printLevelmV() {
// the value is expected in vm as milli Volts
// clan print buffers
cleanPrintbuffer();
// load the value to the temp buffer
ltoa(vm, t, DEC);
// prep the print buffer
byte l = strlen(t);
prepValue4Print(l);
// add the mv at the end
if (l < 6) strcat(f, " mV");
else strcat(f, " V");
// 2 empty chars at the end
strncat(f, &empty[0], 2);
// set and prepare
tft.setCursor(20, 30);
tft.setTextColor(ILI9340_YELLOW, ILI9340_BLACK);
tft.setTextSize(4);
// print it
tft.print(f);
}
// print level in mW at load
void printLevelmW() {
// calc
word mW = tomW(vm);
// reset the print buffers
cleanPrintbuffer();
// load the value to the temp buffer
ltoa(mW, t, DEC);
// prep the print buffer
prepValue4Print(strlen(t));
// add the unit, as we will measure tops 0.5W, we will
// use just mW
strcat(f, " mW");
// 2 empty chars at the end
strncat(f, &empty[0], 2);
// set and prepare
tft.setCursor(20, 100);
tft.setTextColor(ILI9340_YELLOW, ILI9340_BLACK);
tft.setTextSize(4);
// print it
tft.print(f);
}
// print level in dBm at load.
// WATCH OUT! it has limited resolution by the way it's calculated
void printLeveldBm() {
// calc
long dBm = todBm(tomW(vm));
// reset the print buffers
cleanPrintbuffer();
// load the value to the temp buffer
itoa(dBm, t, DEC);
// prep the print buffer
prepValue4Print(strlen(t));
// add the unit, as we will measure tops 0.5W, we will
// use just mW
strcat(f, " dBm");
// 2 empty chars at the end
strncat(f, &empty[0], 2);
// set and prepare
tft.setCursor(20, 140);
tft.setTextColor(ILI9340_YELLOW, ILI9340_BLACK);
tft.setTextSize(4);
// print it
tft.print(f);
}