int timeButton = A5; int cyclesButton = A4; int cyclesSecondsButton = A3; boolean timeButtonUp = true, cyclesButtonUp = true, cyclesSecondsButtonUp = true;//Checks for changing settings int sensorValue = 0; int debounce = 0; long deciTime = 0; // Clock variable (using deciseconds instead of milliseconds just saved typing int cyclesNumber = 1;// How many cycles per day to water int cyclesSeconds = 1;// How many seconds to water int cyclesDeciSeconds = 3000; // Watering cycle multiplier int topPump = 6; int lightPin = 7; int bottomPump = 8; boolean waterOn = false; int waterRun = 0; void setup() { Serial.begin(9600); pinMode(lightPin, OUTPUT); pinMode(topPump, OUTPUT); pinMode(bottomPump, OUTPUT); pinMode(timeButton, OUTPUT); pinMode(cyclesButton, OUTPUT); pinMode(cyclesSecondsButton, OUTPUT); } void loop() { sensorValue = analogRead(timeButton); // Check if the button is up or down if ((sensorValue > 200) && (timeButtonUp = true) && (debounce > 5)){ timeButtonUp = false; debounce = 0; deciTime += 360000; } // Check if the button is up or down if ((sensorValue < 200) && (timeButtonUp = false)){timeButtonUp = true;} sensorValue = analogRead(cyclesButton); // Check if the button is up or down if ((sensorValue > 200) && (cyclesButtonUp = true) && (debounce > 5)){ cyclesButtonUp = false; cyclesNumber += 1; debounce = 0; if (cyclesNumber > 5) {cyclesNumber = 1;} } // Check if the button is up or down if ((sensorValue < 200) && (cyclesButtonUp = false)){cyclesButtonUp = true;} sensorValue = analogRead(cyclesSecondsButton); // Check if the button is up or down if ((sensorValue > 990) && (cyclesSecondsButtonUp = true) && (debounce > 5)){ cyclesSecondsButtonUp = false; cyclesSeconds += 1; debounce = 0; if (cyclesSeconds > 5) {cyclesSeconds = 1;} } // Check if the button is up or down if ((sensorValue < 200) && (cyclesSecondsButtonUp = false)){cyclesSecondsButtonUp = true;} delay (100); // pause for 1/10th of a second each cycle if (debounce < 10000){debounce += 1;} deciTime += 10; // add 100 milliseconds to the clock variable //Serial.println(deciTime); if (deciTime > 8640000) {deciTime = 0;} // Check if clock needs to reset to midnight if ((deciTime > 2160000)&&(deciTime < 7920000)) {digitalWrite(lightPin, HIGH);}//Turn light on at 6AM if (deciTime > 7920000) {digitalWrite(lightPin, LOW);}//Turn light off at 10PM if ((cyclesNumber == 1) && (deciTime > 0) && (deciTime < 0 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } if (cyclesNumber == 2) { if ((deciTime > 0) && (deciTime < 0 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } if ((deciTime > 4320000) && (deciTime < 4320000 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } } if (cyclesNumber == 3) { if ((deciTime > 0) && (deciTime < 0 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } if ((deciTime > 2880000) && (deciTime < 2880000 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } if ((deciTime > 5760000) && (deciTime < 5760000 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } } if (cyclesNumber == 4) { if ((deciTime > 0) && (deciTime < 0 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } if ((deciTime > 2160000) && (deciTime < 2160000 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } if ((deciTime > 4320000) && (deciTime < 4320000 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } if ((deciTime > 6480000) && (deciTime < 6480000 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))) { if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); waterOn = true; } } } if (cyclesNumber == 5) { for (int i = 0; i < 7; i++){ if ((deciTime > i*720000) && (deciTime < i*720000 + (cyclesNumber*cyclesSeconds*cyclesDeciSeconds))){ if (waterOn == false) { // if it's time to water, turn on pump digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); } } } } if (waterOn == true){waterRun+=10;} if ((waterOn == true) && (waterRun > cyclesNumber*cyclesSeconds*cyclesDeciSeconds)){//Check if water cycle needs to end waterRun = 0; waterOn = false; digitalWrite(topPump, HIGH); // uncomment this code if using a second water pump (for second shelf etc.) // digitalWrite(bottomPump, HIGH); } }