@faca87 prova cosi e vedi se migliora.
// Array di unsigned int che contiene i valori dei colori da visualizzare
const uint16_t camColors[] = { ................ };
// Array di float che andrà a memorizzare i valori di
// intensità IR letti dal sensore AMG (matrice 8x8 = 64 pixel)
float pixels[AMG88xx_PIXEL_ARRAY_SIZE];
// Dimensione orizzontale e verticale di ciascun rettangolo che verrà disegnato
uint16_t displayPixelWidth, displayPixelHeight;
void setup () {
..........
// Ciclo che disegna la scala dei colori verticale spostata in setup()
for(int i=0; i<tft.height(); i++){
uint8_t colorIndex= map(i, 0, tft.height(), 0, 255);
colorIndex = constrain(colorIndex, 0, 255);
tft.drawLine(0, i, 2, i, camColors[colorIndex]);
}
}
void loop() {
// lettura della matrice 8x8 dal sensore AMG e salvataggio dei valori nell'array pixels[]
amg.readPixels(pixels);
// per ciascun valore letto viene disegnato un rettangolino del colore equivalente
for(int i=0; i<AMG88xx_PIXEL_ARRAY_SIZE; i++){
// Estrazione del colore da visualizzare in funzione del valore IR
// I colori totali sono 256, quindi viene approssimato con map a quello più vicino
uint8_t colorIndex = map(pixels[i], MINTEMP, MAXTEMP, 0, 255);
colorIndex = constrain(colorIndex, 0, 255);
// Questa istruzione disegna un rettangolo del colore selezionato
// spostando di volta in volta la posizione XY in funzione di i
// In totale saranno 64 rettangoli con dimensione pari a tft.with/8 e tft.height/8
// Di solito i display tft da 1.44" sono 128*128 pixel
// Se si tratta della prima colonna, il rettangolo disegnato sarà più piccolo di 3 pixel
if (floor(i / 8) == 0)
tft.drawCanvas( 3, displayPixelWidth * (i % 8),
displayPixelHeight, displayPixelWidth, camColors[colorIndex]);
else
tft.fillRect(displayPixelHeight * floor(i / 8), displayPixelWidth * (i % 8),
displayPixelHeight, displayPixelWidth, camColors[colorIndex]);
}
}