Apagar una pantalla TFT desde arduino Mega 2560

estas en todo lo correcto, y es verdad, la cosa es que si empleo el arduino UNO no tengo como activar otros elementos que estoy usando en sistema de riego, como una electrovalvula, la cual activo mediante un modulo de Relé, ademas de eso necesito tambien saber cuanta agua he regado, para lo cual empleo un flujometro o caudalimetro, entonces si empleo solo la pantalla en el arduino UNO, no tengo disponibilidad ara los demas elementos del proyecto, es por eso que tuve que migrearme al arduino mega 2560, mi proyecto ya funciona en el arduino Mega, ya esta todo montado, ahora lo unico que me hace falta es no fundir la pantalla por dejarla siempre encendida.

entonces, el sistema funciona asi:

dependiendo si las plantas estan humedas o no se activa la valvula, a veces es a diario y durante unos minutos, en otras ocasiones que llueve a diario puede durar hasta un mes sin tener que colocarles agua, por lo que el sistema esta alerta a las lluvias y mide la cantidad de agua que sale de la electrovalvula para poder saber cuando detener el riego, estos datos los almaceno en el SD para tener el historico y ademas uso ese mismo modulo para importar los letreros que hice con mucho cariño adornados de florecitas para que salgan en mi pantalla, a su vez escribe en la GUI los niveles de agua guardados en el TXT y me informa hace cuantos dias no llueve en casa.

si retiro perisfericos el sistema no hara todo lo que quiero, entonces no voy a poder saber hace cuanto no riego mis plantas y no siempre estoy en casa, lo que no me deja saber si he regado ya mis curcumas y pimientos, y a futuro quiero que me de una alarma si esta lloviendo mucho para activar una sombrilla que los proteja de granizos y otras cosas, por lo que voy a necesitar aun mas sensores, es por esto que veo en Arduino Mega el compañero ideal para el proyecto, por memoria, cantidad de pines, puertos SPI para varios sensores y varios lectores Analogos disponibles con esta pantalla en especifico.

he de mencionar que entre experimentos locos hice eso de apagar la pantalla poniendo en bajo el pin de la alimentacion de la energia y lo unico que logre fue tener que reiniciar el arduino para establecer de nuevo la comunicacion entre la TFT y el arduino.(ademas de hacerme un tremendo embrollo con los dupont que se sueltan y luego no sabes porque nada sirve)

ademas tambien empleo el panel tactil para desplazarme por la GUI que cree y leo el panel cada 100 ms.

mi objetivo es lograr hacer que todo funcione con un panel solar y un par de baterias, solo para garantizar que una tormenta electrica no me va a dejar sin saber como va mi huerta.

otra cosa que me encantaria lograr es que todo el sistema de gestion de energia quepa en un tabique o ladrillo de construccion, incluyendo la electrovalvula, sensorica, reles, arduino y pantalla, entre mas compacto mejor, para poder colocar baterias y panel al interior del mismo.

se que soy muy exigente pero ya tengo casi todo, es muy poco lo que me hace falta y llevo dos años sacandole tiempitos para hacerlo y ahora que acabe la cuarentena, no podre estar mas en casa y tendre que volver a tener que salir de casa para ir a trabajar.

deberia bastar con solo colocar:

#define miso 50
#define mosi 51
#define sck    52 

pero para que funcione debo conectar cables entre los pines 50, 51 y 52 del arduino mega y los pines SD_sck SD_DI y SD_DO, pero estos pines del shield ya estan conectados a los pines fisicos del arduino Mega 11, 12 y 13, por lo que aunque entren en los orficios y las dimenciones sean compatibles, el shield realmente no esta conectado a donde deberia estarlo, mas que un problema de programacion es un problema de compatibilidad de espacio...

es el mismo problema de poder conectar una memoria USB a un cargador de celular de una toma electrica, pero no por ser el mismo puerto sirve para algo o logra hacer algo con la memoria y su informacion.

Ahh bueno pero entonces el shield es el problema no el mega.
Simplemente dobla los pines del shield y conectalos a los 50,51,52 y listo.
Ponlos a 90 grados y luego un array de pines con las conexiones. En tu placa tmb podrias hacerlo.

ya lo hice, quedo horrible y los conectores Dupont se sueltan mucho...


por todas esas cositas pequeñas fue que decidi cambiar la pantalla, ahora funciona bien, esta algo loco porque cambie las fuentes, pero cosa de sentarse a ordenar tamaños de letra y ya.

pero la pantalla si que esta todo el tiempo encendida y al probar la UTFT es supremamente lenta (pero deja apagar la pantalla) a comparacion de la MCUfriend, que no es la 8va maravilla pero hace lo que debe hacer y lo hace bien, pero no deja apagar la pantalla.

es la mas clara demostracion de que siempre vas a tener que sacrificar una cosa por tener otra...

David Prentice es el desarrollador del MCU friend y es quien dio este consejo:

The Adafruit library has writecommand() as a private method. The easiest way to control Sleep is by
editing the public methods in "Adafruit_7735.h" file: from
...

setRotation(uint8_t r),
invertDisplay(boolean i);
uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
...
to
...
setRotation(uint8_t r),
invertDisplay(boolean i);
void sleep(void) { writecommand(ST7735_SLPIN); }
void wake(void) { writecommand(ST7735_SLPOUT); }
uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
...
Untested. You would call with tft.sleep() and tft.wake()

probare a ver si me funciona en el archivo Adafruit_HX8357.h buscando que pines o registros de los ahi declarados activan o desactivan lo que necesito:

