Facebook
From Henryk, 4 Years ago, written in Python.
This paste is a reply to Timer from Henryk - go back
Embed
Viewing differences between Timer and Re: Timer
#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
}

Replies to Re: Timer rss

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