#include #include // 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 long start; // zmienna okreslająca start procesu int czas; // czas trwania procesu, w sekundach int minuty; // bez komentarza int sekundy; // bez komentarza int ustaw(int c) // c - defaultowy czas (na początek do ustawiania) { lcd.clear(); lcd.setCursor(0,0);lcd.print("< Ustaw Czas Pracy >"); lcd.setCursor(0,1);lcd.print(" min- >"); 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 } // --- 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 ----------------- // --- 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 delay(3850); lcd.clear(); } // ----------------------------------------------------------- void loop () { czas=ustaw(300); // ustawiamy czas (domyślnie 5 minut) lcd.clear();lcd.print("Start Odliczania"); // kosmetyka digitalWrite(motorpin1,LOW);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 }