// Realizzazione di un Voltmetro con Arduino
// Progetto realizzato da Elia Fucili e Amadori Federico
// dell'Istituto Tecnico Industriale Enrico Mattei di Urbino
// 7 Maggio 2021

int pinAI  = 2;
int pinBI  = 3;
int pinCI  = 4;
int pinDI  = 5;
int pinEI  = 6;
int pinFI  = 7;
int pinGI  = 8;
int pinAD  = 10;
int pinBD  = 11;
int pinCD  = 12;
int pinDD  = 13;
int pinED  = 15;
int pinFD  = 16;
int pinGD  = 17;

void stampa0I() {
  digitalWrite(pinAI, LOW);
  digitalWrite(pinBI, LOW);
  digitalWrite(pinCI, LOW);
  digitalWrite(pinDI, LOW);
  digitalWrite(pinEI, LOW);
  digitalWrite(pinFI, LOW);
  digitalWrite(pinGI, HIGH);
}

void stampa0D() {
  digitalWrite(pinAD, LOW);
  digitalWrite(pinBD, LOW);
  digitalWrite(pinCD, LOW);
  digitalWrite(pinDD, LOW);
  digitalWrite(pinED, LOW);
  digitalWrite(pinFD, LOW);
  digitalWrite(pinGD, HIGH);
}

void stampa1I() {
  digitalWrite(pinAI, HIGH);
  digitalWrite(pinBI, LOW);
  digitalWrite(pinCI, LOW);
  digitalWrite(pinDI, HIGH);
  digitalWrite(pinEI, HIGH);
  digitalWrite(pinFI, HIGH);
  digitalWrite(pinGI, HIGH);
}

void stampa1D() {
  digitalWrite(pinAD, HIGH);
  digitalWrite(pinBD, LOW);
  digitalWrite(pinCD, LOW);
  digitalWrite(pinDD, HIGH);
  digitalWrite(pinED, HIGH);
  digitalWrite(pinFD, HIGH);
  digitalWrite(pinGD, HIGH);
}

void stampa2I() {
  digitalWrite(pinAI, LOW);
  digitalWrite(pinBI, LOW);
  digitalWrite(pinCI, HIGH);
  digitalWrite(pinDI, LOW);
  digitalWrite(pinEI, LOW);
  digitalWrite(pinFI, HIGH);
  digitalWrite(pinGI, LOW);
}

void stampa2D() {
  digitalWrite(pinAD, LOW);
  digitalWrite(pinBD, LOW);
  digitalWrite(pinCD, HIGH);
  digitalWrite(pinDD, LOW);
  digitalWrite(pinED, LOW);
  digitalWrite(pinFD, HIGH);
  digitalWrite(pinGD, LOW);
}

void stampa3I() {
  digitalWrite(pinAI, LOW);
  digitalWrite(pinBI, LOW);
  digitalWrite(pinCI, LOW);
  digitalWrite(pinDI, LOW);
  digitalWrite(pinEI, HIGH);
  digitalWrite(pinFI, HIGH);
  digitalWrite(pinGI, LOW);
}

void stampa3D() {
  digitalWrite(pinAD, LOW);
  digitalWrite(pinBD, LOW);
  digitalWrite(pinCD, LOW);
  digitalWrite(pinDD, LOW);
  digitalWrite(pinED, HIGH);
  digitalWrite(pinFD, HIGH);
  digitalWrite(pinGD, LOW);
}

void stampa4I() {
  digitalWrite(pinAI, HIGH);
  digitalWrite(pinBI, LOW);
  digitalWrite(pinCI, LOW);
  digitalWrite(pinDI, HIGH);
  digitalWrite(pinEI, HIGH);
  digitalWrite(pinFI, LOW);
  digitalWrite(pinGI, LOW);
}

void stampa4D() {
  digitalWrite(pinAD, HIGH);
  digitalWrite(pinBD, LOW);
  digitalWrite(pinCD, LOW);
  digitalWrite(pinDD, HIGH);
  digitalWrite(pinED, HIGH);
  digitalWrite(pinFD, LOW);
  digitalWrite(pinGD, LOW);
}

void stampa5I() {
  digitalWrite(pinAI, LOW);
  digitalWrite(pinBI, HIGH);
  digitalWrite(pinCI, LOW);
  digitalWrite(pinDI, LOW);
  digitalWrite(pinEI, HIGH);
  digitalWrite(pinFI, LOW);
  digitalWrite(pinGI, LOW);
}

void stampa5D() {
  digitalWrite(pinAD, LOW);
  digitalWrite(pinBD, HIGH);
  digitalWrite(pinCD, LOW);
  digitalWrite(pinDD, LOW);
  digitalWrite(pinED, HIGH);
  digitalWrite(pinFD, LOW);
  digitalWrite(pinGD, LOW);
}

