55 lines
1.7 KiB
MonkeyC
55 lines
1.7 KiB
MonkeyC
// Метрики подхода между нажатиями Lap (errata Ф-2.3):
|
||
// «время подхода» = время с последнего Lap по timerTime (включает предшествующий
|
||
// отдых — errata Ф-2.1), «средний пульс подхода» = среднее сэмплов за интервал.
|
||
// Часы ядра — Activity.Info.timerTime (при паузе активности стоит сам).
|
||
class SetTracker {
|
||
var lapAtMs; // timerTime последнего Lap (мс)
|
||
var sumBpm;
|
||
var nBpm;
|
||
|
||
function initialize() {
|
||
lapAtMs = 0;
|
||
sumBpm = 0;
|
||
nBpm = 0;
|
||
}
|
||
|
||
// Lap = граница подхода: метрики обнуляются
|
||
function onLap(timerTimeMs) {
|
||
lapAtMs = timerTimeMs;
|
||
sumBpm = 0;
|
||
nBpm = 0;
|
||
}
|
||
|
||
// null-пульс (датчик не готов) в среднее не попадает
|
||
function onSample(bpm) {
|
||
if (bpm != null && bpm > 0) {
|
||
sumBpm += bpm;
|
||
nBpm += 1;
|
||
}
|
||
}
|
||
|
||
// Время с границы подхода, мс
|
||
function elapsedMs(timerTimeMs) {
|
||
return timerTimeMs - lapAtMs;
|
||
}
|
||
|
||
// Средний пульс интервала (округление к ближайшему, целочисленно — без
|
||
// Float), null пока нет сэмплов
|
||
function avgBpm() {
|
||
if (nBpm > 0) {
|
||
var num = sumBpm * 2;
|
||
var den = nBpm * 2;
|
||
var q = 0;
|
||
while (num >= den) {
|
||
num -= den;
|
||
q += 1;
|
||
}
|
||
if (num * 2 >= den) {
|
||
q += 1;
|
||
}
|
||
return q;
|
||
}
|
||
return null;
|
||
}
|
||
}
|