#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 mapf(float x, float in_min, float in_max, float out_min, float out_max); 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); } float mapf(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } #endif