Pues bueno finalmente he dejado de lado las TFT y me he decidido por un LCD 2004 y acortar el Sketch a lo mas imprescindible, también he averiguado que el responsable del "mal" dimeo de los leds era el modulo mosfét, lo he cambiado por este: [https://www.amazon.es/dp/B07QPLPFRQ?psc=1&ref=ppx_yo2ov_dt_b_product_details] y por el momento la cosa ha mejorado bastante (se que lo ideal seria un mosfet de nivel lógico pero tal cual ya cumple).
No quería cerrar este hilo sin antes agradecer infinitamente la ayuda que tan amablemente me habéis prestado y el trabajo tan inmenso que hacéis en este foro echándonos un cable cuando ya no damos mas.
Dejo el código por si le sirve a alguien:
/*
* Arduino controlador pajarera con control de luz ( via Mosfet de potencia), monitorizacion de
* Temperatura y Humedad (DHT22) y Calendario/reloj(RTC DS3231) con visualización en monitor lcd 2004
* ©ramoncho28
*/
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "RTClib.h"
#include <DHT.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define DHTPIN 2 // DHT22 data pin conectado a Arduino pin A2
#define DHTTYPE DHT22 // DHT22 sensor
DHT dht22(DHTPIN, DHTTYPE);
RTC_DS3231 rtc;
DateTime now;
#define deshumi 7 //Rele deshumidificador pin 4
#define Led 6 // salida PWM mosfet pin 6
const int Ldr = A0; //Ldr a pin analogico 0
int VLdr;
const byte pinPowerDHT22 = 3; //reset DHT 22 pin 7
int minuto;
void setup(void) {
Serial.begin(9600);
pinMode(Led, OUTPUT);
pinMode(pinPowerDHT22, OUTPUT);
pinMode(deshumi, OUTPUT);
dht22.begin();
digitalWrite(pinPowerDHT22, HIGH);
rtc.begin();
//rtc.adjust(DateTime(2024, 01, 17, 01, 36, 0));
lcd.init();
lcd.backlight();
lcd.setCursor(0, 1);
lcd.print("Temperatura:");
lcd.setCursor(0, 2);
lcd.print("Humedad:");
lcd.setCursor(0, 3);
lcd.print("Fase:");
lcd.setCursor(11, 3);
lcd.print("Deshum:");
}
void RTC_display() {
char _buffer[11];
char dow_matrix[7][10] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado" };
byte x_pos[7] = { 29, 29, 23, 11, 17, 29, 17 };
static byte previous_dow = 8;
// print date
sprintf(_buffer, "%02u-%02u-%04u", now.day(), now.month(), now.year());
lcd.setCursor(10, 0);
lcd.print(_buffer);
Serial.print(_buffer); // print time
sprintf(_buffer, "%02u:%02u:%02u", now.hour(), now.minute(), now.second());
lcd.setCursor(0, 0);
lcd.print(_buffer);
Serial.print(_buffer);
}
char _buffer[7];
void loop() {
DateTime fecha = rtc.now();
int hora = fecha.hour();
minuto = fecha.minute();
VLdr = analogRead(Ldr);
int Humi = dht22.readHumidity() * 10;
int Temp = dht22.readTemperature() * 10;
if (isnan(Humi) || isnan(Temp)) {
digitalWrite(pinPowerDHT22, LOW);
delay(100);
digitalWrite(pinPowerDHT22, HIGH);
}
if (Temp < 0)
sprintf(_buffer, "-%02u.%1u", (abs(Temp) / 10) % 100, abs(Temp) % 10);
else
sprintf(_buffer, " %02u.%1u", (Temp / 10) % 100, Temp % 10);
lcd.setCursor(12, 1);
lcd.print(_buffer);
lcd.print(" C");
// print humidity (in %)
sprintf(_buffer, "%02u.%1u %%", (Humi / 10) % 100, Humi % 10);
lcd.setCursor(13, 2);
lcd.print(_buffer);
now = rtc.now();
RTC_display();
if (Humi > 60) {
digitalWrite(deshumi, LOW);
lcd.setCursor(18, 3);
lcd.print("ON");
}
else if (Humi < 45) {
digitalWrite(deshumi, HIGH);
lcd.setCursor(18, 3);
lcd.print("OF");
}
if (hora >= 22 || hora <= 6) {
noche();
} else if (hora == 21) {
anochecer();
} else if (hora >= 8) {
dia();
} else if (hora == 7)
amanecer();
}
void amanecer() {
int fade = map(minuto, 0, 59, 1, 255);
analogWrite(Led, fade);
lcd.setCursor(5, 3);
lcd.print("Alba ");
}
void dia() {
if (VLdr > 520) {
analogWrite(Led, 0);
} else if (VLdr < 500) {
analogWrite(Led, 255);
}
lcd.setCursor(5, 3);
lcd.print(" Dia ");
}
void anochecer() {
int fade = map(minuto, 0, 59, 255, 0);
analogWrite(Led, fade);
lcd.setCursor(5, 3);
lcd.print("Ocaso");
}
void noche() {
analogWrite(Led, 0);
lcd.setCursor(5, 3);
lcd.print("Noche");
}
// Fin
PD. He probado las TFT en un ESP32 (3,3v) y funcionan correctamente, pero bueno eso ya es otra historia.
Doy el tema por resuelto y de nuevo gracias y un saludo.