// get the median of an odd set ov values
// https://forum.arduino.cc/t/median-aus-uint16-t-value-5/1009939
uint16_t value[5] {4, 22, 23, 70, 24};
uint16_t getMedian(uint16_t* data, uint8_t items)
{
uint16_t tmp;
uint8_t i, j;
for (i = 0; i < items; ++i) {
for (j = 0; j < items - i - 1; ++j) {
if (data[j] > data[j + 1]) {
tmp = data[j];
data[j] = data[j + 1];
data[j + 1] = tmp;
}
}
}
tmp = (items >> 1); // items/2
return data[tmp]; // The result set is odd. Simply return
// // the mean value of the set of values.
}
uint16_t getAverage(uint16_t* data, uint8_t items)
{
uint32_t tmp = 0;
for (uint8_t i = 0; i < items; i++) {
tmp += data[i];
}
tmp = tmp / items;
return tmp;
}
void setup() {
Serial.begin(115200);
uint16_t result = getMedian(value, 5);
Serial.println(result);
Serial.println(getAverage(value, 5));
}
void loop() {
// put your main code here, to run repeatedly:
}