#include <Tone.h>
#include "pitches.h"  //Si aggiunge la libreria contenente le note
#include "accordi.h"  //Si aggiunge la libreria contenente le note
#include "range_tasti_1.h"  //Si aggiunge la libreria contenente le note
int tempo = 1000;     //NON USATO Velocità di esecuzione. 1000 = 60 bpm, 500 = 120 bpm, 2000 = 30 bpm
int stripPin = A0;     //Pin collegato alla striscia resistiva
int potPin = A1;     //Pin collegato alla striscia resistiva
int buzzPin0 = 2;      //Pin collegato al buzzer0
int buzzPin1 = 4;      //Pin collegato al buzzer1 
int buzzPin2 = 7;      //Pin collegato al buzzer2
int buzzPin3 = 8;      //Pin collegato al buzzer3
int minPin = 12;     //Pin collegato al pulsante del minore
int sevPin = 13;     //Pin collegato al pulsante del settima
int corda_1;          //Posizione di pressione corda 1
bool minore;
bool settima;
int corda_vuota;      //Valore di resistenza a corda vuota
int NOTA;             //Nota da suonare
int durata=0;        //durata delle singole note
int accordo[4];
Tone buzzer[3];


void setup() {
  buzzer[0].begin(buzzPin0);
  buzzer[1].begin(buzzPin1);
  buzzer[2].begin(buzzPin2);
  //pinMode(buzzPin0,OUTPUT);    //Il buzzer viene impostato come OUTPUT
  //pinMode(buzzPin1,OUTPUT);    //Il buzzer viene impostato come OUTPUT
  //pinMode(buzzPin2,OUTPUT);    //Il buzzer viene impostato come OUTPUT
  //pinMode(buzzPin3,OUTPUT);    //Il buzzer viene impostato come OUTPUT
  pinMode(minore,INPUT);    //Il tasto del minore INPUT
  pinMode(settima,INPUT);    //Il tasto del settima INPUT
  Serial.begin(9600);
}

void loop() {
corda_1= analogRead(stripPin);
minore=digitalRead(minPin);
settima=digitalRead(sevPin);
durata= map(analogRead(potPin),0,1024,0,200);
if (corda_1 > 10){ //filtra eventuale sporco su corda vuota
  id_nota(corda_1);
  buzzer[0].play(accordo[0]);
  buzzer[1].play(accordo[1]);
  buzzer[2].play(accordo[2]);  


/*tone(buzzPin0, accordo[0],durata);
delay(durata);
noTone(buzzPin0);
tone(buzzPin1, accordo[1],durata);
delay(durata);
noTone(buzzPin1);
tone(buzzPin2, accordo[2],durata);
delay(durata);
noTone(buzzPin2);
tone(buzzPin3, accordo[3],durata);
delay(durata);
noTone(buzzPin3); */

Serial.print(durata);
Serial.print("\t");
Serial.print(corda_1);
Serial.print("\t");
Serial.print(accordo[0]);
Serial.print("\t");
Serial.print(accordo[1]);
Serial.print("\t");
Serial.print(accordo[2]);
Serial.print("\t");
Serial.print(accordo[3]);
Serial.print("\t");
Serial.print(minore);
Serial.print("\t");
Serial.println(settima);
delay(1);        // delay in between reads for stability
}
else{
  buzzer[0].stop();
  buzzer[1].stop();
  buzzer[2].stop();
/*noTone(buzzPin0);
noTone(buzzPin1);
noTone(buzzPin2);
noTone(buzzPin3);*/
}
}

void accordo_variabile (int chord[]){
   for(int i=0;i<=3;i++){
        accordo[i] = chord[i];
      }
   return;
}

void id_nota(unsigned int posizione){ 
  int tasto; 
  if (posizione >= t_G4[0] && posizione < t_G4[1]){
    if (minore==LOW && settima==LOW){
      accordo_variabile(CH_G_4);
      }
    else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_Gm7_4);
      }
    else if (minore==HIGH){
      accordo_variabile(CH_Gm_4);
      }
    else{
      accordo_variabile(CH_G7_4);
      }
    }
    else if  (posizione >= t_GS4[0] && posizione < t_GS4[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_GS_4);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_GSm7_4);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_GSm_4);
      }
     else{
      accordo_variabile(CH_GS7_4);
      }   
    }
    else if  (posizione >= t_A4[0] && posizione < t_A4[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_A_4);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_Am7_4);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_Am_4);
      }
     else{
      accordo_variabile(CH_A7_4);
      }
    }
    else if  (posizione >= t_AS4[0] && posizione < t_AS4[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_AS_4);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_ASm7_4);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_ASm_4);
      }
     else{
      accordo_variabile(CH_AS7_4);
      }
    }
    else if  (posizione >= t_B4[0] && posizione < t_B4[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_B_4);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_Bm7_4);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_Bm_4);
      }
     else{
      accordo_variabile(CH_B7_4);
      }
    }
    else if  (posizione >= t_C5[0] && posizione < t_C5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_C_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_Cm7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_Cm_5);
      }
     else{
      accordo_variabile(CH_C7_5);
      }
    }   
    else if  (posizione >= t_CS5[0] && posizione < t_CS5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_CS_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_CSm7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_CSm_5);
      }
     else{
      accordo_variabile(CH_CS7_5);
      }
    }   
    else if  (posizione >= t_D5[0] && posizione < t_D5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_D_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_Dm7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_Dm_5);
      }
     else{
      accordo_variabile(CH_D7_5);
      }
    }   
    else if  (posizione >= t_DS5[0] && posizione < t_DS5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_DS_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_DSm7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_DSm_5);
      }
     else{
      accordo_variabile(CH_DS7_5);
      }
    } 
    else if  (posizione >= t_E5[0] && posizione < t_E5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_E_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_Em7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_Em_5);
      }
     else{
      accordo_variabile(CH_E7_5);
      }
    } 
    else if  (posizione >= t_F5[0] && posizione < t_F5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_F_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_Fm7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_Fm_5);
      }
     else{
      accordo_variabile(CH_F7_5);
      }
    } 
    else if  (posizione >= t_FS5[0] && posizione < t_FS5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_FS_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_FSm7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_FSm_5);
      }
     else{
      accordo_variabile(CH_FS7_5);
      }
    } 
    else if  (posizione >= t_G5[0] && posizione < t_G5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_G_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_Gm7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_Gm_5);
      }
     else{
      accordo_variabile(CH_G7_5);
      }
    }
    else if  (posizione >= t_GS5[0] && posizione < t_GS5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_GS_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_GSm7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_GSm_5);
      }
     else{
      accordo_variabile(CH_GS7_5);
      }
    }  
    else if  (posizione >= t_A5[0] && posizione < t_A5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_A_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_Am7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_Am_5);
      }
     else{
      accordo_variabile(CH_A7_5);
      }
    }
    else if  (posizione >= t_AS5[0] && posizione < t_AS5[1]){
     if (minore==LOW && settima==LOW){
      accordo_variabile(CH_AS_5);
      }
     else if (minore==HIGH && settima==HIGH){
      accordo_variabile(CH_ASm7_5);
      }
     else if (minore==HIGH){
      accordo_variabile(CH_ASm_5);
      }
     else{
      accordo_variabile(CH_AS7_5);
      }
    }
   
   return;
}