/*
  Trcece svjetlo. Smjer se mijenja Prekidacem. Zaustavlja se tasterom
  
  created 2 Feb 2017
  by Nedjeljko lekic
  
*/

#define CRVENA_LED 19  
#define ZUTA_LED 20    
#define ZELENA_LED 0  
#define PLAVA_LED 1   

#define TASTER 11  //Cetvrti bit PORTC
#define PREKIDAC 18  //Peti bit PORTD


bool ocitanje;
uint8_t smjer=1, stanje=1;

//Postavljanje stanja dioda 
void SetLED(uint8_t Value)
{
  if(Value & 1) digitalWrite(CRVENA_LED, HIGH);
  else digitalWrite(CRVENA_LED, LOW);

  if(Value & 2) digitalWrite(ZUTA_LED, HIGH);
  else digitalWrite(ZUTA_LED, LOW);

  if(Value & 4) digitalWrite(ZELENA_LED, HIGH);
  else digitalWrite(ZELENA_LED, LOW);

  if(Value & 8) digitalWrite(PLAVA_LED, HIGH);
  else digitalWrite(PLAVA_LED, LOW);
}


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pinova na koje su prikljucene LED DIODE.
  pinMode(CRVENA_LED, OUTPUT);
  pinMode(ZUTA_LED, OUTPUT);
  pinMode(ZELENA_LED, OUTPUT);
  pinMode(PLAVA_LED, OUTPUT);  

  //Iskljucivanje dioda
  digitalWrite(CRVENA_LED, LOW);
  digitalWrite(ZUTA_LED, LOW);
  digitalWrite(ZELENA_LED, LOW);
  digitalWrite(PLAVA_LED, LOW);  

  // initialize digital pinova na koje su prikljuceni TASTER i PREKIDAC.
  pinMode(TASTER, INPUT_PULLUP);
  pinMode(PREKIDAC, INPUT_PULLUP);

  //Inicijalizacija komunikacije sa serijskim monitorom
  Serial.begin(9600);
}


// the loop function runs over and over again forever
void loop() {
  
   ocitanje=digitalRead(PREKIDAC);
   if(ocitanje)smjer=1;
   else smjer=2;

   ocitanje=digitalRead(TASTER);
   if(!ocitanje)smjer=0;
  
   switch (smjer)
   {
      case 2 :  stanje=stanje>>1;
                if(stanje==0) stanje=8;
                SetLED(stanje);
                break;

      case 1 :  stanje=stanje<<1;
                if(stanje>8) stanje=1;
                SetLED(stanje);                
                break;
   }
   
   delay(300);
}
