#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);
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;}}}
}