- #include <Wire.h>
- #include <LiquidCrystal_I2C.h>
- #include <Keypad.h>
- 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);
- setColor(0, 255, 0);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print("RELAX");
- lcd.setCursor(10,0);
- lcd.print("->1");
- blokada=stoper(90,0);
- 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(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("-> END");
- blokada=stoper(90,0);
- 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;}}}
- }