Untitled
unknown
c_cpp
2 years ago
4.7 kB
4
Indexable
#include <OneWire.h>
#include <DallasTemperature.h>
#define wtr_sensr_read_pin A0
#define wtr_sensr_pwr_pin 5
#define btn_activt_read_pin 3
#define xperiment_done_LED 53
#define swc_nr_samples 5000
#define temp_nr_samples 10
// GPIO where the DS18B20 is connected to
const int oneWireBus = 4;
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(oneWireBus);
// Pass our oneWire reference to Dallas Temperature sensor
DallasTemperature sensors(&oneWire);
int swc_read_value;
float swc_average;
float temperature_read_value_c;
float temperature_average_c;
float calculate_sample_var(float mean,int sample_size, float * samples)
{
float var = 0;
for(int i = 0; i<sample_size;i++)
{
float sample = samples[i];
var += (mean-sample)*(mean-sample);
}
return var/(sample_size - 1);
}
float calculate_sample_var(float mean,int sample_size, int * samples)
{
float var = 0;
int sum;
for(int i = 0; i<sample_size;i++)
{
int sample = samples[i];
sum += (mean-sample)*(mean-sample);
}
return (float) sum/(sample_size - 1);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println("PROGRAM BEGIN");
pinMode(wtr_sensr_read_pin,INPUT_PULLUP);
pinMode(wtr_sensr_pwr_pin, OUTPUT);
pinMode(xperiment_done_LED,OUTPUT);
pinMode(btn_activt_read_pin,INPUT);
sensors.begin();
}
void loop() {
int xperiment_done = 0;
digitalWrite(xperiment_done_LED,HIGH);
if(!digitalRead(btn_activt_read_pin)){
//Otherwise the button reacts too fast
delay(1000);
//Now we wait for the second button press
while(xperiment_done == 0){
digitalWrite(wtr_sensr_pwr_pin,HIGH);
swc_read_value = analogRead(wtr_sensr_read_pin);
sensors.requestTemperatures();
temperature_read_value_c = sensors.getTempCByIndex(0);
Serial.println(swc_read_value);
Serial.println(temperature_read_value_c);
if(!digitalRead(btn_activt_read_pin))
{
long swc_sum = 0;
float temperature_sum_c = 0;
float temperature_reads_arr[temp_nr_samples];
int swc_reads_arr[swc_nr_samples];
int temperature_error_measurement;
digitalWrite(xperiment_done_LED,LOW);
Serial.println("Taking samples!");
//determine the highest sample size
int highest_nr_samples;
if(temp_nr_samples>swc_nr_samples)
{
highest_nr_samples = temp_nr_samples;
} else
{
highest_nr_samples = swc_nr_samples;
}
//Now we start taking samples
for(int i = 0; i<highest_nr_samples;i++)
{
if(i<swc_nr_samples)
{
swc_read_value = analogRead(wtr_sensr_read_pin);
swc_sum += swc_read_value;
swc_reads_arr[i] = swc_read_value;
}
if(i<temp_nr_samples)
{
sensors.requestTemperatures();
temperature_read_value_c = sensors.getTempCByIndex(0);
temperature_sum_c += temperature_read_value_c;
temperature_reads_arr[i] = temperature_read_value_c;
if(temperature_read_value_c<0)
{
i = highest_nr_samples;
temperature_error_measurement = 1;
}
}
delay(10);
}
swc_average = swc_sum/swc_nr_samples;
temperature_average_c = temperature_sum_c/temp_nr_samples;
Serial.println("SWC AVERAGE:");
Serial.println(swc_average);
Serial.println("SWC VAR");
Serial.println(calculate_sample_var(swc_average,swc_nr_samples,swc_reads_arr));
if(!temperature_error_measurement)
{
Serial.println("TEMPERATURE AVERAGE CELSIUS:");
Serial.println(temperature_average_c);
Serial.println("Temperature VAR");
Serial.println(calculate_sample_var(temperature_average_c,temp_nr_samples,temperature_reads_arr));
}
else
{
Serial.println("ERROR IN TEMPERATURE MEASUREMENT");
}
xperiment_done = 1;
temperature_error_measurement = 0;
delay(1000);
digitalWrite(wtr_sensr_pwr_pin,LOW);
Serial.print("Ready again");
}
delay(100);
}
}
}
Editor is loading...