86 lines
1.7 KiB
C++
86 lines
1.7 KiB
C++
|
#include <Arduino.h>
|
||
|
|
||
|
#define EC_PIN_ADC 4
|
||
|
#define EC_PIN_FREQ 5
|
||
|
#define EC_PWM_CH 0
|
||
|
#define EC_RESOLUTION 8
|
||
|
#define EC_FREQUENCY 5000
|
||
|
|
||
|
#define EC_ARRAY_SIZE 1024
|
||
|
uint16_t ec_array[EC_ARRAY_SIZE];
|
||
|
uint16_t ec_array_pos=0;
|
||
|
unsigned long ec_last_read=0;
|
||
|
#define EC_READ_INTERVAL 1
|
||
|
|
||
|
unsigned long last_print=0;
|
||
|
|
||
|
float getMean(uint16_t* parray);
|
||
|
uint16_t getMin(uint16_t *parray);
|
||
|
uint16_t getMax(uint16_t *parray);
|
||
|
|
||
|
void setup() {
|
||
|
Serial.begin(115200);
|
||
|
pinMode(EC_PIN_ADC,INPUT);
|
||
|
|
||
|
ledcSetup(EC_PWM_CH, EC_FREQUENCY, EC_RESOLUTION);
|
||
|
ledcAttachPin(EC_PIN_FREQ, EC_PWM_CH);
|
||
|
ledcWrite(EC_PWM_CH, 127);
|
||
|
}
|
||
|
|
||
|
void loop() {
|
||
|
unsigned long loopmillis=millis();
|
||
|
|
||
|
bool flag_print=false;
|
||
|
|
||
|
if (loopmillis>ec_last_read+EC_READ_INTERVAL) {
|
||
|
ec_last_read=loopmillis;
|
||
|
ec_array_pos++;
|
||
|
flag_print= ec_array_pos==EC_ARRAY_SIZE;
|
||
|
ec_array_pos%=EC_ARRAY_SIZE;
|
||
|
ec_array[ec_array_pos]=analogRead(EC_PIN_ADC);
|
||
|
|
||
|
//Serial.print(ec_array[ec_array_pos]); Serial.print(" ");
|
||
|
}
|
||
|
|
||
|
|
||
|
//if (flag_print) {
|
||
|
if (loopmillis>last_print+250) {
|
||
|
last_print=loopmillis;
|
||
|
Serial.print(getMean(ec_array),3);
|
||
|
Serial.print("\t"); Serial.print(getMax(ec_array) - getMin(ec_array));
|
||
|
Serial.println();
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
float getMean(uint16_t *parray) {
|
||
|
double mean=0;
|
||
|
for (uint16_t i=0;i<EC_ARRAY_SIZE;i++) {
|
||
|
mean+=parray[i];
|
||
|
}
|
||
|
|
||
|
return mean/EC_ARRAY_SIZE;
|
||
|
}
|
||
|
|
||
|
|
||
|
uint16_t getMin(uint16_t *parray) {
|
||
|
uint16_t min=65535;
|
||
|
for (uint16_t i=0;i<EC_ARRAY_SIZE;i++) {
|
||
|
if (parray[i]<min) {
|
||
|
min=parray[i];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return min;
|
||
|
}
|
||
|
|
||
|
uint16_t getMax(uint16_t *parray) {
|
||
|
uint16_t max=0;
|
||
|
for (uint16_t i=0;i<EC_ARRAY_SIZE;i++) {
|
||
|
if (parray[i]>max) {
|
||
|
max=parray[i];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return max;
|
||
|
}
|