#include #include #include LiquidCrystal_I2C lcd(0x27, 16, 2); #define pin_nadajnik A1 // czujnik wody #define pin_odbiornik A0 // czujnik wody int pompa=10;//deklaracje int ele1=2; int ele2=4; int ele3=7; int ele4=8; int blokada=1; int blokada_up=1; int redPin = 3; // led int greenPin = 5; // led int bluePin = 6; // led int odleglosc; int litry;//Zmienna przechowująca odległość int poziom; //poziom wody long czas_impulsu = 0; //Zmienna przechowująca czas trwania impulsu na pinie ECHO byte customChar[8] ={ B00100, B00100, B01100, B01000, B11001, B11101, B11111, B01110 }; // kropelka int m=0; int s=0; long czas = 0; unsigned long long zapamietany_czast=millis(); unsigned long long aktualny_czast=millis(); unsigned long previousTime = 0; const byte ROWS = 4; //four rows const byte COLS = 3; //three columns char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, }; byte rowPins[ROWS] = {11, 12}; //connect to the row pinouts of the keypad byte colPins[COLS] = {13,A3,A2}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); char key ; int stoper(int Min, int Sec){ m=Min; s=Sec; while(1){ if(m==0 && s== 0){ lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(1,1); lcd.print(0); lcd.setCursor(2,1); lcd.print(0); lcd.setCursor(3,1); lcd.print(":"); lcd.setCursor(4,1); lcd.print(0); lcd.setCursor(5,1); lcd.print(0); break; } aktualny_czast=millis(); lcd.setCursor(0,1); if(m/100 == 0) lcd.print(" "); else lcd.print(m/100); lcd.setCursor(1,1); lcd.print(m/10); lcd.setCursor(2,1); lcd.print(m%10); lcd.setCursor(3,1); lcd.print(":"); lcd.setCursor(4,1); lcd.print(s/10); lcd.setCursor(5,1); lcd.print(s%10); if(aktualny_czast-zapamietany_czast>=1000){ s--; digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika delayMicroseconds(10); //Czas trwania 10us digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm litry = map(odleglosc, 8, 100, 0, 1000); poziom = 1000 - litry; //Zabezpieczenie przed przekroczeniem zakresu pomiarowego lcd.createChar(0, customChar); lcd.setCursor(10, 1); lcd.write(byte(0)); lcd.setCursor(12, 1); lcd.print(poziom); lcd.print("L"); zapamietany_czast=aktualny_czast;} if(s==-1 && m>0){ m--; s=59;} key = keypad.getKey(); if(key=='1' || key=='2' || key=='3' || key=='4' || key=='5'){ lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(1,1); lcd.print(0); lcd.setCursor(2,1); lcd.print(0); lcd.setCursor(3,1); lcd.print(":"); lcd.setCursor(4,1); lcd.print(0); lcd.setCursor(5,1); lcd.print(0); return 5; break; } } } int stoper_up(){ m=0; s=0; while(1){ aktualny_czast=millis(); lcd.setCursor(0,1); if(m/100 == 0) lcd.print(" "); else lcd.print(m/100); lcd.setCursor(1,1); lcd.print(m/10); lcd.setCursor(2,1); lcd.print(m%10); lcd.setCursor(3,1); lcd.print(":"); lcd.setCursor(4,1); lcd.print(s/10); lcd.setCursor(5,1); lcd.print(s%10); if(aktualny_czast-zapamietany_czast>=1000){ s++; digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika delayMicroseconds(10); //Czas trwania 10us digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo odleglosc = czas_impulsu/58; //Wyznaczenie odległości w mc litry = map(odleglosc, 8, 100, 0, 1000); poziom = 1000 - litry; //Zabezpieczenie przed przekroczeniem zakresu pomiarowego lcd.createChar(0, customChar); lcd.setCursor(10, 1); lcd.write(byte(0)); lcd.setCursor(12, 1); lcd.print(poziom); lcd.print("L"); zapamietany_czast=aktualny_czast;} if(s>59){ m++; s=0;} key = keypad.getKey(); if(key=='6' ){ lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(1,1); lcd.print(0); lcd.setCursor(2,1); lcd.print(0); lcd.setCursor(3,1); lcd.print(":"); lcd.setCursor(4,1); lcd.print(0); lcd.setCursor(5,1); lcd.print(0); return 5; break; } } } void test_poziomu_wody(){ digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika delayMicroseconds(10); //Czas trwania 10us digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm litry = map(odleglosc, 8, 100, 0, 1000); poziom = 1000 - litry; if(poziom<200) while(1){ lcd.clear(); lcd.setCursor(3,0); lcd.print("BRAK WODY!!!"); lcd.setCursor(2,1); lcd.print("JEBAC POLICJE"); setColor(255, 0, 0); digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika delayMicroseconds(10); //Czas trwania 10us digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm litry = map(odleglosc, 8, 100, 0, 1000); poziom = 1000 - litry; if(poziom>=200) break;} } void setColor(int red, int green, int blue) { #ifdef COMMON_ANODE red = 255 - red; green = 255 - green; blue = 255 - blue; #endif analogWrite(redPin, red); analogWrite(greenPin, green); analogWrite(bluePin, blue); } void setup() { pinMode(2, OUTPUT); //elektro zawór 1 pinMode(4, OUTPUT); //elektro zawór 2 pinMode(7, OUTPUT); //elektro zawór 3 pinMode(8, OUTPUT); //elektro zawór 4 pinMode(10, OUTPUT); //pompa pinMode(redPin, OUTPUT); // RGB pinMode(greenPin, OUTPUT); // RGB pinMode(bluePin, OUTPUT); // RGB pinMode(pin_nadajnik, OUTPUT); // czujnik wody pinMode(pin_odbiornik, INPUT); // czujnik wody digitalWrite(pompa, HIGH); //Wyłączenie wszystkiego digitalWrite(ele1, HIGH); digitalWrite(ele2, HIGH); digitalWrite(ele3, HIGH); digitalWrite(ele4, HIGH); lcd.begin(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("SYZYF 2020"); lcd.setCursor(1,1); lcd.print("ZACZYNAM TOCZYC"); delay(1000); } void(* resetFunc) (void) = 0; void loop() { if(blokada==1){ blokada_up=1; while(1){ digitalWrite(pompa, HIGH); digitalWrite(ele1, HIGH); digitalWrite(ele2, HIGH); digitalWrite(ele3, HIGH); digitalWrite(ele4, HIGH); setColor(0, 255, 0); lcd.clear(); lcd.setCursor(0,0); lcd.print("RELAX"); lcd.setCursor(10,0); lcd.print("->1"); blokada=stoper(60,0); if( blokada==5){ break;} test_poziomu_wody(); digitalWrite(pompa, LOW); digitalWrite(ele1, LOW); setColor(0, 0, 255); lcd.clear(); lcd.setCursor(0,0); lcd.print("AUTO"); lcd.setCursor(5,0); lcd.print("1"); blokada=stoper(1,15); if( blokada==5){ break;} digitalWrite(pompa, HIGH); digitalWrite(ele1, HIGH); setColor(0, 255, 0); lcd.clear(); lcd.setCursor(0,0); lcd.print("RELAX"); lcd.setCursor(10,0); lcd.print("-> 2"); blokada=stoper(30,0); if( blokada==5){ break;} test_poziomu_wody(); digitalWrite(pompa, LOW); digitalWrite(ele2, LOW); setColor(0, 0, 255); lcd.clear(); lcd.setCursor(0,0); lcd.print("AUTO"); lcd.setCursor(6,0); lcd.print("2"); blokada=stoper(1,15); if( blokada==5){ break;} digitalWrite(pompa, HIGH); digitalWrite(ele2, HIGH); setColor(0, 255, 0); lcd.clear(); lcd.setCursor(0,0); lcd.print("RELAX"); lcd.setCursor(10,0); lcd.print("-> 3"); blokada=stoper(30,0); if( blokada==5){ break;} test_poziomu_wody(); digitalWrite(pompa, LOW); digitalWrite(ele3, LOW); setColor(0, 0, 255); lcd.clear(); lcd.setCursor(0,0); lcd.print("AUTO"); lcd.setCursor(6,0); lcd.print("3"); blokada=stoper(1,15); if( blokada==5){ break;} digitalWrite(pompa, HIGH); digitalWrite(ele3, HIGH); resetFunc(); delay(100); lcd.clear(); lcd.setCursor(0,0); lcd.print("ZJEBAWSZY"); delay(1000000); }} key = keypad.getKey(); if(key == '1'){ while(1){ digitalWrite(pompa, LOW); digitalWrite(ele1, LOW); digitalWrite(ele2, HIGH); digitalWrite(ele3, HIGH); digitalWrite(ele4, HIGH); setColor(255, 0, 0); lcd.clear(); lcd.setCursor(0,0); lcd.print("MANUAL"); lcd.setCursor(7,0); lcd.print("1"); blokada_up=stoper_up(); if(blokada_up==5){ blokada=1; break;}}} if(key == '2'){ while(1){ digitalWrite(pompa, LOW); digitalWrite(ele2, LOW); digitalWrite(ele1, HIGH); digitalWrite(ele3, HIGH); digitalWrite(ele4, HIGH); setColor(255, 0, 0); lcd.clear(); lcd.setCursor(0,0); lcd.print("MANUAL"); lcd.setCursor(7,0); lcd.print(" 2"); blokada_up=stoper_up(); if(blokada_up==5){ blokada=1; break;}}} if(key == '3'){ while(1){ digitalWrite(pompa, LOW); digitalWrite(ele3, LOW); digitalWrite(ele1, HIGH); digitalWrite(ele2, HIGH); digitalWrite(ele4, HIGH); setColor(255, 0, 0); lcd.clear(); lcd.setCursor(0,0); lcd.print("MANUAL"); lcd.setCursor(7,0); lcd.print(" 3"); blokada_up=stoper_up(); if(blokada_up==5){ blokada=1; break;}}} if(key == '4'){ while(1){ digitalWrite(pompa, LOW); digitalWrite(ele4, LOW); digitalWrite(ele1, HIGH); digitalWrite(ele2, HIGH); digitalWrite(ele3, HIGH); setColor(255, 0, 0); lcd.clear(); lcd.setCursor(0,0); lcd.print("MANUAL"); lcd.setCursor(7,0); lcd.print(" 4"); blokada_up=stoper_up(); if(blokada_up==5){ blokada=1; break;}}} if(key == '5'){ while(1){ digitalWrite(pompa, HIGH); digitalWrite(ele1, HIGH); digitalWrite(ele2, HIGH); digitalWrite(ele3, HIGH); digitalWrite(ele4, HIGH); setColor(255, 0, 0); lcd.clear(); lcd.setCursor(6,0); lcd.print("STOP"); blokada_up=stoper_up(); if(blokada_up==5){ blokada=1; break;}}} }