117 lines
2.4 KiB
C++
117 lines
2.4 KiB
C++
#ifndef _HELPFUNCTIONS_H_
|
|
#define _HELPFUNCTIONS_H_
|
|
|
|
#include <Arduino.h>
|
|
#include <ArduinoSort.h>
|
|
|
|
float getMean(uint16_t *parray,uint16_t psize);
|
|
float getMeanf(float *parray,uint16_t psize);
|
|
uint16_t getMin(uint16_t *parray, uint16_t psize);
|
|
uint16_t getMax(uint16_t *parray, uint16_t psize);
|
|
float getMaxf(float *parray,uint16_t psize);
|
|
float getMinf(float *parray, uint16_t psize);
|
|
bool isValueArrayOK(uint16_t *parray,uint16_t psize, uint16_t pcheck);
|
|
bool isValueArrayOKf(float *parray,uint16_t psize, float pcheck);
|
|
float getFilteredf(float *parray,uint16_t psize, uint16_t pcutOff);
|
|
|
|
|
|
float getMean(uint16_t *parray,uint16_t psize) {
|
|
double mean=0;
|
|
for (uint16_t i=0;i<psize;i++) {
|
|
mean+=parray[i];
|
|
}
|
|
|
|
return mean/psize;
|
|
}
|
|
float getMeanf(float *parray,uint16_t psize) {
|
|
double mean=0;
|
|
for (uint16_t i=0;i<psize;i++) {
|
|
mean+=parray[i];
|
|
}
|
|
|
|
return mean/psize;
|
|
}
|
|
|
|
bool isValueArrayOK(uint16_t *parray,uint16_t psize, uint16_t pcheck) { //check if array has error values
|
|
for (uint16_t i=0;i<psize;i++) {
|
|
if (parray[i]==pcheck){
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
bool isValueArrayOKf(float *parray,uint16_t psize, float pcheck) { //check if array has error values
|
|
for (uint16_t i=0;i<psize;i++) {
|
|
if (parray[i]==pcheck){
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
|
|
uint16_t getMin(uint16_t *parray, uint16_t psize) {
|
|
uint16_t min=65535;
|
|
for (uint16_t i=0;i<psize;i++) {
|
|
if (parray[i]<min) {
|
|
min=parray[i];
|
|
}
|
|
}
|
|
|
|
return min;
|
|
}
|
|
|
|
uint16_t getMax(uint16_t *parray,uint16_t psize) {
|
|
uint16_t max=0;
|
|
for (uint16_t i=0;i<psize;i++) {
|
|
if (parray[i]>max) {
|
|
max=parray[i];
|
|
}
|
|
}
|
|
|
|
return max;
|
|
}
|
|
|
|
float getMinf(float *parray, uint16_t psize) {
|
|
float min=65535;
|
|
for (uint16_t i=0;i<psize;i++) {
|
|
if (parray[i]<min) {
|
|
min=parray[i];
|
|
}
|
|
}
|
|
|
|
return min;
|
|
}
|
|
|
|
float getMaxf(float *parray,uint16_t psize) {
|
|
float max=0;
|
|
for (uint16_t i=0;i<psize;i++) {
|
|
if (parray[i]>max) {
|
|
max=parray[i];
|
|
}
|
|
}
|
|
|
|
return max;
|
|
}
|
|
|
|
|
|
float getFilteredf(float *parray,uint16_t psize, uint16_t pcutOff) {
|
|
//cuts off lowest and highest pcutOff values from array, then returns the mean of the psize-2*pcutOff center values.
|
|
//pcutOff < psize/2
|
|
|
|
float _copy[psize];
|
|
std::copy(parray,parray + psize, _copy);
|
|
sortArray(_copy,psize);
|
|
|
|
double mean=0;
|
|
for (uint16_t i=pcutOff;i<psize-pcutOff;i++) {
|
|
mean+=_copy[i];
|
|
}
|
|
|
|
return mean/(psize-2*pcutOff);
|
|
}
|
|
|
|
|
|
#endif |