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;
}