#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 long h = 3600000; // 3600000 milliseconds in an hour long m = 60000; // 60000 milliseconds in a minute long s= 1000; // 1000 milliseconds in a second long czas = 0; unsigned long zapamietany_czas = 0; unsigned long aktualny_czas =0; const unsigned long Interwal = 1000; 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){ int m=Min; int s=Sec; char key; unsigned long zapamietany_czast=millis(); unsigned long aktualny_czast=millis(); while(1){ if(m==0 && s== 0){ lcd.setCursor(0,1); lcd.print(0); lcd.setCursor(1,1); lcd.print(0); lcd.setCursor(2,1); lcd.print(":"); lcd.setCursor(3,1); lcd.print(0); lcd.setCursor(4,1); lcd.print(0); break; } aktualny_czast=millis(); lcd.setCursor(0,1); lcd.print(m/10); lcd.setCursor(1,1); lcd.print(m%10); lcd.setCursor(2,1); lcd.print(":"); lcd.setCursor(3,1); lcd.print(s/10); lcd.setCursor(4,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(0); lcd.setCursor(1,1); lcd.print(0); lcd.setCursor(2,1); lcd.print(":"); lcd.setCursor(3,1); lcd.print(0); lcd.setCursor(4,1); lcd.print(0); return 5; break; } } } int stoper_up(){ int m=0; int s=0; char key; unsigned long zapamietany_czast=millis(); unsigned long aktualny_czast=millis(); while(1){ aktualny_czast=millis(); lcd.setCursor(0,1); lcd.print(m/10); lcd.setCursor(1,1); lcd.print(m%10); lcd.setCursor(2,1); lcd.print(":"); lcd.setCursor(3,1); lcd.print(s/10); lcd.setCursor(4,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(0); lcd.setCursor(1,1); lcd.print(0); lcd.setCursor(2,1); lcd.print(":"); lcd.setCursor(3,1); lcd.print(0); lcd.setCursor(4,1); lcd.print(0); return 5; 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.print("Czas:"); } 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(0,15); if( blokada==5){ break;} 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;} 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(0,10); 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(0,15); if( blokada==5){ break;} 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;} digitalWrite(pompa, LOW); digitalWrite(ele2, LOW); setColor(0, 0, 255); lcd.clear(); lcd.setCursor(0,0); lcd.print("AUTO"); lcd.setCursor(5,0); lcd.print(" 2"); blokada=stoper(0,10); 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(0,15); if( blokada==5){ break;} 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;} digitalWrite(pompa, LOW); digitalWrite(ele3, LOW); setColor(0, 0, 255); lcd.clear(); lcd.setCursor(0,0); lcd.print("AUTO"); lcd.setCursor(5,0); lcd.print(" 3"); blokada=stoper(0,10); if( blokada==5){ break;} digitalWrite(pompa, HIGH); digitalWrite(ele3, HIGH); setColor(0, 255, 0); lcd.clear(); lcd.setCursor(0,0); lcd.print("RELAX"); lcd.setCursor(10,0); lcd.print("-> 4"); blokada=stoper(0,15); if( blokada==5){ break;} 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;} digitalWrite(pompa, LOW); digitalWrite(ele4, LOW); setColor(0, 0, 255); lcd.clear(); lcd.setCursor(0,0); lcd.print("AUTO"); lcd.setCursor(5,0); lcd.print(" 4"); blokada=stoper(0,10); if( blokada==5){ break;} }} 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;}}} }