//Irrigation //version 1.2 //by tmade #include #include #include #include #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Adafruit_SSD1306 display(-1); //variables int SLEEP = 1; const int DRY = 694; const int WET = 344; int sensorValue = 0; int rectangle = 0; const int X = 10; const int Y = 1; const int WIDTH = 35; const int HEIGHT = 63; void setup() { // put your setup code here, to run once: Serial.begin(9600); //to debug set to 115200 !! //Serial.begin(115200); digitalWrite(0, 1); pinMode (2, OUTPUT); digitalWrite(2, 1); // initialize with the I2C addr 0x3C display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Clear the buffer. display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); //Define the position where the text starts using the setCursor(x,y) method display.setCursor(0,20); display.println("Startup.."); display.display(); delay(4000); } void loop() { // put your main code here, to run repeatedly: display.clearDisplay(); int sensorValue=analogRead(A0); int val = analogRead(0); val = map(val, DRY, WET, 0, 100); delay(200); int rectangle = analogRead(0); rectangle = map(rectangle, DRY, WET, 1, 63); delay(200); // debugging & examples /* Serial.print("rectanglevalue: "); Serial.println(rectangle); analogWrite(9, val); Serial.print("Dry: "); Serial.println(WET); Serial.print("Wet: "); Serial.println(WET); delay(200); */ SLEEP = SLEEP-1; if ((sensorValue > 570) && (SLEEP < 2)) { display.clearDisplay(); // drawRect(x, y, width, height, color) display.drawRoundRect(X, Y, WIDTH, HEIGHT, 2, WHITE); display.fillRoundRect(X, Y, WIDTH, rectangle, 2, WHITE); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(60,5); display.println("dry!"); display.setCursor(60,25); display.setTextSize(2); display.println(sensorValue); display.setCursor(60,45); display.setTextSize(2); display.print(val); display.println(" %"); // write the buffer to the display display.display(); delay(200); Serial.print("sensorValue: "); Serial.println(sensorValue); Serial.println("Pump On"); // 0 = LOW = ON digitalWrite(2,0); //set pump duration per loop in milliseconds delay(5000); // 1 = HIGH = OFF digitalWrite(2,1); Serial.println("Pump Off"); delay(200); //set wait until next check SLEEP = 60; } else if (sensorValue < 571) { Serial.print("sensorValue: "); Serial.println(sensorValue); Serial.print("humidity: "); Serial.print(val); Serial.println(" %"); Serial.println("Sensor is wet"); delay(1000); // Display display.clearDisplay(); // drawRect(x, y, width, height, color) display.drawRoundRect(X, Y, WIDTH, HEIGHT, 2, WHITE); display.fillRoundRect(X, Y, WIDTH, rectangle, 2, WHITE); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(60,5); display.println("wet!"); display.setCursor(60,25); display.setTextSize(2); display.println(sensorValue); display.setCursor(60,45); display.setTextSize(2); display.print(val); display.println(" %"); // write the buffer to the display display.display(); delay(1000); } else if (SLEEP > 2) { display.clearDisplay(); // drawRect(x, y, width, height, color) display.drawRoundRect(X, Y, WIDTH, HEIGHT, 2, WHITE); display.fillRoundRect(X, Y, WIDTH, rectangle, 2, WHITE); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(60,5); display.println("dry!"); display.setCursor(60,25); display.setTextSize(2); display.println(sensorValue); display.setCursor(60,45); display.setTextSize(2); display.print(val); display.println(" %"); // write the buffer to the display display.display(); delay(200); Serial.print("sensorValue: "); Serial.println(sensorValue); Serial.print("humidity: "); Serial.print(val); Serial.println(" %"); Serial.println("Sensor is dry"); Serial.print("wait another: "); Serial.print(SLEEP); Serial.println(" seconds"); delay(200); } }