Files
T2-start-2025/C/C1/bike_math.c
Rens Pastoor 11b391b8a1 sync
2025-05-27 22:41:46 +02:00

69 lines
2.1 KiB
C

#include "bike_math.h"
#include "bike_store.h"
uint16_t bikeMathGetValueForDataType(bikeStoreMeasurement measurement, bikeDataType data_type) {
uint16_t value = 0;
if (data_type == BIKECADENCE) {
value = measurement.cadence;
} else if (data_type == BIKESPEED) {
value = measurement.speed;
} else if (data_type == BIKEHEARTRATE) {
value = measurement.heartRate;
} else if (data_type == BIKEPOWER) {
value = measurement.power;
}
return value;
}
uint16_t bikeMathCalculateMinValue(bikeDataType data_type) {
uint16_t number_of_measurements = bikeStoreGetNumberOfMeasurementsPresent();
uint16_t min_value = UINT16_MAX;
for (uint16_t index_position = 0; index_position < number_of_measurements; index_position++) {
bikeStoreMeasurement measurement = bikeStoreGetMeasurement(index_position);
uint16_t value = bikeMathGetValueForDataType(measurement, data_type);
if (value < min_value) {
min_value = value;
}
}
return min_value;
}
uint16_t bikeMathCalculateMaxValue(bikeDataType data_type) {
uint16_t number_of_measurements = bikeStoreGetNumberOfMeasurementsPresent();
uint16_t max_value = 0;
for (uint16_t index_position = 0; index_position < number_of_measurements; index_position++) {
bikeStoreMeasurement measurement = bikeStoreGetMeasurement(index_position);
uint16_t value = bikeMathGetValueForDataType(measurement, data_type);
if (value > max_value) {
max_value = value;
}
}
return max_value;
}
uint16_t bikeMathCalculateAverageValue(bikeDataType data_type) {
uint16_t number_of_measurements = bikeStoreGetNumberOfMeasurementsPresent();
if (number_of_measurements == 0) return 0;
uint16_t average = 0;
uint32_t sum = 0;
for (uint16_t index_position = 0; index_position < number_of_measurements; index_position++) {
bikeStoreMeasurement measurement = bikeStoreGetMeasurement(index_position);
uint16_t value = bikeMathGetValueForDataType(measurement, data_type);
sum += value;
}
average = sum / number_of_measurements;
return average;
}