Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Wire.h>
- #include <LiquidCrystal_I2C.h> // biblioteka do LCD
- LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4 ,5 ,6 ,7 ,3, POSITIVE);
- int motorpin1 = 6; // wyjscia silnika pin 6
- int motorpin2 = 7; // wyjscie silnika pin 7
- int UV = 8; // przekaznik lampa UV 8
- int Vacum = 9; // przekaznik pompa podcisnienia 9
- #define pinUP 12 // klawisz + pin 12
- #define pinDOWN 11 // klawisz - pin 11
- #define pinOK 10 // klawisz OK pin 10
- // */
- // moja wersja LCD i konfiguracja pinów:
- long start; // zmienna okreslająca start procesu
- int czas; // czas trwania procesu, w sekundach
- int minuty; // bez komentarza
- int sekundy; // bez komentarza
- // --- uniwersalna funkcja pokazująca aktualny czas procesu, czas jaki upłynął, itp. ---
- void pokazCzas(int c) { // c - aktualny czas procesu
- char buf[20]; memset(buf, 0, sizeof(buf) ); // zamiast pozycjonowania LCD proponuję to właśnie
- minuty = c / 60;
- sekundy = c%60; // obliczamy mniuty i sekundy
- if(minuty > 59) { minuty=0; sekundy=0; } // po przekroczeniu 60 minut liczymy od nowa
- snprintf(buf, sizeof(buf), "%02d:%02d", minuty, sekundy); // sprytna funkcja (radzę poczytać o niej :-)
- lcd.setCursor(6,1); lcd.print(buf); // kosmetyka LCD
- }
- // --- funkcja do ustawiania czasu trwania procesu -----------------
- int ustaw(int c) { // c - defaultowy czas (na początek do ustawiania)
- lcd.clear();
- lcd.setCursor(0,0); lcd.print("< Ustaw Czas Pracy >");
- pokazCzas(c); // pokazujemy czas procesu do ustawienia
- while(digitalRead(pinOK!=LOW)) { // trwa tak długo aż naciśniemy przycisk OK
- if(digitalRead(pinUP) == LOW) {
- delay(3);
- if(digitalRead(pinUP)==LOW) {
- c += 10;
- if(c>4800) c = 4800;
- pokazCzas(c);
- }
- } // klawisz +
- if(digitalRead(pinDOWN)==LOW) {
- delay(3);
- if(digitalRead(pinDOWN)==LOW) {
- c-=10;
- if(c<0) c=0;
- pokazCzas(c);
- }
- } // klawisz -
- delay(150); // aby za szybko nie przeskakiwał czas gdy wciśniemy przycisk na dłużej
- }
- lcd.clear();lcd.setCursor(0,0);lcd.print(" Czas Ustawiony ");delay(2000); // kosmetyka
- return c; // funkcja zwraca ustawiony czas
- }
- // --- funkcja do odliczania czasu (zapalnik zegarowy do bomby :-)---
- void odliczanie(int ile) {
- start = millis(); // startujemy funkcją millis()
- int akt_czas = ile; // zmienna pomocnicza do żonglerki czasem
- while(akt_czas > 0) {// tak długo, aż odliczanie się nie skończy
- akt_czas = czas - (millis() - start) / 1000; // żonglerka czasem
- pokazCzas(akt_czas); // pokaz czasu jaki pozostał
- if(digitalRead(pinOK) == LOW) { // jeśli wciśniesz OK to natychmiastowe przerwanie procesu
- akt_czas = 0;
- pokazCzas(akt_czas); // zerowanie czasu
- lcd.setCursor(0,1);lcd.print("Proces Przerwany");delay(2000); // kosmetyka
- }
- }
- }
- // --------------------------------------------------------------
- void setup () {
- pinMode( pinUP , INPUT_PULLUP ); // klawisz +
- pinMode( pinDOWN , INPUT_PULLUP ); // klawisz -
- pinMode( pinOK , INPUT_PULLUP ); // klawisz OK
- pinMode( motorpin1 , OUTPUT );
- pinMode( motorpin2 , OUTPUT );
- pinMode( UV , OUTPUT );
- pinMode( Vacum , OUTPUT );
- lcd.begin(20,4); // wyświetlacz 16x2
- lcd.begin(20,4);
- lcd.backlight(); // zalaczenie podwietlenia
- lcd.setCursor(0,0);
- delay(3850);
- lcd.clear();
- }
- // -----------------------------------------------------------
- void loop () {
- czas = ustaw(300); // ustawiamy czas (domyślnie 5 minut)
- lcd.clear(); lcd.print("Start Odliczania"); // kosmetyka
- digitalWrite(motorpin1,HIGH); digitalWrite(motorpin2,HIGH); // Twoje motory ON
- delay(1000);
- digitalWrite(motorpin1 , HIGH);
- odliczanie(czas); // start odliczania
- digitalWrite(motorpin2,LOW);delay(1000); digitalWrite(motorpin1,LOW); // motory OFF
- lcd.clear();
- lcd.print(" Koniec Cyklu");
- delay(3000);
- lcd.clear(); // kosmetyka
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement