Advertisement
ny_

kod pana Henryk Michalski

ny_
Jul 22nd, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h> // biblioteka do LCD
  3.  
  4. LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4 ,5 ,6 ,7 ,3, POSITIVE);
  5.  
  6. int motorpin1 = 6; // wyjscia silnika pin 6
  7. int motorpin2 = 7; // wyjscie silnika pin 7
  8. int UV = 8; // przekaznik lampa UV 8
  9. int Vacum = 9; // przekaznik pompa podcisnienia 9
  10.  
  11. #define pinUP 12 // klawisz + pin 12
  12. #define pinDOWN 11 // klawisz - pin 11
  13. #define pinOK 10 // klawisz OK pin 10
  14.  
  15. // */
  16.  
  17. // moja wersja LCD i konfiguracja pinów:
  18.  
  19. long start; // zmienna okreslająca start procesu
  20. int czas; // czas trwania procesu, w sekundach
  21. int minuty; // bez komentarza
  22. int sekundy; // bez komentarza
  23.  
  24. // --- uniwersalna funkcja pokazująca aktualny czas procesu, czas jaki upłynął, itp. ---
  25.  
  26. void pokazCzas(int c) { // c - aktualny czas procesu
  27.  
  28.   char buf[20]; memset(buf, 0, sizeof(buf) ); // zamiast pozycjonowania LCD proponuję to właśnie
  29.  
  30.   minuty = c / 60;
  31.   sekundy = c%60; // obliczamy mniuty i sekundy
  32.  
  33.   if(minuty > 59) { minuty=0; sekundy=0; } // po przekroczeniu 60 minut liczymy od nowa
  34.  
  35.   snprintf(buf, sizeof(buf), "%02d:%02d", minuty, sekundy); // sprytna funkcja (radzę poczytać o niej :-)
  36.  
  37.   lcd.setCursor(6,1); lcd.print(buf); // kosmetyka LCD
  38.  
  39. }
  40.  
  41. // --- funkcja do ustawiania czasu trwania procesu -----------------
  42.  
  43. int ustaw(int c) { // c - defaultowy czas (na początek do ustawiania)
  44.  
  45.   lcd.clear();
  46.   lcd.setCursor(0,0); lcd.print("< Ustaw Czas Pracy >");
  47.   pokazCzas(c); // pokazujemy czas procesu do ustawienia
  48.  
  49.   while(digitalRead(pinOK!=LOW)) { // trwa tak długo aż naciśniemy przycisk OK
  50.  
  51.     if(digitalRead(pinUP) == LOW) {
  52.       delay(3);
  53.       if(digitalRead(pinUP)==LOW) {
  54.         c += 10;
  55.         if(c>4800) c = 4800;
  56.         pokazCzas(c);
  57.       }
  58.     } // klawisz +
  59.  
  60.     if(digitalRead(pinDOWN)==LOW) {
  61.       delay(3);
  62.       if(digitalRead(pinDOWN)==LOW) {
  63.         c-=10;
  64.         if(c<0) c=0;
  65.         pokazCzas(c);
  66.       }
  67.     } // klawisz -
  68.     delay(150); // aby za szybko nie przeskakiwał czas gdy wciśniemy przycisk na dłużej
  69.   }
  70.  
  71.   lcd.clear();lcd.setCursor(0,0);lcd.print(" Czas Ustawiony ");delay(2000); // kosmetyka
  72.  
  73.   return c; // funkcja zwraca ustawiony czas
  74.  
  75. }
  76.  
  77. // --- funkcja do odliczania czasu (zapalnik zegarowy do bomby :-)---
  78.  
  79. void odliczanie(int ile) {
  80.  
  81.   start = millis(); // startujemy funkcją millis()
  82.  
  83.   int akt_czas = ile; // zmienna pomocnicza do żonglerki czasem
  84.  
  85.   while(akt_czas > 0) {// tak długo, aż odliczanie się nie skończy
  86.     akt_czas = czas - (millis() - start) / 1000; // żonglerka czasem
  87.     pokazCzas(akt_czas); // pokaz czasu jaki pozostał
  88.    
  89.     if(digitalRead(pinOK) == LOW) { // jeśli wciśniesz OK to natychmiastowe przerwanie procesu
  90.  
  91.       akt_czas = 0;
  92.       pokazCzas(akt_czas); // zerowanie czasu
  93.      
  94.       lcd.setCursor(0,1);lcd.print("Proces Przerwany");delay(2000); // kosmetyka
  95.     }
  96.   }
  97. }
  98.  
  99. // --------------------------------------------------------------
  100.  
  101. void setup () {
  102.  
  103.   pinMode( pinUP , INPUT_PULLUP ); // klawisz +
  104.   pinMode( pinDOWN , INPUT_PULLUP ); // klawisz -
  105.   pinMode( pinOK , INPUT_PULLUP ); // klawisz OK
  106.   pinMode( motorpin1 , OUTPUT );
  107.   pinMode( motorpin2 , OUTPUT );
  108.   pinMode( UV , OUTPUT );
  109.   pinMode( Vacum , OUTPUT );
  110.  
  111.   lcd.begin(20,4); // wyświetlacz 16x2
  112.   lcd.begin(20,4);
  113.   lcd.backlight(); // zalaczenie podwietlenia
  114.   lcd.setCursor(0,0);
  115.  
  116.   delay(3850);
  117.  
  118.   lcd.clear();
  119.  
  120. }
  121.  
  122. // -----------------------------------------------------------
  123.  
  124. void loop () {
  125.  
  126.   czas = ustaw(300); // ustawiamy czas (domyślnie 5 minut)
  127.  
  128.   lcd.clear(); lcd.print("Start Odliczania"); // kosmetyka
  129.  
  130.   digitalWrite(motorpin1,HIGH); digitalWrite(motorpin2,HIGH); // Twoje motory ON
  131.  
  132.   delay(1000);
  133.  
  134.   digitalWrite(motorpin1 , HIGH);
  135.  
  136.   odliczanie(czas); // start odliczania
  137.  
  138.   digitalWrite(motorpin2,LOW);delay(1000); digitalWrite(motorpin1,LOW); // motory OFF
  139.  
  140.   lcd.clear();
  141.  
  142.   lcd.print(" Koniec Cyklu");
  143.   delay(3000);
  144.   lcd.clear(); // kosmetyka
  145.  
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement