From 3f38258a206fb373b3ee5d57423da11f4e6efbc2 Mon Sep 17 00:00:00 2001 From: jackhadrill Date: Thu, 25 Jun 2020 20:25:12 +0000 Subject: [PATCH] Add 'main.c' --- main.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 main.c diff --git a/main.c b/main.c new file mode 100644 index 0000000..57c586b --- /dev/null +++ b/main.c @@ -0,0 +1,70 @@ +#define SENSOR_PIN A3 +#define RELAY_PIN 3 + +#define SENSOR_SAMPLE_COUNT 50 +#define SENSOR_THRESHOLD 50 +#define RELAY_SHUTOFF_DELAY 5000 + + +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; +} + + +int getSensorValue() +{ + for (int i = 0; i < SENSOR_SAMPLE_COUNT; i++) + { + INDEX = (INDEX + 1) % SENSOR_SAMPLE_COUNT; + SAMPLES[INDEX] = abs(analogRead(SENSOR_PIN) - 512); + delay(10); + } + return getMaxIntFromArray(SAMPLES, SENSOR_SAMPLE_COUNT); +} + + +void setup() +{ + pinMode(RELAY_PIN, OUTPUT); + digitalWrite(RELAY_PIN, HIGH); +} + + +void loop() +{ + int sensorValue = getSensorValue(); + if (sensorValue < SENSOR_THRESHOLD) + { + if (RELAY_STATE == LOW) + { + delay(RELAY_SHUTOFF_DELAY); + sensorValue = getSensorValue(); + } + + if (sensorValue < SENSOR_THRESHOLD) + { + // Vacuum off. + RELAY_STATE = HIGH; + } + } + else + { + // Vacuum on. + RELAY_STATE = LOW; + } + digitalWrite(RELAY_PIN, RELAY_STATE); +} \ No newline at end of file