//*****************************************
//************ _5_Turno_Espera ************
//*****************************************
// Original code by canalplc
// http://canalplc.blogspot.com.es/
// Version 1.0
// July 2016
//*****************************************
//
int CONTADOR = 0;
#include <PC_SIMU.h>
PC_SIMU PLC;
void setup() {
  pinMode(2, INPUT); // I0.2.- Avance contador AV
  pinMode(3, INPUT); // I0.3.- Retroceso contador RE
  pinMode(4, INPUT); // I0.4.- Reset contador R
  pinMode(5, OUTPUT); // Q0.5.- DEC_0
  pinMode(6, OUTPUT); // Q0.6.- DEC_2
  pinMode(7, OUTPUT); // Q0.7.- DEC_4
  pinMode(8, OUTPUT); // Q1.0.- DEC_8
  pinMode(9, OUTPUT); // Q1.1.- UNI_0
  pinMode(10, OUTPUT); // Q1.2.- UNI_2
  pinMode(11, OUTPUT); // Q1.3.- UNI_4
  pinMode(12, OUTPUT); // Q1.4.- UNI_8
  pinMode(13, OUTPUT); // Q1.5.- Beep
  digitalWrite(5, 0);
  digitalWrite(6, 0);
  digitalWrite(7, 0);
  digitalWrite(8, 0);
  digitalWrite(9, 0);
  digitalWrite(10, 0);
  digitalWrite(11, 0);
  digitalWrite(12, 0);
  digitalWrite(13, 0);
  //
  PLC.INI(); 
  Display();
}
void loop() {
  if(digitalRead(2) == 1) 
  {
    CONTADOR++;
    if(CONTADOR > 100) CONTADOR = 0;
    Display();
    Beep();
  }
  if(digitalRead(3) == 1) 
  {
    CONTADOR--;
    if(CONTADOR < 0) CONTADOR = 99;
    Display();
    Beep();
  }
  if(digitalRead(4) == 1) 
  {
    CONTADOR = 0;
    Display();
    Beep();
  }
  Display();
}
void Display(){
 byte BCD = decToBcd(CONTADOR);
 if((BCD & 0b00000001) != 0) digitalWrite(9, 1);
 else digitalWrite(9, 0);
 if((BCD & 0b00000010) != 0) digitalWrite(10, 1);
 else digitalWrite(10, 0);
 if((BCD & 0b00000100) != 0) digitalWrite(11, 1);
 else digitalWrite(11, 0);
 if((BCD & 0b00001000) != 0) digitalWrite(12, 1);
 else digitalWrite(12, 0);
 if((BCD & 0b00010000) != 0) digitalWrite(5, 1);
 else digitalWrite(5, 0);
 if((BCD & 0b00100000) != 0) digitalWrite(6, 1);
 else digitalWrite(6, 0);
 if((BCD & 0b01000000) != 0) digitalWrite(7, 1);
 else digitalWrite(7, 0);
 if((BCD & 0b10000000) != 0) digitalWrite(8, 1);
 else digitalWrite(8, 0);
}
void Beep(){
  digitalWrite(13, 1);
  delay(800);
  digitalWrite(13, 0);
}
byte decToBcd(byte val)
{
  return (((val/10)*16) + (val%10));
}
    
