
#include <EEPROM.h>
#define LED1 13
#define ledPin  2
int stanLED1 = LOW;
unsigned long aktualnyCzas = 0;
unsigned long zapamietanyCzasLED1 = 0;
unsigned long zapamietanyCzasE = 0;
int wartoscE;

void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(8, INPUT_PULLUP); 
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);

}

void loop() {

 Serial.print("wartosc eprom  ");
 Serial.println(EEPROM.read(1));
  Serial.println(" ");
  Serial.println(" ");
  wartoscE = EEPROM.read(1);

static int wyjscie=wartoscE;  //ustawianie poziomu startowego wyjścia PWM - ustawienie tutaj innej wartości niż pamięć EEPromu będzie kasować i nadpisywać EEprom do tej wartości co przebieg pętli programu - załatwi pamięć po kilku użyciach
 Serial.println(wyjscie);
  analogWrite(ledPin, wyjscie);
  //Pobierz liczbe milisekund od startu
  aktualnyCzas = millis();

  //Jeśli różnica wynosi ponad xxUL milisekund
  if (aktualnyCzas - zapamietanyCzasLED1 >= 200UL) {
    //Zapamietaj aktualny czas
    zapamietanyCzasLED1 = aktualnyCzas;
    //Zmieniamy stan diody na przeciwny
    stanLED1 = !stanLED1;
    //ustawiamy nowy stan na diodzie

    //jeżeli stan diody wysoki oraz wejście 11 wysokie oraz zmienna "wyjscie" mniejsza lub równa -bo pętla zadziała jeszcze raz po sprawdzeniu czy jest mniej od 255
    if (stanLED1 == HIGH && digitalRead(11) == LOW && wyjscie < 255)
    {
      wyjscie++;
      Serial.print("wyjście = ");
    Serial.println(wyjscie);
    }

    //jeżeli stan diody wysoki oraz wejście 12 wysokie oraz zmienna "wyjscie" większa lub równa -bo pętla zadziała jeszcze raz po sprawdzeniu czy jest więcej od 0
    if (stanLED1 == HIGH && digitalRead(12) == LOW && wyjscie > 0)
    {

      wyjscie--;
 Serial.print("wyjście = ");
   Serial.println(wyjscie);

    }}

  digitalWrite(LED1, wyjscie); //mrugamy diodą na out 13
// przypisanie do zmiennej "wartoscE" czyli wartości do wpisania do eepromu wartości "wyjscie" czyli zmiennej z przycisków +/-
                 wartoscE = wyjscie;
          zapamietanyCzasE = aktualnyCzas; 

          if(EEPROM.read(1) != wartoscE) {
          byte przy_zapisz = digitalRead(8); //zmienna  przypisana do przycisku zapisz - 8 pin  
          
          Serial.println(aktualnyCzas - zapamietanyCzasE); 
   while(aktualnyCzas - zapamietanyCzasE < 10000 && przy_zapisz==LOW && digitalRead(11) == HIGH && digitalRead(12) == HIGH)  {  
//gdy nie naciskamy żadnego przycisku - czyli po puszczeniu przycisku + - i naciśnięciu przycisku "zapisz" wykonuje sprawdzenie czy eeprom[1] aktualny jest różny od zmiennej "wartoscE" i dopiero wtedy nadpisuje
 Serial.print("różnica czasów = "); 
 Serial.println(aktualnyCzas - zapamietanyCzasE);Serial.print("zapiszzzzzzzz"); Serial.println(" ");
 EEPROM.update(1, wartoscE); 
//eeprom update sprawdza czy wartość do wpisu jest inna niż zawartość wybranej(tu [1]) komórki pamięci i dopiero potem nadpisuje eeprom który ma ograniczoną liczbę zapisów ;
   Serial.println(przy_zapisz);      
if ( przy_zapisz == LOW )
{
  Serial.print("zaś ....różnica czasów = "); 
      Serial.println(aktualnyCzas - zapamietanyCzasE);
      delay (200);
  przy_zapisz = !przy_zapisz; }
   }
       delay (200);
   Serial.println(aktualnyCzas);
    Serial.println(przy_zapisz); }
else { 
  Serial.println("nie ma nic do zapisu ");

}
   
   Serial.println(" ");
   Serial.println(" ");
 delay(1000);
}
