[RISOLTO] Problema Interrupt per la lettura dell'assorbimento di un motore

Per chi volesse il programma aggiornato con il conteggio dell'assorbimento

#include <TimerOne.h>

#define bH 6//interrutore velocità massima
#define bM 7//interrutore velocità media
#define bL 8//interrutore velocità minima
#define TIMER_US 100000                         // 100mS set timer duration in microseconds 
#define TICK_COUNTS 20                          // 2S worth of timer ticks

#include <LiquidCrystal.h>

int buH = LOW;
int buM = LOW;
int buL=LOW;
volatile long tick_count = TICK_COUNTS;         // Counter for 2S
volatile bool in_long_isr = false;              // True if in long interrupt

// Viene inzializzata la libreria del Display con i relativi PIN a cui è connesso il Display
LiquidCrystal lcd(13, 11, 5, 4,10, 2);

void setup() {
 Serial.begin(9600);
 Timer1.initialize(TIMER_US);                  // Initialise timer 1
 Timer1.attachInterrupt( interruptAssorbimento );           // attach the ISR routine here
 //INTERRUTORI
 pinMode(bH, INPUT);
 pinMode(bM, INPUT);
 pinMode(bL,INPUT);
 //LCD  
 // set up the LCD's number of columns and rows: 
 lcd.begin(16, 2);
 // Stampa a video la parola "hello, world!"
 lcd.print(" CHIUSURA:");
  // MOTOR SHIELD Impostazione canale A 
 pinMode(A0, INPUT); 
 pinMode(12, OUTPUT); // Inizializzazione del pin direzione del motore collegato al canale A  
 pinMode(9, OUTPUT);  // Inizializzazione del pin brake del motore collegato al canale A   
}

void loop() {
 
 buH = digitalRead( bH);
 buM = digitalRead( bM);
 buL = digitalRead( bL);
 // Imposta il cursore alla colonna 0, riga 1
 // (nota: line 1 è la seconda riga, dal momento che il conteggio inizia dallo 0):
 lcd.setCursor(0, 1);
 //lcd.print(millis()/1000);

 // direzione in avanti alla massima velocità  
  
 if (buH == HIGH ){
 
 digitalWrite(12, HIGH);  // Impostazione della direzione “avanti” del motore collegato al canale A  
 digitalWrite(9, LOW);    // Disattivazione del brake del motore per il canale A  
 analogWrite(3, 255);     // Massima velocità del motore collegato al canale A
 delay(3000);// tempo di rotazione in avanti  

 digitalWrite(9, HIGH);   // Attivazione del brake del motore per il canale A  
 delay(1000);// tempo di stop del motore  
 
 // direzione indietro con velocità metà della velocità massima  

 digitalWrite(12, LOW);  // Impostazione della direzione “indietro” del motore collegato al canale A  
 digitalWrite(9, LOW);    // Disattivazione del brake del motore per il canale A  
 analogWrite(3, 127);     // Metà della velocità massima del motore collegato al canale A  
 delay(3000);// tempo di rotazione in avanti
 
 digitalWrite(9, HIGH);   // Attivazione del brake del motore per il canale A  
 delay(1000);                  // tempo di stop del motore
 
 lcd.print("FORZA 3000N");//stampa valore della forza
 }
 
// direzione in avanti alla velocità media

 if (buH == LOW and buM == HIGH and buL==LOW )
 {
 digitalWrite(12, HIGH);  // Impostazione della direzione “avanti” del motore collegato al canale A  
 
 digitalWrite(9, LOW);    // Disattivazione del brake del motore per il canale A  
 analogWrite(3, 127);     // Media velocità del motore collegato al canale A  
 delay(3000);                  // tempo di rotazione in avanti  
 digitalWrite(9, HIGH);   // Attivazione del brake del motore per il canale A  
 delay(1000);                  // tempo di stop del motore  
 
 // direzione indietro con velocità metà della velocità massima  
 
 digitalWrite(12, LOW);  // Impostazione della direzione “indietro” del motore collegato al canale A  
 digitalWrite(9, LOW);    // Disattivazione del brake del motore per il canale A  
 analogWrite(3, 127);     // Metà della velocità massima del motore collegato al canale A  
 delay(3000);                  // tempo di rotazione in avanti  
 digitalWrite(9, HIGH);   // Attivazione del brake del motore per il canale A  
 delay(1000);                  // tempo di stop del motore

 lcd.print("FORZA 2000N");//stampa valore della forza
 }

 // direzione in avanti alla minima velocità

 if (buH== LOW and buM == LOW and buL==HIGH )
 {
 digitalWrite(12, HIGH);  // Impostazione della direzione “avanti” del motore collegato al canale A  
 digitalWrite(9, LOW);    // Disattivazione del brake del motore per il canale A  
 analogWrite(3, 127);     // Minima velocità del motore collegato al canale A  
 delay(3000);                  // tempo di rotazione in avanti  
 digitalWrite(9, HIGH);   // Attivazione del brake del motore per il canale A  
 delay(1000);                  // tempo di stop del motore  
 
 // direzione indietro con velocità metà della velocità massima  
 
 digitalWrite(12, LOW);  // Impostazione della direzione “indietro” del motore collegato al canale A  
 digitalWrite(9, LOW);    // Disattivazione del brake del motore per il canale A  
 analogWrite(3, 127);     // Metà della velocità massima del motore collegato al canale A  
 delay(3000);                  // tempo di rotazione in avanti  
 digitalWrite(9, HIGH);   // Attivazione del brake del motore per il canale A  
 delay(1000);                  // tempo di stop del motore

 lcd.print("FORZA 1000N");// stampa valore della forza
 }

}

void interruptAssorbimento()
{
 // 5 V / 1024 ADC counts = 4.88 mV per count
 // 3.3 V = 2.0 A; 3.3 V / 4.88 mv per count = 676 counts
 // 2.0 A / 676 counts = 2.96 mA per count
 double assorbimento= analogRead(A0) * 2.96;
 Serial.println(assorbimento);
}