Skip to content

Commit 027bbd1

Browse files
committed
Add 5s and 10s average of ampere to help calibrate ampere sensor.
1 parent e65dc56 commit 027bbd1

File tree

6 files changed

+154
-0
lines changed

6 files changed

+154
-0
lines changed

locales/en/messages.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3130,6 +3130,12 @@
31303130
"motorsmAhDrawn": {
31313131
"message": "Amp. drawn:"
31323132
},
3133+
"motorsAmperageAverage5s": {
3134+
"message": "Amperage (5s avg):"
3135+
},
3136+
"motorsAmperageAverage10s": {
3137+
"message": "Amperage (10s avg):"
3138+
},
31333139
"motorsVoltageValue": {
31343140
"message": "$1 V"
31353141
},
@@ -3139,6 +3145,12 @@
31393145
"motorsmAhDrawnValue": {
31403146
"message": "$1 mAh"
31413147
},
3148+
"motorsAmperageAverage5sValue": {
3149+
"message": "$1 A"
3150+
},
3151+
"motorsAmperageAverage10sValue": {
3152+
"message": "$1 A"
3153+
},
31423154
"motorsText":{
31433155
"message": "Motors"
31443156
},
@@ -5333,6 +5345,12 @@
53335345
"powerBatteryAmperage": {
53345346
"message": "Amperage"
53355347
},
5348+
"powerBatteryAmperageAverage5s": {
5349+
"message": "Amperage (5s average)"
5350+
},
5351+
"powerBatteryAmperageAverage10s": {
5352+
"message": "Amperage (10s average)"
5353+
},
53365354
"powerBatteryCapacity": {
53375355
"message": "Capacity (mAh)"
53385356
},

locales/zh_CN/messages.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2239,6 +2239,12 @@
22392239
"motorsmAhDrawn": {
22402240
"message": "已消耗电流:"
22412241
},
2242+
"motorsAmperageAverage5s": {
2243+
"message": "电流 (5秒平均):"
2244+
},
2245+
"motorsAmperageAverage10s": {
2246+
"message": "电流 (10秒平均):"
2247+
},
22422248
"motorsVoltageValue": {
22432249
"message": "$1 V"
22442250
},
@@ -2248,6 +2254,12 @@
22482254
"motorsmAhDrawnValue": {
22492255
"message": "$1 mAh"
22502256
},
2257+
"motorsAmperageAverage5sValue": {
2258+
"message": "$1 A"
2259+
},
2260+
"motorsAmperageAverage10sValue": {
2261+
"message": "$1 A"
2262+
},
22512263
"motorsText": {
22522264
"message": "电机"
22532265
},
@@ -4000,6 +4012,12 @@
40004012
"powerBatteryAmperage": {
40014013
"message": "电流"
40024014
},
4015+
"powerBatteryAmperageAverage5s": {
4016+
"message": "电流 (5秒平均)"
4017+
},
4018+
"powerBatteryAmperageAverage10s": {
4019+
"message": "电流 (10秒平均)"
4020+
},
40034021
"powerBatteryCapacity": {
40044022
"message": "容量 (mAh)"
40054023
},

