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);
}
}
>