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