Browse Source

Code cleanup

master
Apostolos Fanakis 6 years ago
parent
commit
b7144ce50e
  1. 56
      todoFindCoolNameForProject/todoFindCoolNameForProject.h
  2. 103
      todoFindCoolNameForProject/todoFindCoolNameForProject.ino

56
todoFindCoolNameForProject/todoFindCoolNameForProject.h

@ -0,0 +1,56 @@
#ifndef TODO_FIND_COOL_NAME_FOR_PROJECT_H
#define TODO_FIND_COOL_NAME_FOR_PROJECT_H
/* ===== INCLUDES ===== */
#include <SevSeg.h>
#include <DHT.h>
/* ===== DEFINITIONS ===== */
// Type of DHT sensor used is 11
#define DHTTYPE DHT11
// Number of readings to average
#define BUFFER_SIZE 24
// Interval between readings in milliseconds
#define SLEEP_INTERVAL 1000
// Duration of average temperature display
#define TEMPERATURE_DISPLAY_DURATION 2000
// Number of digits on the display
#define NUMBER_OF_DIGITS 4
// Pin layout
#define DHTPIN 2
#define LOW_TEMP_LED_PIN 3
#define HIGH_TEMP_LED_PIN 4
#define RELAY_PIN 5
#define DIGIT_1_PIN 14
#define DIGIT_2_PIN 17
#define DIGIT_3_PIN 18
#define DIGIT_4_PIN 12
#define SEGMENT_A_PIN 15
#define SEGMENT_B_PIN 19
#define SEGMENT_C_PIN 7
#define SEGMENT_D_PIN 9
#define SEGMENT_E_PIN 6
#define SEGMENT_F_PIN 16
#define SEGMENT_G_PIN 8
#define DECIMAL_POINT_PIN 13
// Temperature thresholds
#define LOW_TEMP 28
#define HIGH_TEMP 28
/* ===== GLOBAL VARIABLES AND INITIALIZATIONS ===== */
// Initializes DHT sensor
DHT dht(DHTPIN, DHTTYPE);
// Instantiates a seven segment object
SevSeg sevseg;
int temperatureReadingsCounter;
float temperatures[BUFFER_SIZE];
float averageTemp = 0;
unsigned long displayTimeStart = 0;
/* ===== FUNCTION DEFINITIONS ===== */
void getNewSamples();
float getNewTemp();
float calcAverageTempAndReset();
#endif //TODO_FIND_COOL_NAME_FOR_PROJECT_H

103
todoFindCoolNameForProject/todoFindCoolNameForProject.ino

@ -1,37 +1,60 @@
/*
* TODO: write something here
*/
#include <SevSeg.h>
#include "DHT.h"
// Digital pin connected to the DHT sensor
#define DHTPIN 2
#define DHTTYPE DHT11 // DHT 11
#define BUFFER_SIZE 24
#define LOW_TEMP_LED_PIN 3
#define HIGH_TEMP_LED_PIN 4
#define RELAY_PIN 5
#define LOW_TEMP 28
#define HIGH_TEMP 28
// Initializes DHT sensor.
DHT dht(DHTPIN, DHTTYPE);
int temperatureReadingsCounter;
float temperatures[BUFFER_SIZE];
#include "todoFindCoolNameForProject.h"
/* ===== SETUP AND LOOP ===== */
void setup() {
// Starts the serial com with PC
Serial.begin(9600);
Serial.println("Running setup function");
// Other initializations
dht.begin();
temperatureReadingsCounter = 0;
pinMode(LOW_TEMP_LED_PIN, OUTPUT);
pinMode(HIGH_TEMP_LED_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
byte numDigits = NUMBER_OF_DIGITS;
byte digitPins[] = {DIGIT_1_PIN, DIGIT_2_PIN, DIGIT_3_PIN, DIGIT_4_PIN};
byte segmentPins[] = {SEGMENT_A_PIN, SEGMENT_B_PIN, SEGMENT_C_PIN, SEGMENT_D_PIN, SEGMENT_E_PIN,
SEGMENT_F_PIN, SEGMENT_G_PIN, DECIMAL_POINT_PIN};
bool resistorsOnSegments = false;
byte hardwareConfig = COMMON_CATHODE;
bool updateWithDelays = false;
bool leadingZeros = false;
bool disableDecPoint = false;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(100);
}
void loop() {
// Gets new readings
getNewSamples();
Serial.println(temperatureReadingsCounter);
bool getAnotherSample = true;
while ((millis() - displayTimeStart) < TEMPERATURE_DISPLAY_DURATION) {
// Should display the average temperature for ten seconds
sevseg.setNumber(averageTemp, 1);
sevseg.refreshDisplay();
if ((getAnotherSample && millis() - displayTimeStart) >= (TEMPERATURE_DISPLAY_DURATION/2)){
getNewSamples();
getAnotherSample = false;
}
}
sevseg.blank();
sevseg.refreshDisplay();
// Waits a few seconds between measurements.
delay(SLEEP_INTERVAL);
}
/* ===== FUNCTION IMPLEMENTATIONS ===== */
void getNewSamples() {
float lastTemperature = getNewTemp();
if (lastTemperature >= HIGH_TEMP) {
@ -55,43 +78,51 @@ void loop() {
}
if (temperatureReadingsCounter == BUFFER_SIZE) {
float avgTemp = calcAverageTempAndReset(temperatures);
Serial.println(avgTemp);
temperatureReadingsCounter = 0;
// Two minutes have passed by. At this point the desired number of readings has been reached.
// Calculates the new average temperature
averageTemp = calcAverageTempAndReset();
Serial.print("Average temperature: ");
Serial.println(averageTemp);
// Updates the starting time for the display
displayTimeStart = millis();
}
// Wait a few seconds between measurements.
Serial.println(temperatureReadingsCounter);
delay(1000);
}
float getNewTemp(){
// Reads temperature as Celsius (the default)
float t = dht.readTemperature();
// Reads temperature as Celsius
float temperature = dht.readTemperature();
// Checks if the read failed and handles the failure
if (isnan(t)) {
if (isnan(temperature)) {
Serial.print(F("Failed to read from DHT sensor!"));
return;
return -1;
}
for (int i = BUFFER_SIZE - 1; i>0; i--) {
// Shifts all previous readings to the right and puts the new one at the beginning of the table
for (int i=BUFFER_SIZE-1; i>0; --i) {
temperatures[i] = temperatures[i-1];
}
temperatures[0] = t;
temperatures[0] = temperature;
// Updates the readings counter
++temperatureReadingsCounter;
Serial.print(F("Temperature: "));
Serial.print(t);
Serial.print(temperature);
Serial.println(F("°C "));
return t;
return temperature;
}
float calcAverageTempAndReset(float *array) {
float sum = 0 ; // sum will be larger than an item, float for safety.
float calcAverageTempAndReset() {
float sum = 0;
for (int i = 0; i<BUFFER_SIZE; i++){
sum += array[i];
sum += temperatures[i];
}
return sum / BUFFER_SIZE ; // average will be fractional
// Resets the readings counter
temperatureReadingsCounter = 0;
return sum/BUFFER_SIZE;
}

Loading…
Cancel
Save