Campionamento con Termocoppie e Contagiri

allora:

non ho verificato se ci sono dei limiti di tempo tra una lettura e l'altra per le varie sonde, però se staccando il sensore hall funziona tutta.... mi sa che c'è qualche interferenza

quello che volevo invece farti notare è questo:
se
tempo_totale = millis()
lo metti nel loop
ogni volta che passi da li lo cambi, invece tu vuoi misutare il tempo tra 2 impulsi (1 giro) del motorino
quindi va eliminato. al limite va messo come ultima istruzione del setup.

allo stesso modo Tcorrente non ti serve, usa direttamente millis() nei calcoli

time = millis() che ti serve? visto che lo leggi anche questo ad ogni giro di loop
e se sono passati i 2 secondi lo stampi sulla seriale, quindi il suo valore può variare da circa 0 a 1 millisecondi
inoltre vedi che si colora in arancio (vuol dire che è una parola utilizzata da qualche funzione) quindi sarebbe meglio chiamarla tempo

infine le variabili di tipo volatile se le usi per memorizzare i millis() vanno dichiarate unsigned quindi
volatile unsigned long nomeVariabile

te l'ho solo ripulito un po...

#include <max6675.h>

int ktcSO1 = 6; //Termocoppia #3
int ktcSO2 = 7; //Termocoppia #2
int ktcSO3 = 8; //Termocoppia #1
int ktcSO4 = 5; //Termocoppia #4
int ktcCS = 9;
int ktcCLK = 10;

//unsigned long time;

unsigned long Tprecedente = 0;
unsigned long intervallo = 2000;

unsigned long Tempo_Precedente;
volatile unsigned long Tempo_Attuale ;
volatile bool giro = false;

MAX6675 ktc1(ktcCLK, ktcCS, ktcSO1);
MAX6675 ktc2(ktcCLK, ktcCS, ktcSO2);
MAX6675 ktc3(ktcCLK, ktcCS, ktcSO3);
MAX6675 ktc4(ktcCLK, ktcCS, ktcSO4);

void setup() {
   attachInterrupt(0, Evento, RISING); //mettere su pin digitale 2
   Serial.begin(9600);
   Serial.print("Millisecondi/Giro");
   Serial.print(" ");
   Serial.print("Tempo");
   Serial.print(" ");
   Serial.print("Termo#1");
   Serial.print(" ");
   Serial.print("Termo#2");
   Serial.print(" ");
   Serial.print("Termo#3");
   Serial.print(" ");
   Serial.println("Termo#4");
   Tempo_Attuale = millis();
}

void loop() {
   //  time = millis();
   if (giro) {
      //Tempo_Evento = Tempo_Attuale - Tempo_Precedente;
      Serial.println(Tempo_Attuale - Tempo_precedente);
      Tempo_Precedente = Tempo_Attuale;
      giro = false;
   }
   if (millis() - Tprecedente > intervallo) {        //nuova parte
      Serial.print("/");
      Serial.print(" ");
      //   Serial.print(time / 1000);
      Serial.print(" ");
      Serial.print(ktc3.readCelsius());
      Serial.print(" ");
      Serial.print(ktc2.readCelsius());
      Serial.print(" ");
      Serial.print(ktc1.readCelsius());
      Serial.print(" ");
      Serial.println(ktc4.readCelsius());
      Tprecedente = millis();
   }
}

void Evento() {
   Tempo_Attuale = millis();
   giro = true;
}