// Deklaracja wejsc
const int WE1_pin = 14;
const int WE2_pin = 15;
const int WE3_pin = 16;
const int WE4_pin = 17;
const int WE5_pin = 18;
const int WE6_pin = 19;

//Deklaracja wyjsc
const int WY1_pin = 9;
const int WY2_pin = 8;
const int WY3_pin = 7;
const int WY4_pin = 6;
const int WY5_pin = 5;
const int WY6_pin = 4;
const int led_pin = 13;

//Deklaracja wejscia ustalajacego prog
const int Prog_pin = A6;

//Deklaracja zmiennych
int WE1_licznik = 0;
int WE2_licznik = 0;
int WE3_licznik = 0;
int WE4_licznik = 0;
int WE5_licznik = 0;
int WE6_licznik = 0;

int WE1_stan = 0;
int WE2_stan = 0;
int WE3_stan = 0;
int WE4_stan = 0;
int WE5_stan = 0;
int WE6_stan = 0;

int WE1_pop_stan = 0;
int WE2_pop_stan = 0;
int WE3_pop_stan = 0;
int WE4_pop_stan = 0;
int WE5_pop_stan = 0;
int WE6_pop_stan = 0;

int Prog_odczyt = 0;
int Prog = 0;
int led = LOW;

//Deklaracja odmierzania czasu
unsigned long Czas = 0;
unsigned long Pop_czas = 0;
const long Przedzial = 5000;

void setup() 
{
  //Inicjalizacja wejsc
  pinMode(WE1_pin, INPUT_PULLUP);
  pinMode(WE2_pin, INPUT_PULLUP);
  pinMode(WE3_pin, INPUT_PULLUP);
  pinMode(WE4_pin, INPUT_PULLUP);
  pinMode(WE5_pin, INPUT_PULLUP);
  pinMode(WE6_pin, INPUT_PULLUP);
  //Inicjalizacja wyjsc
  pinMode(WY1_pin, OUTPUT);
  pinMode(WY2_pin, OUTPUT);
  pinMode(WY3_pin, OUTPUT);
  pinMode(WY4_pin, OUTPUT);
  pinMode(WY5_pin, OUTPUT);
  pinMode(WY6_pin, OUTPUT);
  pinMode(led_pin, OUTPUT);
}

void loop() 
{
  //Odczyt wejsc
  WE1_stan = digitalRead(WE1_pin);
  WE2_stan = digitalRead(WE2_pin);
  WE3_stan = digitalRead(WE3_pin);
  WE4_stan = digitalRead(WE4_pin);
  WE5_stan = digitalRead(WE5_pin);
  WE6_stan = digitalRead(WE6_pin);
  Prog_odczyt = analogRead(Prog_pin);

  //Konwersja progu z pomiaru ADC
  Prog = map(Prog_odczyt, 0, 1023, 0, 50);

  //Odczyt czasu
  Czas = millis();

  //Porownanie stanu wejsc z poprzednim
  if (WE1_stan != WE1_pop_stan)
  {
    if (WE1_stan == LOW)
    {
    WE1_licznik++;
    }
  }
  if (WE2_stan != WE2_pop_stan)
  {
    if (WE2_stan == LOW)
    {
    WE2_licznik++;
    }
  }
  if (WE3_stan != WE3_pop_stan)
  {
    if (WE3_stan == LOW)
    {
    WE3_licznik++;
    }
  }
  if (WE4_stan != WE4_pop_stan)
  {
    if (WE4_stan == LOW)
    {
    WE4_licznik++;
    }
  }
  if (WE5_stan != WE5_pop_stan)
  {
    if (WE5_stan == LOW)
    {
    WE5_licznik++;
    }
  }
  if (WE6_stan != WE6_pop_stan)
  {
    if (WE6_stan == LOW)
    {
    WE6_licznik++;
    }
  }
  delay(5);

  //Zapis aktualnego stanu jako poprzedni
  WE1_pop_stan = WE1_stan;
  WE2_pop_stan = WE2_stan;
  WE3_pop_stan = WE3_stan;
  WE4_pop_stan = WE4_stan;
  WE5_pop_stan = WE5_stan;
  WE6_pop_stan = WE6_stan;

  

  if (Czas - Pop_czas >= Przedzial)
  {
    //Wysterowanie wyjsc
    if (WE1_licznik >= Prog)
    {
      digitalWrite(WY1_pin, HIGH);
    }
    else
    {
      digitalWrite(WY1_pin, LOW);
    }
  
    if (WE2_licznik >= Prog)
    {
      digitalWrite(WY2_pin, HIGH);
    }
    else
    {
      digitalWrite(WY2_pin, LOW);
    }
  
    if (WE3_licznik >= Prog)
    {
      digitalWrite(WY3_pin, HIGH);
    }
    else
    {
      digitalWrite(WY3_pin, LOW);
    }
  
    if (WE4_licznik >= Prog)
    {
      digitalWrite(WY4_pin, HIGH);
    }
    else
    {
      digitalWrite(WY4_pin, LOW);
    }
  
    if (WE5_licznik >= Prog)
    {
      digitalWrite(WY5_pin, HIGH);
    }
    else
    {
      digitalWrite(WY5_pin, LOW);
    }
  
    if (WE6_licznik >= Prog)
    {
      digitalWrite(WY6_pin, HIGH);
    }
    else
    {
      digitalWrite(WY6_pin, LOW);
    }
    Pop_czas = Czas;
    WE1_licznik = 0;
    WE2_licznik = 0;
    WE3_licznik = 0;
    WE4_licznik = 0;
    WE5_licznik = 0;
    WE6_licznik = 0;
    if (led == LOW) 
    {
      led = HIGH;
    } 
    else 
    {
      led = LOW;
    }
    digitalWrite(led_pin, led);
  }
  

}