Facebook
From Sludgy Macaw, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 198
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3. #include <Keypad.h>
  4.  
  5. LiquidCrystal_I2C lcd(0x27, 16, 2);
  6. #define pin_nadajnik A1   // czujnik wody
  7. #define pin_odbiornik A0 // czujnik wody
  8. int pompa=10;//deklaracje
  9.  int ele1=2;
  10.  int ele2=4;
  11.  int ele3=7;
  12.  int ele4=8;
  13.  
  14.  int blokada=1;
  15.  int blokada_up=1;
  16.  
  17. int redPin = 3; // led
  18. int greenPin = 5; // led
  19. int bluePin = 6; // led
  20. int odleglosc;
  21. int litry;//Zmienna przechowująca odległość
  22. int poziom; //poziom wody
  23. long czas_impulsu = 0;  //Zmienna przechowująca czas trwania impulsu na pinie ECHO
  24.  byte customChar[8] ={
  25.                       B00100,
  26.                       B00100,
  27.                       B01100,
  28.                       B01000,
  29.                       B11001,
  30.                       B11101,
  31.                       B11111,
  32.                       B01110
  33.                      };
  34.  // kropelka
  35.  
  36.  long h = 3600000; // 3600000 milliseconds in an hour
  37. long m = 60000; // 60000 milliseconds in a minute
  38. long s=  1000; // 1000 milliseconds in a second
  39. long czas = 0;
  40.  
  41.  
  42. unsigned long zapamietany_czas = 0;
  43. unsigned long aktualny_czas =0;
  44. const unsigned long Interwal = 1000;
  45.      
  46.  
  47. unsigned long previousTime = 0;
  48. const byte ROWS = 4; //four rows
  49. const byte COLS = 3; //three columns
  50. char keys[ROWS][COLS] = {
  51.   {'1','2','3'},
  52.   {'4','5','6'},
  53.  
  54. };
  55.  
  56. byte rowPins[ROWS] = {11, 12}; //connect to the row pinouts of the keypad
  57. byte colPins[COLS] = {13,A3,A2}; //connect to the column pinouts of the keypad
  58.  
  59. Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
  60. char key ;
  61.  
  62.  
  63.  int stoper(int Min, int Sec){
  64.   int m=Min;
  65.   int s=Sec;
  66.   char key;
  67. unsigned long zapamietany_czast=millis();
  68. unsigned long aktualny_czast=millis();
  69.  
  70.   while(1){
  71.    
  72.       if(m==0 && s== 0){
  73.   lcd.setCursor(0,1);
  74.    lcd.print(0);
  75.    lcd.setCursor(1,1);
  76.    lcd.print(0);
  77.    lcd.setCursor(2,1);
  78.    lcd.print(":");
  79.    lcd.setCursor(3,1);
  80.    lcd.print(0);
  81.    lcd.setCursor(4,1);
  82.    lcd.print(0);
  83.     break;     }
  84.  
  85.     aktualny_czast=millis();
  86.    lcd.setCursor(0,1);
  87.    lcd.print(m/10);
  88.    lcd.setCursor(1,1);
  89.    lcd.print(m%10);
  90.    lcd.setCursor(2,1);
  91.    lcd.print(":");
  92.    lcd.setCursor(3,1);
  93.    lcd.print(s/10);
  94.    lcd.setCursor(4,1);
  95.    lcd.print(s%10);
  96.    
  97.     if(aktualny_czast-zapamietany_czast>=1000){
  98.     s--;
  99.     digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  100.  delayMicroseconds(10); //Czas trwania 10us
  101.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  102.  
  103.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  104.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  105. litry = map(odleglosc, 100, 1015, 1, 1000);
  106. poziom = 1000 - litry;
  107. //Zabezpieczenie przed przekroczeniem zakresu pomiarowego
  108.  
  109.     lcd.createChar(0, customChar);
  110.   lcd.setCursor(10, 1);
  111.   lcd.write(byte(0));
  112.   lcd.setCursor(12, 1);
  113.    lcd.print(poziom);
  114.    lcd.print("L");
  115.       zapamietany_czast=aktualny_czast;}
  116.    
  117.     if(s==-1 && m>0){
  118.       m--;
  119.       s=59;}
  120.    
  121.      
  122.       key = keypad.getKey();
  123. if(key=='1' || key=='2' || key=='3' || key=='4' || key=='5'){
  124.    lcd.setCursor(0,1);
  125.    lcd.print(0);
  126.    lcd.setCursor(1,1);
  127.    lcd.print(0);
  128.    lcd.setCursor(2,1);
  129.    lcd.print(":");
  130.    lcd.setCursor(3,1);
  131.    lcd.print(0);
  132.    lcd.setCursor(4,1);
  133.    lcd.print(0);
  134.    return 5;
  135. break;
  136.  
  137.   }
  138. }
  139.  }
  140.  
  141.  int stoper_up(){
  142.   int m=0;
  143.   int s=0;
  144.   char key;
  145. unsigned long zapamietany_czast=millis();
  146. unsigned long aktualny_czast=millis();
  147.  
  148.   while(1){
  149.    
  150.     aktualny_czast=millis();
  151.    lcd.setCursor(0,1);
  152.    lcd.print(m/10);
  153.    lcd.setCursor(1,1);
  154.    lcd.print(m%10);
  155.    lcd.setCursor(2,1);
  156.    lcd.print(":");
  157.    lcd.setCursor(3,1);
  158.    lcd.print(s/10);
  159.    lcd.setCursor(4,1);
  160.    lcd.print(s%10);
  161.    
  162.     if(aktualny_czast-zapamietany_czast>=1000){
  163.     s++;
  164.     digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  165.  delayMicroseconds(10); //Czas trwania 10us
  166.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  167.  
  168.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  169.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  170. litry = map(odleglosc, 100, 1015, 1, 1000);
  171. poziom = 1000 - litry;
  172. //Zabezpieczenie przed przekroczeniem zakresu pomiarowego
  173.  
  174.     lcd.createChar(0, customChar);
  175.   lcd.setCursor(10, 1);
  176.   lcd.write(byte(0));
  177.   lcd.setCursor(12, 1);
  178.    lcd.print(poziom);
  179.    lcd.print("L");
  180.       zapamietany_czast=aktualny_czast;}
  181.    
  182.     if(s>59){
  183.       m++;
  184.       s=0;}
  185.    
  186.       key = keypad.getKey();
  187. if(key=='6' ){
  188.    lcd.setCursor(0,1);
  189.    lcd.print(0);
  190.    lcd.setCursor(1,1);
  191.    lcd.print(0);
  192.    lcd.setCursor(2,1);
  193.    lcd.print(":");
  194.    lcd.setCursor(3,1);
  195.    lcd.print(0);
  196.    lcd.setCursor(4,1);
  197.    lcd.print(0);
  198.    return 5;
  199. break;
  200.  
  201.   }
  202. }
  203.  }
  204.  
  205. void setColor(int red, int green, int blue)
  206. {
  207. #ifdef COMMON_ANODE
  208.   red = 255 - red;
  209.   green = 255 - green;
  210.   blue = 255 - blue;
  211. #endif
  212.   analogWrite(redPin, red);
  213.   analogWrite(greenPin, green);
  214.   analogWrite(bluePin, blue);
  215. }
  216. void setup() {
  217.   pinMode(2, OUTPUT); //elektro zawór 1
  218.   pinMode(4, OUTPUT); //elektro zawór 2
  219.   pinMode(7, OUTPUT); //elektro zawór 3
  220.   pinMode(8, OUTPUT); //elektro zawór 4
  221.   pinMode(10, OUTPUT); //pompa
  222.   pinMode(redPin, OUTPUT); // RGB
  223.   pinMode(greenPin, OUTPUT); // RGB
  224.   pinMode(bluePin, OUTPUT); // RGB
  225.  pinMode(pin_nadajnik, OUTPUT); // czujnik wody
  226.  pinMode(pin_odbiornik, INPUT); // czujnik wody
  227.  
  228.   digitalWrite(pompa, HIGH); //Wyłączenie wszystkiego
  229.   digitalWrite(ele1, HIGH);
  230.   digitalWrite(ele2, HIGH);
  231.   digitalWrite(ele3, HIGH);
  232.   digitalWrite(ele4, HIGH);
  233.   lcd.begin();
  234.   lcd.backlight();
  235.   lcd.print("Czas:");
  236.  
  237. }
  238.  
  239. void loop() {
  240.  
  241.  
  242. if(blokada==1){
  243.   blokada_up=1;
  244.     while(1){
  245.  
  246.     digitalWrite(pompa, HIGH);
  247.     digitalWrite(ele1, HIGH);
  248.     digitalWrite(ele2, HIGH);
  249.     digitalWrite(ele3, HIGH);
  250.     digitalWrite(ele4, HIGH);
  251.     setColor(0, 255, 0);
  252.     lcd.clear();
  253.     lcd.setCursor(0,0);
  254.     lcd.print("RELAX");
  255.     lcd.setCursor(10,0);
  256.     lcd.print("->1");
  257.     blokada=stoper(0,15);
  258.  if( blokada==5){
  259.   break;}
  260.  
  261.       digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  262.  delayMicroseconds(10); //Czas trwania 10us
  263.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  264.  
  265.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  266.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  267. litry = map(odleglosc, 100, 1015, 1, 1000);
  268.    if(poziom<200)
  269.    while(1){
  270.      lcd.clear();
  271.     lcd.setCursor(3,0);
  272.     lcd.print("BRAK WODY!!!");
  273.     lcd.setCursor(2,1);
  274.     lcd.print("JEBAC POLICJE");
  275.     setColor(255, 0, 0);
  276.   digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  277.  delayMicroseconds(10); //Czas trwania 10us
  278.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  279.  
  280.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  281.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  282. litry = map(odleglosc, 100, 1015, 1, 1000);
  283.     if(poziom>=200)
  284.     break;}
  285.    
  286.     digitalWrite(pompa, LOW);
  287.     digitalWrite(ele1, LOW);
  288.     setColor(0, 0, 255);
  289.     lcd.clear();
  290.     lcd.setCursor(0,0);
  291.     lcd.print("AUTO");
  292.     lcd.setCursor(5,0);
  293.     lcd.print("1");
  294.     blokada=stoper(0,10);
  295.  if( blokada==5){
  296.   break;}
  297.      
  298.  
  299.    digitalWrite(pompa, HIGH);
  300.     digitalWrite(ele1, HIGH);
  301.     setColor(0, 255, 0);
  302.     lcd.clear();
  303.     lcd.setCursor(0,0);
  304.     lcd.print("RELAX");
  305.     lcd.setCursor(10,0);
  306.     lcd.print("-> 2");
  307.        blokada=stoper(0,15);
  308.  if( blokada==5){
  309.   break;}
  310.  
  311.       digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  312.  delayMicroseconds(10); //Czas trwania 10us
  313.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  314.  
  315.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  316.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  317. litry = map(odleglosc, 100, 1015, 1, 1000);
  318.   if(poziom<200)
  319.    while(1){
  320.      lcd.clear();
  321.     lcd.setCursor(3,0);
  322.     lcd.print("BRAK WODY!!!");
  323.     lcd.setCursor(2,1);
  324.     lcd.print("JEBAC POLICJE");
  325.     setColor(255, 0, 0);
  326.        digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  327.  delayMicroseconds(10); //Czas trwania 10us
  328.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  329.  
  330.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  331.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  332. litry = map(odleglosc, 100, 1015, 1, 1000);
  333.     if(poziom>=200)
  334.     break;}
  335.    
  336.    
  337.   digitalWrite(pompa, LOW);
  338.   digitalWrite(ele2, LOW);
  339.   setColor(0, 0, 255);
  340.   lcd.clear();
  341.     lcd.setCursor(0,0);
  342.     lcd.print("AUTO");
  343.     lcd.setCursor(5,0);
  344.     lcd.print(" 2");
  345.      blokada=stoper(0,10);
  346.  if( blokada==5){
  347.   break;}
  348.      
  349.  digitalWrite(pompa, HIGH);
  350.   digitalWrite(ele2, HIGH);
  351.   setColor(0, 255, 0);
  352.   lcd.clear();
  353.     lcd.setCursor(0,0);
  354.     lcd.print("RELAX");
  355.     lcd.setCursor(10,0);
  356.     lcd.print("->  3");
  357.     blokada=stoper(0,15);
  358.  if( blokada==5){
  359.   break;}
  360.  
  361.  digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  362.  delayMicroseconds(10); //Czas trwania 10us
  363.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  364.  
  365.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  366.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  367. litry = map(odleglosc, 100, 1015, 1, 1000);
  368.     if(poziom<200)
  369.    while(1){
  370.      lcd.clear();
  371.     lcd.setCursor(3,0);
  372.     lcd.print("BRAK WODY!!!");
  373.     lcd.setCursor(2,1);
  374.     lcd.print("JEBAC POLICJE");
  375.     setColor(255, 0, 0);
  376.        digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  377.  delayMicroseconds(10); //Czas trwania 10us
  378.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  379.  
  380.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  381.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  382. litry = map(odleglosc, 100, 1015, 1, 1000);
  383.     if(poziom>=200)
  384.     break;}
  385.    
  386.    
  387.   digitalWrite(pompa, LOW);
  388.     digitalWrite(ele3, LOW);
  389.     setColor(0, 0, 255);
  390.     lcd.clear();
  391.     lcd.setCursor(0,0);
  392.     lcd.print("AUTO");
  393.     lcd.setCursor(5,0);
  394.     lcd.print("  3");
  395.       blokada=stoper(0,10);
  396.  if( blokada==5){
  397.   break;}
  398.      
  399.    digitalWrite(pompa, HIGH);
  400.     digitalWrite(ele3, HIGH);
  401.     setColor(0, 255, 0);
  402.     lcd.clear();
  403.     lcd.setCursor(0,0);
  404.     lcd.print("RELAX");
  405.     lcd.setCursor(10,0);
  406.     lcd.print("->   4");
  407.        blokada=stoper(0,15);
  408.  if( blokada==5){
  409.   break;}
  410.  
  411.    digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  412.  delayMicroseconds(10); //Czas trwania 10us
  413.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  414.  
  415.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  416.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  417. litry = map(odleglosc, 100, 1015, 1, 1000);
  418.   if(poziom<200)
  419.    while(1){
  420.      lcd.clear();
  421.     lcd.setCursor(3,0);
  422.     lcd.print("BRAK WODY!!!");
  423.     lcd.setCursor(2,1);
  424.     lcd.print("JEBAC POLICJE");
  425.     setColor(255, 0, 0);
  426.       digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  427.  delayMicroseconds(10); //Czas trwania 10us
  428.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  429.  
  430.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  431.  odleglosc = czas_impulsu/5,8; //Wyznaczenie odległości w cm
  432. litry = map(odleglosc, 100, 1015, 1, 1000);
  433.     if(poziom>=200)
  434.     break;}
  435.    
  436.    
  437.   digitalWrite(pompa, LOW);
  438.   digitalWrite(ele4, LOW);
  439.   setColor(0, 0, 255);
  440.   lcd.clear();
  441.     lcd.setCursor(0,0);
  442.     lcd.print("AUTO");
  443.     lcd.setCursor(5,0);
  444.     lcd.print("   4");
  445.       blokada=stoper(0,10);
  446.  if( blokada==5){
  447.   break;}
  448.      
  449. }}
  450.  
  451.  key = keypad.getKey();
  452.  
  453. if(key == '1'){
  454.   while(1){
  455.     digitalWrite(pompa, LOW);
  456.     digitalWrite(ele1, LOW);
  457.     digitalWrite(ele2, HIGH);
  458.     digitalWrite(ele3, HIGH);
  459.     digitalWrite(ele4, HIGH);
  460.     setColor(255, 0, 0);
  461.     lcd.clear();
  462.     lcd.setCursor(0,0);
  463.     lcd.print("MANUAL");
  464.     lcd.setCursor(7,0);
  465.     lcd.print("1");
  466.        blokada_up=stoper_up();
  467.   if(blokada_up==5){
  468.         blokada=1;
  469.             break;}}}
  470.  
  471.  
  472.  
  473.  
  474. if(key == '2'){
  475.   while(1){
  476.     digitalWrite(pompa, LOW);
  477.     digitalWrite(ele2, LOW);
  478.     digitalWrite(ele1, HIGH);
  479.      digitalWrite(ele3, HIGH);
  480.     digitalWrite(ele4, HIGH);
  481.     setColor(255, 0, 0);
  482.     lcd.clear();
  483.     lcd.setCursor(0,0);
  484.     lcd.print("MANUAL");
  485.     lcd.setCursor(7,0);
  486.     lcd.print(" 2");
  487.     blokada_up=stoper_up();
  488.   if(blokada_up==5){
  489.         blokada=1;
  490.             break;}}}
  491.  
  492.  
  493.  
  494. if(key == '3'){
  495.   while(1){
  496.     digitalWrite(pompa, LOW);
  497.     digitalWrite(ele3, LOW);
  498.     digitalWrite(ele1, HIGH);
  499.     digitalWrite(ele2, HIGH);
  500.     digitalWrite(ele4, HIGH);
  501.     setColor(255, 0, 0);
  502.     lcd.clear();
  503.     lcd.setCursor(0,0);
  504.     lcd.print("MANUAL");
  505.     lcd.setCursor(7,0);
  506.     lcd.print("  3");
  507.      blokada_up=stoper_up();
  508.   if(blokada_up==5){
  509.         blokada=1;
  510.             break;}}}
  511.  
  512.  
  513.  
  514. if(key == '4'){
  515.   while(1){
  516.     digitalWrite(pompa, LOW);
  517.     digitalWrite(ele4, LOW);
  518.     digitalWrite(ele1, HIGH);
  519.     digitalWrite(ele2, HIGH);
  520.     digitalWrite(ele3, HIGH);
  521.    
  522.     setColor(255, 0, 0);
  523.     lcd.clear();
  524.     lcd.setCursor(0,0);
  525.     lcd.print("MANUAL");
  526.     lcd.setCursor(7,0);
  527.     lcd.print("   4");
  528.     blokada_up=stoper_up();
  529.   if(blokada_up==5){
  530.         blokada=1;
  531.             break;}}}
  532.  
  533.  
  534. if(key == '5'){
  535.   while(1){
  536.    digitalWrite(pompa, HIGH);
  537.     digitalWrite(ele1, HIGH);
  538.     digitalWrite(ele2, HIGH);
  539.     digitalWrite(ele3, HIGH);
  540.     digitalWrite(ele4, HIGH);
  541.   setColor(255, 0, 0);
  542.   lcd.clear();
  543.     lcd.setCursor(6,0);
  544.     lcd.print("STOP");
  545.    
  546.   blokada_up=stoper_up();
  547.   if(blokada_up==5){
  548.         blokada=1;
  549.             break;}}}
  550.  
  551.  
  552. }