/*
  Nivo tecnosti. Taster i prekidac kao senzori nivoa. 
  
  created 2 Feb 2017
  by Nedjeljko Lekic  
*/

#define CRVENA_LED 19 //Sesti bit porta D  
#define ZUTA_LED 20   //Sedmi bit porta D 
#define ZELENA_LED 0  // Nulti bit porta B
#define PLAVA_LED 1   //Prvi bit porta B

#define TASTER 11  //Cetvrti bit PORTC. Taster predstavlja donji nivo tecnosti.
#define PREKIDAC 18  //Peti bit PORTD. Prekidac predstavlja gornji nivo tecnosti.

#define OPTOPAR_SPOLJNJI  5 //Peti bit porta B
#define OPTOPAR_UNUTRASNJI 3 //Treci bit porta B

#define VISOK_NIVO    3
#define OK_NIVO       1
#define NIZAK_NIVO    0
#define NEISPRAVNOST  2

uint8_t 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() {
  // inicijalizacija digitalnih 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);  

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

  // inicijalizacija digitalnih pinova na koje su prikljuceni optoparove.
  pinMode(OPTOPAR_SPOLJNJI, INPUT_PULLUP);
  pinMode(OPTOPAR_UNUTRASNJI, INPUT_PULLUP);
  
  //Inicijalizacija komunikacije sa serijskim monitorom
  Serial.begin(9600);
}


// The loop function runs over and over again forever
void loop() 
{
  if(!digitalRead(TASTER))ocitanje=1;
  else ocitanje=0;
  if(!digitalRead(PREKIDAC))ocitanje+=2;
  
  switch(ocitanje){
            case VISOK_NIVO:
                 Serial.println("VISOK NIVO");
                 break;

            case OK_NIVO: 
                 Serial.println("OK NIVO");
                 break;

            case NIZAK_NIVO:  
                 Serial.println("NIZAK NIVO");
                 break;

            case NEISPRAVNOST:
                 Serial.println("NEISPRAVNOST");
                 break;
  }    
  SetLED(ocitanje);
  
}