src/js/tabs/motors.js

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const motors = {
3333
sensorGyroScale: 2000,
3434
sensorAccelRate: 20,
3535
sensorAccelScale: 2,
36+
amperageHistory: [], // Store amperage readings with timestamps for average calculation
3637
sensorSelectValues: {
3738
gyroScale: {
3839
1: 1,
@@ -77,6 +78,9 @@ motors.initialize = async function (callback) {
7778
self.configHasChanged = false;
7879
self.configChanges = {};
7980

81+
// Reset amperage history when initializing
82+
self.amperageHistory = [];
83+
8084
// Update filtering defaults based on API version
8185
const FILTER_DEFAULT = FC.getFilterDefaults();
8286

@@ -463,6 +467,8 @@ motors.initialize = async function (callback) {
463467
const motorVoltage = $(".motors-bat-voltage");
464468
const motorMahDrawingElement = $(".motors-bat-mah-drawing");
465469
const motorMahDrawnElement = $(".motors-bat-mah-drawn");
470+
const motorAmperageAverage5sElement = $(".motors-bat-amperage-average-5s");
471+
const motorAmperageAverage10sElement = $(".motors-bat-amperage-average-10s");
466472

467473
const rawDataTextElements = {
468474
x: [],
@@ -639,6 +645,55 @@ motors.initialize = async function (callback) {
639645
motorVoltage.text(i18n.getMessage("motorsVoltageValue", [FC.ANALOG.voltage]));
640646
motorMahDrawingElement.text(i18n.getMessage("motorsADrawingValue", [FC.ANALOG.amperage.toFixed(2)]));
641647
motorMahDrawnElement.text(i18n.getMessage("motorsmAhDrawnValue", [FC.ANALOG.mAhdrawn]));
648+
649+
// Calculate amperage averages using timestamp-based approach
650+
const currentAmperage = FC.ANALOG.amperage;
651+
const currentTimestamp = performance.now();
652+
653+
// Add current reading with timestamp
654+
TABS.motors.amperageHistory.push({
655+
value: currentAmperage,
656+
timestamp: currentTimestamp,
657+
});
658+
659+
// Calculate time thresholds
660+
const tenSecondsAgo = currentTimestamp - 10000;
661+
const fiveSecondsAgo = currentTimestamp - 5000;
662+
663+
// Remove readings older than 10 seconds and calculate averages in one pass
664+
const validReadings = [];
665+
let amperageSum5s = 0;
666+
let amperageSum10s = 0;
667+
let count5s = 0;
668+
let count10s = 0;
669+
670+
for (const reading of TABS.motors.amperageHistory) {
671+
if (reading.timestamp >= tenSecondsAgo) {
672+
validReadings.push(reading);
673+
amperageSum10s += reading.value;
674+
count10s++;
675+
676+
if (reading.timestamp >= fiveSecondsAgo) {
677+
amperageSum5s += reading.value;
678+
count5s++;
679+
}
680+
}
681+
}
682+
683+
// Update history with only valid readings
684+
TABS.motors.amperageHistory = validReadings;
685+
686+
// Calculate averages
687+
const amperageAverage5s = count5s > 0 ? amperageSum5s / count5s : 0;
688+
const amperageAverage10s = count10s > 0 ? amperageSum10s / count10s : 0;
689+
690+
// Display average amperages
691+
motorAmperageAverage5sElement.text(
692+
i18n.getMessage("motorsAmperageAverage5sValue", [amperageAverage5s.toFixed(2)]),
693+
);
694+
motorAmperageAverage10sElement.text(
695+
i18n.getMessage("motorsAmperageAverage10sValue", [amperageAverage10s.toFixed(2)]),
696+
);
642697
}
643698
}
644699

src/js/tabs/power.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@ import { initializeModalDialog } from "../utils/initializeModalDialog";
1111
const power = {
1212
supported: false,
1313
analyticsChanges: {},
14+
amperageHistory: [], // Store amperage readings with timestamps for average calculation
1415
};
1516

1617
power.initialize = function (callback) {
1718
const self = this;
1819

20+
// Reset amperage history when initializing
21+
self.amperageHistory = [];
22+
1923
if (GUI.active_tab != "power") {
2024
GUI.active_tab = "power";
2125
}
@@ -224,6 +228,8 @@ power.initialize = function (callback) {
224228
$(elementBatteryState).find(".voltage").attr("id", "battery-voltage");
225229
$(elementBatteryState).find(".mah-drawn").attr("id", "battery-mah-drawn");
226230
$(elementBatteryState).find(".amperage").attr("id", "battery-amperage");
231+
$(elementBatteryState).find(".amperage-average-5s").attr("id", "battery-amperage-average-5s");
232+
$(elementBatteryState).find(".amperage-average-10s").attr("id", "battery-amperage-average-10s");
227233

228234
destinationBatteryState.append(elementBatteryState.children());
229235

@@ -332,6 +338,53 @@ power.initialize = function (callback) {
332338
elementMspBatteryState.text(i18n.getMessage("powerMahValue", [FC.BATTERY_STATE.mAhDrawn]));
333339
elementMspBatteryState = $(`${elementPrefix}-amperage .value`);
334340
elementMspBatteryState.text(i18n.getMessage("powerAmperageValue", [FC.BATTERY_STATE.amperage]));
341+
342+
// Calculate amperage averages using timestamp-based approach
343+
const currentAmperage = FC.BATTERY_STATE.amperage;
344+
const currentTimestamp = performance.now();
345+
346+
// Add current reading with timestamp
347+
self.amperageHistory.push({
348+
value: currentAmperage,
349+
timestamp: currentTimestamp,
350+
});
351+
352+
// Calculate time thresholds
353+
const tenSecondsAgo = currentTimestamp - 10000;
354+
const fiveSecondsAgo = currentTimestamp - 5000;
355+
356+
// Remove readings older than 10 seconds and calculate averages in one pass
357+
const validReadings = [];
358+
let amperageSum5s = 0;
359+
let amperageSum10s = 0;
360+
let count5s = 0;
361+
let count10s = 0;
362+
363+
for (const reading of self.amperageHistory) {
364+
if (reading.timestamp >= tenSecondsAgo) {
365+
validReadings.push(reading);
366+
amperageSum10s += reading.value;
367+
count10s++;
368+
369+
if (reading.timestamp >= fiveSecondsAgo) {
370+
amperageSum5s += reading.value;
371+
count5s++;
372+
}
373+
}
374+
}
375+
376+
// Update history with only valid readings
377+
self.amperageHistory = validReadings;
378+
379+
// Calculate averages
380+
const amperageAverage5s = count5s > 0 ? amperageSum5s / count5s : 0;
381+
const amperageAverage10s = count10s > 0 ? amperageSum10s / count10s : 0;
382+
383+
// Display average amperages
384+
elementMspBatteryState = $(`${elementPrefix}-amperage-average-5s .value`);
385+
elementMspBatteryState.text(i18n.getMessage("powerAmperageValue", [amperageAverage5s.toFixed(2)]));
386+
elementMspBatteryState = $(`${elementPrefix}-amperage-average-10s .value`);
387+
elementMspBatteryState.text(i18n.getMessage("powerAmperageValue", [amperageAverage10s.toFixed(2)]));
335388
});
336389
}
337390

src/tabs/motors.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,8 @@
279279
<span i18n="motorsVoltage" class="power_text"></span><span class="motors-bat-voltage power_value"></span>
280280
<span i18n="motorsADrawing" class="power_text"></span><span class="motors-bat-mah-drawing power_value"></span>
281281
<span i18n="motorsmAhDrawn" class="power_text"></span><span class="motors-bat-mah-drawn power_value"></span>
282+
<span i18n="motorsAmperageAverage5s" class="power_text"></span><span class="motors-bat-amperage-average-5s power_value"></span>
283+
<span i18n="motorsAmperageAverage10s" class="power_text"></span><span class="motors-bat-amperage-average-10s power_value"></span>
282284
</div>
283285
</div>
284286
<div class="motors">

src/tabs/power.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,14 @@
123123
<td i18n="powerBatteryAmperage"></td>
124124
<td class="value"></td>
125125
</tr>
126+
<tr class="amperage-average-5s">
127+
<td i18n="powerBatteryAmperageAverage5s"></td>
128+
<td class="value"></td>
129+
</tr>
130+
<tr class="amperage-average-10s">
131+
<td i18n="powerBatteryAmperageAverage10s"></td>
132+
<td class="value"></td>
133+
</tr>
126134
</tbody>
127135
</table>
128136

0 commit comments

Comments
 (0)