/* MENO A PRIEZVISKO: Zemko Richard
DATUM: 2.10.2024
PREDMET: Prax
LINK NA WOKWI : https://wokwi.com/projects/410636498391292929
PLATFORMA: ARDUINO – simulator Wokwi, Policajna sirena s L2C displejom
NAZOV DOMACEJ ULOHY: DU CW39-1: Pulzujuca LED-ka v prostredi WOKWIs vypisom premennych na seriovu linku
POPIS ZADANIA: postupne zvysovanie a znizovanie intenzity svietenia LED diody
VYSLEDOK TESTOV: Simulacia programu funguje ocakavane
HISTORIA : 

v1: bez funkcie PrintLedStatus();
v2: skratenie programu pomocou funkcie PrintLedStatus();
*/

#define LED_PIN 9 //Definicia pinu, na ktorom je napojena LED dioda

int brightness = 0; //intenzita jasu, zaciatocna hodnota je 0
int increment = 5; //Inkrementacia jasu, kazdym opakovanim sa jas zvysi o tuto hodnotu
int direction = 1; //Smer jasu, 1 = zvysovanie, 0 = znizovanie

void setup() {
  Serial.begin(115200); //Zahajenie seriovej linky s rychlostou prenosu dat na 115200
  pinMode(LED_PIN, OUTPUT); //Nastavenie LED_PIN pinu ako vystup
}

void loop() {
  if(brightness == 0) { //Ak je jas 0, zacni zvysovat jas
    direction = 1; //Zmen hodnotu smer na 1
    for (size_t i = 0; i < (255 / increment); i++) { //Opakuj prikazy, opakuj to (255/increment) krat
      brightness += increment; //pripocitaj inkrement k jasu
      if (brightness > 255) brightness = 255; //ak jas presiahne 255, nastav ho na 255.
      analogWrite(LED_PIN, brightness); //Zapis novy jas

      PrintLedStatus(direction, brightness); //Invokacia funkcie, dva parametre: smer, jas
    }
  }

  if(brightness == 255) { //Ak je jas 255, zacni znizovat jas
    direction = 0; //Zmen smer na 0
    for (size_t i = (255 / increment); i > 0; i--) { //Opakuj prikazy, opakuj to (255/increment) krat, dokial i = 0
      brightness -= increment; //zniz jas o inkrement
      if (brightness < 0) brightness = 0; //ak jas padne pod 0, jas = 0
      analogWrite(LED_PIN, brightness); //zapis novy jas

      PrintLedStatus(direction, brightness); //Invokacia funkcie, dva parametre: smer, jas
    }
  }
}

//Funkcia na print
void PrintLedStatus(int dir, int bright) {
    Serial.print("Smer: "); //Vypis "Smer: "
      Serial.println(dir); //Vypis hodnotu 'direction', na konci riadku "\n"
      Serial.print("Jas: "); //Vypis "Jas: "
      Serial.println(bright); //Vypis hodnotu 'brightness', na konci riadku "\n"
      delay(200); //pockaj 200ms
}