Come non detto. Il codice si compila correttamente ma da un po' di problemi.
Il codice modificato è 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;
unsigned long Tprecedente = 0;
unsigned long intervallo = 2000;
volatile long Tempo_Attuale;
volatile long Tempo_Precedente;
volatile long 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("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");
}
void loop() {
time = millis();
Tempo_Attuale = millis();
unsigned long Tcorrente = millis();
if (giro) {
Tempo_Evento = Tempo_Attuale - Tempo_Precedente;
Serial.println(Tempo_Evento);
Tempo_Precedente = Tempo_Attuale;
giro = false;
}
if(Tcorrente - Tprecedente > intervallo) { //nuova parte
Tprecedente = Tcorrente;
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());
}
}
void Evento(){
Tempo_Attuale = millis();
giro = true;
}
Il problema principale è che nel momento in cui faccio partire il tutto, i valori delle temperature oscillano in maniera strana.
In realtà, i valori della termocoppia ktc1 si comportano in maniera apparentemente corretta, mentre quelli delle altre 3 termocoppie no. A fronte di ciò, posso dire che la prima termocoppia è stata acquistata dal seguente link, mentre le altre tre sono state acquistate da questo link.
Quello che ho notato è che, quando collego sia termocoppie che sensore hall per i giri, i dati che mi vengono stampati risultano sballati. Di seguito un esempio:
/ 60 43.50 43.25 30.75 42.50
604
585
596
596
/ 62 42.50 107.25 8.50 59.75
595
595
595
/ 64 43.50 51.50 30.50 43.00
596
595
595
/ 66 44.00 42.00 30.50 43.50
655
536
595
595
/ 68 43.75 40.00 30.75 12.00
596
595
595
/ 70 44.25 45.25 30.25 42.50
596
595
595
/ 72 44.50 43.25 30.75 43.50
705
485
595
595
In giallo ci sono il numero di giri, in verde il tempo di campionatura delle termocoppie e in nero ho lasciato le termocoppie. Il primo valore di temperatura si riferisce alla termocoppia del primo link, la quale non da problemi.
Però, nel momento in cui vado a scollegare il sensore hall lasciando collegate le termocoppie, i valori di temperatura si ristabilizzano tutti quanti. (ad eccezione di alcune oscillazioni della seconda termocoppia che a volte varia di +o- 10gradi)
/ 140 44.00 49.50 30.75 46.25
/ 142 44.25 45.00 31.75 47.25
/ 144 43.75 48.75 32.25 47.25
/ 146 44.75 59.25 33.00 47.00
/ 148 44.25 49.25 31.75 47.50
/ 150 44.25 49.50 32.00 47.50
/ 152 44.75 51.00 33.00 48.25
/ 154 44.00 49.25 32.00 47.75
/ 156 44.25 49.50 31.50 47.25
/ 158 44.50 40.00 32.25 49.00
/ 160 44.50 49.50 32.25 47.00
Voi sapreste darmi qualche indicazione? Non ho la benchè minima idea sul dove andare a sbattere la testa. Ho provato ad invertire anche le varie termocoppie, scambiare i circuiti integrati max6675, ma niente, l'integrato della termocoppia del primo link va sempre bene, gli altri tre no.
Ps: i circuiti integrati delle termocoppie sono quelli linkati precedentemente, mentre le termocoppie vere e proprie sono queste