Problemas con la pantalla usando arduino 2.8 tft spi 240x320 v1.2

Tengo un problema con mi pantalla de 2.8 TFT SPI 240X320, con caracteristicas: Resolución: 240 x 320
Driver IC: ILI9341
Voltaje de entrada: 5 V/3,3 V
Color: 64 K
El principal problema era que la pantalla se me pone blanco y no se puede ver nada,no se si son las conexiones ya que hubo un momento que si mostro texto pero cunado mostro datos en tiempo real de un sensor de co2, esta pantalla comienza a parpadera se mantenen bien por unos pocos segundos y se comienza a desvanacer las palbras y queda todo en blanco, mas claro cunado esta mostrando los datos y actualizandoce al dato mas recente del sensor este comienza a entrecoratar las letras , y cominza a perderse el fondo y se pierde todo quedando todo en blanco y no se meustra mas, no se que pueda ser si alguien pudiera darme alguna sugerencia seria de gran ayuda a conocer el problema. Aqui esta el codigo que estoy usando y para la pantalla estoy usando una fuente externa para los pines de alimentacion vcc y gnd, el resto de pines esta conectadas en el arudino.

<
 #include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>

// Definimos los pines de la pantalla TFT
#define TFT_CS     A5
#define TFT_RST    A4
#define TFT_DC     A3

// Inicializamos la pantalla TFT
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

// Definir el pin del sensor MQ-135
#define PIN_MQ_ANALOGICO A0 // Pin analógico para el sensor MQ-135

// Definir límites para la calidad del aire
const int bueno = 400;
const int regular = 800;
const int malo = 1200;

// Definir pines para los LEDs
int ledrojo = 6;
int ledverde = 5;
int ledazul = 3;

int lastCO2Value = -1;
unsigned long lastUpdate = 0;  // Variable para evitar actualizaciones continuas

void setup() {
  Serial.begin(9600); // Inicializa comunicación serie

  // Inicializamos la pantalla TFT
  tft.begin();
  
  // Establecemos el fondo en color negro
  tft.fillScreen(ILI9341_BLACK);
  
  // Configuramos las propiedades del texto
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(1);
  tft.setCursor(10, 10);
  tft.println("Grafica de Keeling");
  
  // Dibujamos la gráfica de la curva de Keeling
  drawKeelingCurve();
  
  // Agregar texto debajo de la curva
  tft.setCursor(10, tft.height() - 30);
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(1);
  tft.println("CO2 PPM");

  tft.setCursor(10, tft.height() - 20);
  tft.setTextColor(ILI9341_GREEN);
  tft.setTextSize(1);
  tft.println("64 BUEN AIRE");
  
  // Configuramos los LEDs
  pinMode(ledrojo, OUTPUT);
  pinMode(ledverde, OUTPUT);
  pinMode(ledazul, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();
  
  // Actualizamos cada segundo
  if (currentMillis - lastUpdate >= 1000) {
    lastUpdate = currentMillis;
    
    // Leer el valor del sensor de CO2
    int medidaAnalogica = analogRead(PIN_MQ_ANALOGICO); // Sensor MQ-135
    double CO2ppm = medidaAnalogica * 10.57;

    // Mostrar el valor de CO2 en la pantalla
    updateDisplay(CO2ppm);

    // Controlar los LEDs según el valor de CO2
    controlLEDs(CO2ppm);
    
    // Mostrar los datos de CO2 en el serial para monitoreo
    Serial.print("CO2 ppm: ");
    Serial.println(CO2ppm, 0);
  }
}

void updateDisplay(double CO2ppm) {
  // Si el valor de CO2 ha cambiado, actualizamos la pantalla
  if (abs(CO2ppm - lastCO2Value) > 0.5) {
    lastCO2Value = CO2ppm;

    // Limpiar área de texto y actualizar el valor de CO2
    tft.fillRect(10, tft.height() - 40, 100, 30, ILI9341_BLACK);
    tft.setCursor(10, tft.height() - 40);
    tft.setTextColor(ILI9341_WHITE);
    tft.print("CO2: ");
    tft.print(CO2ppm);
    tft.println(" PPM");
  }
}

void controlLEDs(double CO2ppm) {
  // Controlar los LEDs dependiendo de los niveles de CO2
  if (CO2ppm > malo) {
    analogWrite(ledrojo, 255);
    analogWrite(ledverde, 0);
    analogWrite(ledazul, 0);
  } else if (CO2ppm > regular) {
    analogWrite(ledrojo, 225);
    analogWrite(ledverde, 165);
    analogWrite(ledazul, 0);
  } else if (CO2ppm > bueno) {
    analogWrite(ledrojo, 155);
    analogWrite(ledverde, 255);
    analogWrite(ledazul, 0);
  } else {
    analogWrite(ledrojo, 0);
    analogWrite(ledverde, 255);
    analogWrite(ledazul, 0);
  }
}

void drawKeelingCurve() {
  int amplitude = 40;  // Amplitud de la variación de CO2
  int offset = 120;    // Desplazamiento vertical para centrar la señal
  int years = 50;      // Número de años que vamos a graficar (por ejemplo 50 años)
  int width = tft.width();
  int height = tft.height();

  // Aseguramos que la curva de Keeling se mapea adecuadamente en la pantalla
  for (int x = 0; x < width; x++) {
    // Calculamos el valor de CO2 simulando un patrón de variación
    int year = map(x, 0, width, 0, years); // Mapeamos el valor de X en años
    float co2_value = 330 + amplitude * sin(radians(year * 4)); // Aumento de CO2 con fluctuación

    // Ajustamos el valor CO2 para que se ajuste a la altura de la pantalla
    // Hacemos un mapeo para que los valores de CO2 se ajusten a la altura de la pantalla
    int y = height - (int)((co2_value - 330) * (height / 80)); // El valor 80 es un factor de escala

    // Dibujamos un punto en la posición X, Y
    tft.drawPixel(x, y, ILI9341_GREEN);
  }
}
>

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @green_ner .

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Moderador:
Por favor, lee las Normas del foro y publica/edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado/editado, lo cortas y click en (<CODE/>)




Por otro lado el moderador del foro en inglés acaba de mover tu hilo porque escribiste en español en dicho foro.
Si usas español debes postear aquí, de lo contrario titulo/comentario y código con comentarios todo en inglés.