Facebook
From Henryk, 4 Years ago, written in Python.
This paste is a reply to Timer from Henryk - view diff
Embed
Download Paste or View Raw
Hits: 302
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>  // biblioteka do LCD
  3. LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4 ,5 ,6 ,7 ,3, POSITIVE);
  4. int motorpin1 = 6;     // wyjscia silnika pin 6
  5. int motorpin2 = 7;     // wyjscie silnika pin 7
  6. int UV = 8;            // przekaznik lampa UV 8
  7. int Vacum = 9;         // przekaznik pompa podcisnienia 9
  8. #define pinUP 12       // klawisz +   pin 12
  9. #define pinDOWN 11     // klawisz -   pin 11
  10. #define pinOK 10       // klawisz OK  pin 10
  11.  
  12.  
  13. long start;            // zmienna okreslająca start procesu        
  14. int czas;              // czas trwania procesu, w sekundach
  15. int minuty;            // bez komentarza
  16. int sekundy;           // bez komentarza
  17.  
  18. int ustaw(int c)     // c - defaultowy czas (na początek do ustawiania)
  19.   {
  20.   lcd.clear();
  21.   lcd.setCursor(0,0);lcd.print("< Ustaw Czas Pracy >");
  22.    lcd.setCursor(0,1);lcd.print("  min-    >");
  23.   pokazCzas(c);                     // pokazujemy czas procesu do ustawienia
  24.   while(digitalRead(pinOK!=LOW))  // trwa tak długo aż naciśniemy przycisk OK
  25.     {
  26.     if(digitalRead(pinUP)==LOW){delay(3);if(digitalRead(pinUP)==LOW){c+=10;if(c>4800)c=4800;pokazCzas(c);}}     // klawisz +
  27.     if(digitalRead(pinDOWN)==LOW){delay(3);if(digitalRead(pinDOWN)==LOW){c-=10;if(c<0)c=0;pokazCzas(c);}} // klawisz -
  28.     delay(150);                      // aby za szybko nie przeskakiwał czas gdy wciśniemy przycisk na dłużej
  29.     }
  30.   lcd.clear();lcd.setCursor(0,0);lcd.print(" Czas Ustawiony ");delay(2000); // kosmetyka
  31.   return c;  // funkcja zwraca ustawiony czas
  32. }
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39. // --- uniwersalna funkcja pokazująca aktualny czas procesu, czas jaki upłynął, itp.  ---
  40. void pokazCzas(int c)  // c - aktualny czas procesu
  41. {
  42.   char buf[20]; memset(buf,0,sizeof(buf)); // zamiast pozycjonowania LCD proponuję to właśnie
  43.   minuty=c/60;sekundy=c%60;                // obliczamy mniuty i sekundy
  44.   if(minuty>59){minuty=0;sekundy=0;}       // po przekroczeniu 60 minut liczymy od nowa
  45.   snprintf(buf,sizeof(buf),"%02d:%02d",minuty,sekundy); // sprytna funkcja (radzę poczytać o niej :-)
  46.   lcd.setCursor(6,1);lcd.print(buf); // kosmetyka LCD
  47. }
  48. // --- funkcja do ustawiania czasu trwania procesu -----------------
  49.  
  50. // --- funkcja do odliczania czasu (zapalnik zegarowy do bomby :-)---
  51. void odliczanie(int ile)
  52. {
  53.   start=millis();                     // startujemy funkcją millis()
  54.   int akt_czas=ile;                   // zmienna pomocnicza do żonglerki czasem
  55.   while(akt_czas>0)                   // tak długo, aż odliczanie się nie skończy
  56.     {
  57.     akt_czas=czas-(millis()-start)/1000; // żonglerka czasem
  58.     pokazCzas(akt_czas);                 // pokaz czasu jaki pozostał
  59.     if(digitalRead(pinOK)==LOW)          // jeśli wciśniesz OK to natychmiastowe przerwanie procesu
  60.       {
  61.         akt_czas=0;pokazCzas(akt_czas);  // zerowanie czasu
  62.         lcd.setCursor(0,1);lcd.print("Proces Przerwany");delay(2000); // kosmetyka
  63.       }
  64.     }
  65. }
  66. // --------------------------------------------------------------
  67. void setup () {
  68.   pinMode(pinUP,INPUT_PULLUP);    // klawisz +
  69.   pinMode(pinDOWN,INPUT_PULLUP);  // klawisz -
  70.   pinMode(pinOK,INPUT_PULLUP);    // klawisz OK
  71.   pinMode(motorpin1,OUTPUT);        
  72.   pinMode(motorpin2,OUTPUT);        
  73.   pinMode(UV, OUTPUT);              
  74.   pinMode(Vacum, OUTPUT);
  75.   lcd.begin(20,4);                // wyświetlacz 16x2
  76.   lcd.begin(20,4);  
  77.   lcd.backlight(); // zalaczenie podwietlenia
  78.  
  79.   delay(3850);
  80.  
  81.  
  82.   lcd.clear();
  83.   }
  84. // -----------------------------------------------------------
  85. void loop ()
  86. {
  87.  czas=ustaw(300);                            // ustawiamy czas (domyślnie 5 minut)
  88.   lcd.clear();lcd.print("Start Odliczania"); // kosmetyka
  89.   digitalWrite(motorpin1,LOW);digitalWrite(motorpin2,HIGH); // Twoje motory ON
  90.   delay(1000);digitalWrite(motorpin1,HIGH);                
  91.   odliczanie(czas);                          // start odliczania
  92.   digitalWrite(motorpin2,LOW);delay(1000); digitalWrite(motorpin1,LOW); // motory OFF
  93.   lcd.clear();lcd.print("  Koniec Cyklu");delay(3000);lcd.clear();      // kosmetyka
  94. }

Replies to Re: Timer rss

Title Name Language When
Re: Re: Timer Henryk cpp 4 Years ago.