#include #include LiquidCrystal_I2C lcd(0x3f, 16, 2); #define zawor 10 unsigned long aktualnyCzas = 0; unsigned long roznicaCzasu = 0; unsigned long zapamietanyCzaswartosc_A0 = 0; unsigned long zapamietanyCzaswartosc_A1 = 0; unsigned long zapamietanyCzaszawor = 0; unsigned long zapamietanyCzasnastaw1 = 0; unsigned long zapamietanyCzasnastaw2 = 0; unsigned long zapamietanyCzasnastaw3 = 0; unsigned long zapamietanyCzasnastaw4 = 0; unsigned long zapamietanyCzasnastaw5 = 0; unsigned long zapamietanyCzasprogram = 0; unsigned long zapamietanyCzaszwloka1 = 0; unsigned long zapamietanyCzaszwloka2 = 0; unsigned long zapamietanyCzaszwloka3 = 0; unsigned long zapamietanyCzaszwloka4 = 0; unsigned long zapamietanyCzaszwloka5 = 0; unsigned long zapamietanyCzaszwloka_zawor = 0; int zwloka_zawor = 0; int nastaw1 = 0; int nastaw2 = 0; int nastaw3 = 0; int nastaw4 = 0; int nastaw5 = 0; int zwloka1 = 0; int zwloka2 = 0; int zwloka3 = 0; int zwloka4 = 0; int zwloka5 = 0; int nastaw = 0; int program = 0; int sensor_A0 = A0; int wartosc_A0 = 0; int poc = A1; int odczytanawartosc_A0 = 0; void setup() { Serial.begin(9600); pinMode (zawor, OUTPUT); digitalWrite(zawor, HIGH); lcd.begin(); lcd.noBlink(); lcd.noCursor(); } class lccd { public: void wyswietlacz(); void zakres(); }; class czujniki { public: void pomiar(); }; class zawor1 { public: void ustaw(); }; void loop() { aktualnyCzas = millis(); if (aktualnyCzas - zapamietanyCzasprogram >= 20UL) { zapamietanyCzasprogram = aktualnyCzas; lccd opis; opis.wyswietlacz(); opis.zakres(); czujniki gleba; gleba.pomiar(); zawor1 wybor; wybor.ustaw(); } } void lccd::wyswietlacz() { lcd.backlight(); lcd.setCursor(0, 0); lcd.print("WILGO: "); lcd.setCursor(6, 0); lcd.print(wartosc_A0); lcd.print(" ");//likwiduje migotanie lcd.setCursor(10, 0); lcd.print("PROG:"); lcd.setCursor(15, 0); lcd.print(nastaw); lcd.print(" "); } void lccd::zakres() { if (nastaw == 1) { lcd.backlight(); lcd.setCursor(4, 1); // lcd.scrollDisplayLeft(); lcd.print("20 --> 40"); lcd.print(" "); } if (nastaw == 2) { lcd.backlight(); lcd.setCursor(4, 1); // lcd.scrollDisplayLeft(); lcd.print("40 --> 60"); lcd.print(" "); } if (nastaw == 3) { lcd.backlight(); lcd.setCursor(4, 1); // lcd.scrollDisplayLeft(); lcd.print("60 --> 80"); lcd.print(" "); } if (nastaw == 4) { lcd.backlight(); lcd.setCursor(4, 1); // lcd.scrollDisplayLeft(); lcd.print("80 --> 100"); lcd.print(" "); } if (nastaw == 5) { lcd.backlight(); lcd.setCursor(4, 1); // lcd.scrollDisplayLeft(); lcd.print("100 --> XXX"); lcd.print(" "); } } void czujniki::pomiar() { aktualnyCzas = millis(); if (aktualnyCzas - zapamietanyCzaswartosc_A0 >= 2000UL) { zapamietanyCzaswartosc_A0 = aktualnyCzas; wartosc_A0 = analogRead(sensor_A0); wartosc_A0 = map(wartosc_A0, 0, 1023, 100, 0); Serial.println(wartosc_A0); } } void zawor1::ustaw() { aktualnyCzas = millis(); if (aktualnyCzas - zapamietanyCzaswartosc_A1 >= 10UL) { zapamietanyCzaswartosc_A1 = aktualnyCzas; nastaw = analogRead(poc); nastaw = map(nastaw, 0, 1023, 1, 6); } // ZATRZYMANIE ODCZYTU CZUJNIKA if (aktualnyCzas - zapamietanyCzaszwloka_zawor >= 50000UL) { zapamietanyCzaszwloka_zawor = aktualnyCzas; if (nastaw == 1) { if (aktualnyCzas - zapamietanyCzasnastaw1 >= 100UL) { zapamietanyCzasnastaw1 = aktualnyCzas; if (wartosc_A0 <= 20) { digitalWrite(zawor, LOW); } } //CZAS OTWARCIA ZAWORU if (aktualnyCzas - zapamietanyCzaszwloka1 >= 60000UL) { zapamietanyCzaszwloka1 = aktualnyCzas; { digitalWrite(zawor, HIGH); } } if (wartosc_A0 >= 20) { digitalWrite(zawor, HIGH); } } if (nastaw == 2) { if (aktualnyCzas - zapamietanyCzasnastaw2 >= 100UL) { zapamietanyCzasnastaw2 = aktualnyCzas; if (wartosc_A0 <= 40) { digitalWrite(zawor, LOW); } } if (aktualnyCzas - zapamietanyCzaszwloka2 >= 60000UL) { zapamietanyCzaszwloka2 = aktualnyCzas; { digitalWrite(zawor, HIGH); } } if (wartosc_A0 >= 40) { digitalWrite(zawor, HIGH); } } if (nastaw == 3) { if (aktualnyCzas - zapamietanyCzasnastaw3 >= 100UL) { zapamietanyCzasnastaw3 = aktualnyCzas; if (wartosc_A0 <= 60) { digitalWrite(zawor, LOW); } } if (aktualnyCzas - zapamietanyCzaszwloka3 >= 60000UL) { zapamietanyCzaszwloka3 = aktualnyCzas; { digitalWrite(zawor, HIGH); } } if (wartosc_A0 >= 60) { digitalWrite(zawor, HIGH); } } if (nastaw == 4) { if (aktualnyCzas - zapamietanyCzasnastaw4 >= 100UL) { zapamietanyCzasnastaw4 = aktualnyCzas; if (wartosc_A0 <= 80) { digitalWrite(zawor, LOW); } } if (aktualnyCzas - zapamietanyCzaszwloka4 >= 60000UL) { zapamietanyCzaszwloka4 = aktualnyCzas; { digitalWrite(zawor, HIGH); } } if (wartosc_A0 >= 80) { digitalWrite(zawor, HIGH); } } if (nastaw == 5) { if (aktualnyCzas - zapamietanyCzasnastaw5 >= 100UL) { zapamietanyCzasnastaw5 = aktualnyCzas; if (wartosc_A0 <= 100) { digitalWrite(zawor, LOW); } } if (aktualnyCzas - zapamietanyCzaszwloka5 >= 60000UL ) { zapamietanyCzaszwloka5 = aktualnyCzas; { digitalWrite(zawor, HIGH); } } if (wartosc_A0 >= 100) { digitalWrite(zawor, HIGH); } } } }