Facebook
From Burly Goat, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 180
  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/58; //Wyznaczenie odległości w cm
  105. litry = map(odleglosc, 8, 100, 0, 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/58; //Wyznaczenie odległości w mc
  170. litry = map(odleglosc, 8, 100, 0, 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/58; //Wyznaczenie odległości w cm
  267. litry = map(odleglosc, 8, 100, 0, 1000);
  268. poziom = 1000 - litry;
  269.    if(poziom<200)
  270.    while(1){
  271.      lcd.clear();
  272.     lcd.setCursor(3,0);
  273.     lcd.print("BRAK WODY!!!");
  274.     lcd.setCursor(2,1);
  275.     lcd.print("JEBAC POLICJE");
  276.     setColor(255, 0, 0);
  277.   digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  278.  delayMicroseconds(10); //Czas trwania 10us
  279.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  280.  
  281.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  282.  odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm
  283. litry = map(odleglosc, 8, 100, 0, 1000);
  284. poziom = 1000 - litry;
  285.     if(poziom>=200)
  286.     break;}
  287.    
  288.     digitalWrite(pompa, LOW);
  289.     digitalWrite(ele1, LOW);
  290.     setColor(0, 0, 255);
  291.     lcd.clear();
  292.     lcd.setCursor(0,0);
  293.     lcd.print("AUTO");
  294.     lcd.setCursor(5,0);
  295.     lcd.print("1");
  296.     blokada=stoper(0,10);
  297.  if( blokada==5){
  298.   break;}
  299.      
  300.  
  301.    digitalWrite(pompa, HIGH);
  302.     digitalWrite(ele1, HIGH);
  303.     setColor(0, 255, 0);
  304.     lcd.clear();
  305.     lcd.setCursor(0,0);
  306.     lcd.print("RELAX");
  307.     lcd.setCursor(10,0);
  308.     lcd.print("-> 2");
  309.        blokada=stoper(0,15);
  310.  if( blokada==5){
  311.   break;}
  312.  
  313.       digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  314.  delayMicroseconds(10); //Czas trwania 10us
  315.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  316.  
  317.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  318.  odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm
  319. litry = map(odleglosc, 8, 100, 0, 1000);
  320. poziom = 1000 - litry;
  321.   if(poziom<200)
  322.    while(1){
  323.      lcd.clear();
  324.     lcd.setCursor(3,0);
  325.     lcd.print("BRAK WODY!!!");
  326.     lcd.setCursor(2,1);
  327.     lcd.print("JEBAC POLICJE");
  328.     setColor(255, 0, 0);
  329.        digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  330.  delayMicroseconds(10); //Czas trwania 10us
  331.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  332.  
  333.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  334.  odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm
  335. litry = map(odleglosc, 8, 100, 0, 1000);
  336. poziom = 1000 - litry;
  337.     if(poziom>=200)
  338.     break;}
  339.    
  340.    
  341.   digitalWrite(pompa, LOW);
  342.   digitalWrite(ele2, LOW);
  343.   setColor(0, 0, 255);
  344.   lcd.clear();
  345.     lcd.setCursor(0,0);
  346.     lcd.print("AUTO");
  347.     lcd.setCursor(5,0);
  348.     lcd.print(" 2");
  349.      blokada=stoper(0,10);
  350.  if( blokada==5){
  351.   break;}
  352.      
  353.  digitalWrite(pompa, HIGH);
  354.   digitalWrite(ele2, HIGH);
  355.   setColor(0, 255, 0);
  356.   lcd.clear();
  357.     lcd.setCursor(0,0);
  358.     lcd.print("RELAX");
  359.     lcd.setCursor(10,0);
  360.     lcd.print("->  3");
  361.     blokada=stoper(0,15);
  362.  if( blokada==5){
  363.   break;}
  364.  
  365.  digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  366.  delayMicroseconds(10); //Czas trwania 10us
  367.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  368.  
  369.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  370.  odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm
  371. litry = map(odleglosc, 8, 100, 0, 1000);
  372. poziom = 1000 - litry;
  373.     if(poziom<200)
  374.    while(1){
  375.      lcd.clear();
  376.     lcd.setCursor(3,0);
  377.     lcd.print("BRAK WODY!!!");
  378.     lcd.setCursor(2,1);
  379.     lcd.print("JEBAC POLICJE");
  380.     setColor(255, 0, 0);
  381.        digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  382.  delayMicroseconds(10); //Czas trwania 10us
  383.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  384.  
  385.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  386.  odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm
  387. litry = map(odleglosc, 8, 100, 0, 1000);
  388. poziom = 1000 - litry;
  389.     if(poziom>=200)
  390.     break;}
  391.    
  392.    
  393.   digitalWrite(pompa, LOW);
  394.     digitalWrite(ele3, LOW);
  395.     setColor(0, 0, 255);
  396.     lcd.clear();
  397.     lcd.setCursor(0,0);
  398.     lcd.print("AUTO");
  399.     lcd.setCursor(5,0);
  400.     lcd.print("  3");
  401.       blokada=stoper(0,10);
  402.  if( blokada==5){
  403.   break;}
  404.      
  405.    digitalWrite(pompa, HIGH);
  406.     digitalWrite(ele3, HIGH);
  407.     setColor(0, 255, 0);
  408.     lcd.clear();
  409.     lcd.setCursor(0,0);
  410.     lcd.print("RELAX");
  411.     lcd.setCursor(10,0);
  412.     lcd.print("->   4");
  413.        blokada=stoper(0,15);
  414.  if( blokada==5){
  415.   break;}
  416.  
  417.    digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  418.  delayMicroseconds(10); //Czas trwania 10us
  419.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  420.  
  421.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  422.  odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm
  423. litry = map(odleglosc, 8, 100, 0, 1000);
  424. poziom = 1000 - litry;
  425.   if(poziom<200)
  426.    while(1){
  427.      lcd.clear();
  428.     lcd.setCursor(3,0);
  429.     lcd.print("BRAK WODY!!!");
  430.     lcd.setCursor(2,1);
  431.     lcd.print("JEBAC POLICJE");
  432.     setColor(255, 0, 0);
  433.       digitalWrite(pin_nadajnik, HIGH); //Wystawienie stanu wysokiego na pin nadajnika
  434.  delayMicroseconds(10); //Czas trwania 10us
  435.  digitalWrite(pin_nadajnik, LOW); //Wystawienie stanu niskiego na pin nadajnika
  436.  
  437.  czas_impulsu = pulseIn(pin_odbiornik, HIGH); //Czas trwania impulsu na pinie Echo
  438.  odleglosc = czas_impulsu/58; //Wyznaczenie odległości w cm
  439. litry = map(odleglosc, 8, 100, 0, 1000);
  440. poziom = 1000 - litry;
  441.     if(poziom>=200)
  442.     break;}
  443.    
  444.    
  445.   digitalWrite(pompa, LOW);
  446.   digitalWrite(ele4, LOW);
  447.   setColor(0, 0, 255);
  448.   lcd.clear();
  449.     lcd.setCursor(0,0);
  450.     lcd.print("AUTO");
  451.     lcd.setCursor(5,0);
  452.     lcd.print("   4");
  453.       blokada=stoper(0,10);
  454.  if( blokada==5){
  455.   break;}
  456.      
  457. }}
  458.  
  459.  key = keypad.getKey();
  460.  
  461. if(key == '1'){
  462.   while(1){
  463.     digitalWrite(pompa, LOW);
  464.     digitalWrite(ele1, LOW);
  465.     digitalWrite(ele2, HIGH);
  466.     digitalWrite(ele3, HIGH);
  467.     digitalWrite(ele4, HIGH);
  468.     setColor(255, 0, 0);
  469.     lcd.clear();
  470.     lcd.setCursor(0,0);
  471.     lcd.print("MANUAL");
  472.     lcd.setCursor(7,0);
  473.     lcd.print("1");
  474.        blokada_up=stoper_up();
  475.   if(blokada_up==5){
  476.         blokada=1;
  477.             break;}}}
  478.  
  479.  
  480.  
  481.  
  482. if(key == '2'){
  483.   while(1){
  484.     digitalWrite(pompa, LOW);
  485.     digitalWrite(ele2, LOW);
  486.     digitalWrite(ele1, HIGH);
  487.      digitalWrite(ele3, HIGH);
  488.     digitalWrite(ele4, HIGH);
  489.     setColor(255, 0, 0);
  490.     lcd.clear();
  491.     lcd.setCursor(0,0);
  492.     lcd.print("MANUAL");
  493.     lcd.setCursor(7,0);
  494.     lcd.print(" 2");
  495.     blokada_up=stoper_up();
  496.   if(blokada_up==5){
  497.         blokada=1;
  498.             break;}}}
  499.  
  500.  
  501.  
  502. if(key == '3'){
  503.   while(1){
  504.     digitalWrite(pompa, LOW);
  505.     digitalWrite(ele3, LOW);
  506.     digitalWrite(ele1, HIGH);
  507.     digitalWrite(ele2, HIGH);
  508.     digitalWrite(ele4, HIGH);
  509.     setColor(255, 0, 0);
  510.     lcd.clear();
  511.     lcd.setCursor(0,0);
  512.     lcd.print("MANUAL");
  513.     lcd.setCursor(7,0);
  514.     lcd.print("  3");
  515.      blokada_up=stoper_up();
  516.   if(blokada_up==5){
  517.         blokada=1;
  518.             break;}}}
  519.  
  520.  
  521.  
  522. if(key == '4'){
  523.   while(1){
  524.     digitalWrite(pompa, LOW);
  525.     digitalWrite(ele4, LOW);
  526.     digitalWrite(ele1, HIGH);
  527.     digitalWrite(ele2, HIGH);
  528.     digitalWrite(ele3, HIGH);
  529.    
  530.     setColor(255, 0, 0);
  531.     lcd.clear();
  532.     lcd.setCursor(0,0);
  533.     lcd.print("MANUAL");
  534.     lcd.setCursor(7,0);
  535.     lcd.print("   4");
  536.     blokada_up=stoper_up();
  537.   if(blokada_up==5){
  538.         blokada=1;
  539.             break;}}}
  540.  
  541.  
  542. if(key == '5'){
  543.   while(1){
  544.    digitalWrite(pompa, HIGH);
  545.     digitalWrite(ele1, HIGH);
  546.     digitalWrite(ele2, HIGH);
  547.     digitalWrite(ele3, HIGH);
  548.     digitalWrite(ele4, HIGH);
  549.   setColor(255, 0, 0);
  550.   lcd.clear();
  551.     lcd.setCursor(6,0);
  552.     lcd.print("STOP");
  553.    
  554.   blokada_up=stoper_up();
  555.   if(blokada_up==5){
  556.         blokada=1;
  557.             break;}}}
  558.  
  559.  
  560. }