Grazie mille ad entrambi, gentilissimi.
Ho modificato il codice seguendo i vostri consigli. Il risultato è il seguente:
#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;
volatile int Tempo_Attuale;
volatile int Tempo_Precedente;
volatile int Tempo_Evento;
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("Tempo");
Serial.print(" ");
Serial.print("Termo#1");
Serial.print(" ");
Serial.print("Termo#2");
Serial.print(" ");
Serial.print("Termo#3");
Serial.print(" ");
Serial.print("Termo#4");
Serial.print(" ");
Serial.println("Millisecondi/Giro");
}
void loop() {
time = millis();
Tempo_Attuale = millis();
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.print(ktc4.readCelsius());
Serial.print(" ");
if (giro) {
Tempo_Evento = Tempo_Attuale - Tempo_Precedente;
Serial.println(Tempo_Evento);
Tempo_Precedente = Tempo_Attuale;
giro = false;
}
else{
Serial.println(" ");
}
delay(2000);
}
void Evento(){
Tempo_Attuale = millis();
giro = true;
}
L'unico problema che sto riscontrando è che il valore del giro è ancora soggetto al delay. Quindi se ho frequente di rotazione al di sotto dei 2000ms non vengono stampate. Per la precisione, il valore minimo che mi segna il Tempo_Attuale è di 2136ms. Se il tornio girasse a 1000rpm, significherebbe che dovrei campionare a (1000/60)^-1= 0.06sec= 60ms. Ma un delay(60) non è compatibile con le mie termocoppie