asi quedo el prototipo dentro de la libreria Adafruit_HX8357

void begin(uint32_t freq = 0), setRotation(uint8_t r),
invertDisplay(boolean i),
void sleep(void) { writecommand(HX8357_DISPOFF); }
void wake(void) { writecommand(HX8357_DISPON); }
setAddrWindow(uint16_t x, uint16_t y, uint16_t w, uint16_t h);

acabo de descubrir porque no me funciona, la libreria que tengo instalada es la HX8357 y necesito la HX8347i

y de la libreria que necesito no hay soporte de parte de Adafruit

Hay un gran hilo en Hardware del amigo @TFTLCDCyg sobre pantallas Algunos consejos para usar TFT´s - #243 by TFTLCDCyg
Ahi tienes un gran resumen de qué usar y qué no, para la próxima.

Volviendo a tu tema y al HX8347i
Supongo la encontraste porque esta esto
https://www.ramtex.dk/display-controller-driver/rgb/hx8347.htm?gclid=CjwKCAjw_o-HBhAsEiwANqYhpwJZs6tap4CwH-oyX4iI7A-q-PMZz7v31pVn0GP-XKE1xTXQT1BkXhoCbtEQAvD_BwE

1 Like

si, la verdad la seleccione por esta parte:

Special HX8347 hardware features:

  • A-I variants have slightly different command sets and data formats..*
  • 0-180, 90-270 degree frame buffer rotation with hardware support. Portrait mode, landscape mode.*
  • Full driver software support.

La informacion que me das sobre la compatibilidad con los demas drivers es de mucha ayuda, porque puedo emplear la solucion de David Prentice con el driver 7735 y solo debo colocar correctamente la direccion del registro en memoria que apaga y enciende la pantalla.

#### Seeking a display controller equivalent to HX8347?

Check these:

HX8325 HX8352 HX8353 HX8367 ILI9340 ILI9341 ILI9163 NT39122 SPFD54126 SSD1355 ST7715 ST7628 ST7735 ST7773 ST7789

These display controllers have similar internal configuration and graphic rendering features.
The differences are primarily related to display screen sizes or available bus interface types.

Gracias por ese dato, es de mucha ayuda

dejo esto por aca para compartirlo tambien con los hispan hablantes:

al parecer hay un pin, el cual permite controlar el backlight de la pantalla, solo que no se cual es, ya seguiremos buscando y daremos forma a esto.

El control de la retroiluminación de un TFT de los económicos, que todo mundo usa en sus proyectos para arduino no es simple.

En teoría se podría controlar mediante la manipulación de un registro estableciéndolo en 0 o en 1, sin embargo esto no es así de simple, ya que el pin del TFT que se usa para encender la retroiluminación va conectado directamente a 3.3V en algunos casos y en otros a 5V, por lo que manipular un registro en el TFT no dará los resultados que deseamos.

Hay que considerar que el consumo de energía de los pines restantes que se comunican con el TFT no se verá afectado.

No podemos gestionar directamente el pin de retroiluminación del TFT conectándolo a un pin del arduino, ya que la mayoría de veces la corriente que estos pueden suministrar es inferior a la de los leds del TFT.

La posible solución es utilizar algún mosfet que permita regular por PWM la intensidad de los leds, sin poner en riesgo el pin de control. Podría adaptarse un circuito similar al que se necesita para controlar un motor DC con arduino, la cuestión, es que la demanda de energía se la llevará el mosfet, en lugar de los leds de retroiluminación.

Muy pocas pantallas tienen habilitado un control PWM en los leds de la retroiluminación, pero no son baratas. Las pantallas con chips FT800, FT801, FT81X y BT81X tienen control activo de la retroiluminación. Alguna vez adafruit tuvo entre sus filas un shield TFT que tenía un pin específico para controlar la retroiluminación

WOW muchas gracias por tu explicacion, en muchos foros he visto partes de lo que explicas, pero nada tan concreto y completo, ademas de bien explicado.

si definitivamente he llegado a la conclusion de emplear la pantalla a tiempo completo sin apagarla aunque eso me signifique un consumo de energia muy superior, no tengo de otra, ya que no quiero incrementar costos.

en algun momento pense en emplear una de las pantallas de repuesto que venden en las tiendas de reparacion de celulares, ya que por costo y tamaño resutan una mejor opcion, pero no hay como controlarlas de forma barata y por eso me desanime.

Como es lo del Mosfet?

habria que desarmar la pantalla e intervenirla, soldar un par o dos de clables, un par de resistencias y soldar un cable del mosfet al pin, verdad?

@TFTLCDCyg tienes un poco mas detallada esa solucion, ya para dejarla como ayuda para los hispanohablantes, si me animo lo hago y lo subo para mostrar como se hace.

El control de brillo tal como describe @TFTLCDCyg no es complicado.

Este es un ejemplo para un LCD común.

El comando desde arduino se hace usando pines adecuados para salida PWM (revisar para tu Arduino cuales son) y la instrucción analogWrite(pin, valor) donde valor va de 0 para No Brillo o apagado hasta 255 como máximo.

Para que puedas manipular el pin de retroiluminación deberás construir un shield intermedio entre el MCU y tu pantalla. Existen placas para prototipo que ajustan perfectamente al formato del MEGA o del UNO.

Como señala surbyte es una de las posibles formas de manipular la retroiluminación, para extender la vida útil de tu TFT.

También podrías agregar un relevador y accionarlo con el panel táctil de tu pantalla, asignas un botón en una posición específica para que te permita encender o apagar los leds de la retroiluminación a voluntad.