diff --git a/main.c b/main.c index 57c586b..2ff380c 100644 --- a/main.c +++ b/main.c @@ -6,34 +6,24 @@ #define RELAY_SHUTOFF_DELAY 5000 +// Relay is active low, so HIGH disables the output. bool RELAY_STATE = HIGH; -int INDEX = 0; -int SAMPLES[SENSOR_SAMPLE_COUNT] = {0}; - - -int getMaxIntFromArray(int *arr, int len) -{ - int maxValue = 0; - for (int i = 0; i < len; i++) - { - if (arr[i] > maxValue) - { - maxValue = arr[i]; - } - } - return maxValue; -} +// Get the maximum sensor value over 50 readings. int getSensorValue() { + int maxValue = 0; for (int i = 0; i < SENSOR_SAMPLE_COUNT; i++) { - INDEX = (INDEX + 1) % SENSOR_SAMPLE_COUNT; - SAMPLES[INDEX] = abs(analogRead(SENSOR_PIN) - 512); + int currentValue = abs(analogRead(SENSOR_PIN) - 512); + if (currentValue > maxValue) + { + maxValue = currentValue; + } delay(10); } - return getMaxIntFromArray(SAMPLES, SENSOR_SAMPLE_COUNT); + return maxValue; } @@ -49,12 +39,14 @@ void loop() int sensorValue = getSensorValue(); if (sensorValue < SENSOR_THRESHOLD) { + // If the relay is turned on sleep then remeasure sensor value. if (RELAY_STATE == LOW) { delay(RELAY_SHUTOFF_DELAY); sensorValue = getSensorValue(); } + // If the sensor value has definitely dropped since the first measurement, then turn the relay off. if (sensorValue < SENSOR_THRESHOLD) { // Vacuum off. @@ -66,5 +58,6 @@ void loop() // Vacuum on. RELAY_STATE = LOW; } + digitalWrite(RELAY_PIN, RELAY_STATE); } \ No newline at end of file