1.По используемому блоку MAX6675 - он использует библиотеку, которая при каждом обращении к блоку тормозит на время >9ms.
Фрагмент кода из библиотеки ниже.
double MAX6675::readCelsius(void) {
uint16_t v;
digitalWrite(cs, LOW);
_delay_ms(1);
v = spiread();
v <<= 8;
v |= spiread();
digitalWrite(cs, HIGH);
if (v & 0x4) {
// uh oh, no thermocouple attached!
return NAN;
//return -100;
}
v >>= 3;
return v*0.25;
}
double MAX6675::readFahrenheit(void) {
return readCelsius() * 9.0/5.0 + 32;
}
byte MAX6675::spiread(void) {
int i;
byte d = 0;
for (i=7; i>=0; i--)
{
digitalWrite(sclk, LOW);
_delay_ms(1);
if (digitalRead(miso)) {
//set the bit to 0 no matter what
d |= (1 << i);
}
digitalWrite(sclk, HIGH);
_delay_ms(1);
}
return d;
}
В конкретном проекте это мало на что влияет, но лучше бы этого избегать.
2. В качестве пина S0 для сенсора выбран пин 4 (D2) - лучше выбрать другой пин (например 14(D5)).
Пины D1,D2(5,4) - лучше не занимать, это интерфейс i2c, он пригодится при развитии проекта.
3. Если Вы будете расширять в проекте вывод на дисплей Nextion, то я бы рекомендовал несколько иной подход обмена между с дисплеем (без тормозов).
-----
Если Вам интересно продвижение в выбранном Вами направлении, и Вы готовы освободить пин 4, то я мог бы набросать Вам основу проекта, который бы Вы могли развивать без угрозы появления "тормозов" и пр.