void stampa6I() {
  digitalWrite(pinAI, LOW);
  digitalWrite(pinBI, HIGH);
  digitalWrite(pinCI, LOW);
  digitalWrite(pinDI, LOW);
  digitalWrite(pinEI, LOW);
  digitalWrite(pinFI, LOW);
  digitalWrite(pinGI, LOW);
}

void stampa6D() {
  digitalWrite(pinAD, LOW);
  digitalWrite(pinBD, HIGH);
  digitalWrite(pinCD, LOW);
  digitalWrite(pinDD, LOW);
  digitalWrite(pinED, LOW);
  digitalWrite(pinFD, LOW);
  digitalWrite(pinGD, LOW);
}

void stampa7I() {
  digitalWrite(pinAI, LOW);
  digitalWrite(pinBI, LOW);
  digitalWrite(pinCI, LOW);
  digitalWrite(pinDI, HIGH);
  digitalWrite(pinEI, HIGH);
  digitalWrite(pinFI, HIGH);
  digitalWrite(pinGI, HIGH);
}

void stampa7D() {
  digitalWrite(pinAD, LOW);
  digitalWrite(pinBD, LOW);
  digitalWrite(pinCD, LOW);
  digitalWrite(pinDD, HIGH);
  digitalWrite(pinED, HIGH);
  digitalWrite(pinFD, HIGH);
  digitalWrite(pinGD, HIGH);
}

void stampa8I() {
  digitalWrite(pinAI, LOW);
  digitalWrite(pinBI, LOW);
  digitalWrite(pinCI, LOW);
  digitalWrite(pinDI, LOW);
  digitalWrite(pinEI, LOW);
  digitalWrite(pinFI, LOW);
  digitalWrite(pinGI, LOW);
}

void stampa8D() {
  digitalWrite(pinAD, LOW);
  digitalWrite(pinBD, LOW);
  digitalWrite(pinCD, LOW);
  digitalWrite(pinDD, LOW);
  digitalWrite(pinED, LOW);
  digitalWrite(pinFD, LOW);
  digitalWrite(pinGD, LOW);
}


void stampa9I() {
  digitalWrite(pinAI, LOW);
  digitalWrite(pinBI, LOW);
  digitalWrite(pinCI, LOW);
  digitalWrite(pinDI, LOW);
  digitalWrite(pinEI, HIGH);
  digitalWrite(pinFI, LOW);
  digitalWrite(pinGI, LOW);
}

void stampa9D() {
  digitalWrite(pinAD, LOW);
  digitalWrite(pinBD, LOW);
  digitalWrite(pinCD, LOW);
  digitalWrite(pinDD, LOW);
  digitalWrite(pinED, HIGH);
  digitalWrite(pinFD, LOW);
  digitalWrite(pinGD, LOW);
}

void setup() {

  pinMode(pinAI, OUTPUT);
  pinMode(pinBI, OUTPUT);
  pinMode(pinCI, OUTPUT);
  pinMode(pinDI, OUTPUT);
  pinMode(pinEI, OUTPUT);
  pinMode(pinFI, OUTPUT);
  pinMode(pinGI, OUTPUT);

  pinMode(pinAD, OUTPUT);
  pinMode(pinBD, OUTPUT);
  pinMode(pinCD, OUTPUT);
  pinMode(pinDD, OUTPUT);
  pinMode(pinED, OUTPUT);
  pinMode(pinFD, OUTPUT);
  pinMode(pinGD, OUTPUT);

  digitalWrite(pinAI, HIGH);
  digitalWrite(pinBI, HIGH);
  digitalWrite(pinCI, HIGH);
  digitalWrite(pinDI, HIGH);
  digitalWrite(pinEI, HIGH);
  digitalWrite(pinFI, HIGH);
  digitalWrite(pinGI, HIGH);

  digitalWrite(pinAD, HIGH);
  digitalWrite(pinBD, HIGH);
  digitalWrite(pinCD, HIGH);
  digitalWrite(pinDD, HIGH);
  digitalWrite(pinED, HIGH);
  digitalWrite(pinFD, HIGH);
  digitalWrite(pinGD, HIGH);

  Serial.begin(9600) ;
}

void loop()
{

  int valpot = analogRead(A0);
  float volt = (valpot * 5.0) / 1023.0;

  int i = (int) volt;
  int D = (int) ((int)(volt * 10) - (i * 10));

  //Serial.println(i);
  //Serial.println(D);

  if (i == 0)
    stampa0I();
  else if (i == 1)
    stampa1I();
  else if (i == 2)
    stampa2I();
  else if (i == 3)
    stampa3I();
  else if (i == 4)
    stampa4I();
  else if (i == 5)
    stampa5I();

  if (D == 0)
    stampa0D();
  else if (D == 1)
    stampa1D();
  else if (D == 2)
    stampa2D();
  else if (D == 3)
    stampa3D();
  else if (D == 4)
    stampa4D();
  else if (D == 5)
    stampa5D();
  else if (D == 6)
    stampa6D();
  else if (D == 7)
    stampa7D();
  else if (D == 8)
    stampa8D();
  else if (D == 9)
    stampa9D();
}