#include <DHT.h>
#include <stdio.h>
#define DHTPIN 8
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
enum analogSensorPin { pot = 0, ldr = 1, lm35 = 2};
const int potPin = 0;
int potValue = 0;
int potIndex = 0;
float potValues[5] = {-1, -1, -1, -1, -1};
int ldrValue = 0;
int ldrIndex = 0;
float ldrValues[5] = {-1, -1, -1, -1, -1};
int lm35Value = 0;
int lm35Index = 0;
float lm35Values[5] = {-1, -1, -1, -1, -1};
float dhtHumi = 0.0;
int dhtHumiIndex = 0;
float dhtHumiValues[5] = {-1, -1, -1, -1, -1};
float dhtTempC = 0.0;
int dhtTempCIndex = 0;
float dhtTempCValues[5] = {-1, -1, -1, -1, -1};
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
dht.begin();
}
void readAnalogValue(int *, analogSensorPin);
float convertDigitalReadToTemperature(int lm35Value);
void storeReadedEntrance(int, float*, int*);
float calculateEntrancesMean(float *);
void loop() {
readAnalogValue(&potValue, pot);
storeReadedEntrance(potValue, potValues, &potIndex);
readAnalogValue(&ldrValue, ldr);
storeReadedEntrance(ldrValue, ldrValues, &ldrIndex);
readAnalogValue(&lm35Value, lm35);
storeReadedEntrance(lm35Value, lm35Values, &lm35Index);
readDHTValues(&dhtTempC, &dhtHumi);
storeReadedEntrance((int)dhtHumi, dhtHumiValues, &dhtHumiIndex);
storeReadedEntrance((int)dhtTempC, dhtTempCValues, &dhtTempCIndex);
char potBuffer[100];
snprintf(potBuffer, 100, "Pot Mean:\t%i",
(int) calculateEntrancesMean(potValues));
char ldrBuffer[100];
snprintf(ldrBuffer, 100, "ldr Mean:\t%i",
(int) calculateEntrancesMean(ldrValues));
char lm35Buffer[100];
snprintf(lm35Buffer, 100, "lm35 Mean:\t%i",
(int) convertDigitalReadToTemperature(
(int) calculateEntrancesMean(lm35Values)
));
char dhtBuffer[100];
snprintf(dhtBuffer, 100, "dht tHumidity Mean:\t%i;\tTemperature Mean:\t%i",
(int) calculateEntrancesMean(dhtHumiValues),
(int) calculateEntrancesMean(dhtTempCValues));
Serial.println(potBuffer);
Serial.println(ldrBuffer);
Serial.println(lm35Buffer);
Serial.println(dhtBuffer);
Serial.println();
delay(250);
}
void readAnalogValue(int *potValue, analogSensorPin pin) {
*potValue = analogRead(pin);
}
void storeReadedEntrance(int value, float *values, int *index) {
values[*index] = value;
*index = (++(*index)) % 5;
};
float calculateEntrancesMean(float *values) {
float mean = 0.0;
for (int index = 0; index < 5; index++) {
if (values[index] == -1)
return -1.0;
mean += values[index] / 5.0;
}
return mean;
}
float convertDigitalReadToTemperature(int digitalValue) {
return (digitalValue * 4.88) / 10.0;
}
void readDHTValues(float *temp, float *humi) {
*temp = dht.readTemperature();
*humi = dht.readHumidity();
}