Yo estoyu intentando pulir mi codigo para el dimmeo de la pantalla lo estoy haciendo con un irf520 os dejo por aqui el codig, se que no es lo mejor pero no se como hacerlo, he estado leyendo pero no entiendo
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
#include <LCD.h>
#define I2C_ADDR 0X3F
LiquidCrystal_I2C lcd(I2C_ADDR,2, 1, 0, 4, 5, 6, 7);
RTC_DS1307 RTC;
void setup () {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
lcd.begin (16,2); // Inicializar el display con 16 caraceres 2 lineas
lcd.clear();
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(HIGH);
}
void loop () {
int minute;
int hour;
int tiempo;
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
tiempo=(now.hour()*60)+now.minute(); // Para que sea un numero entero lo medimos en minutos
lcd.home();
lcd.print(now.hour(), DEC); //hora
lcd.print(':');
lcd.print(now.minute(), DEC);//minuto
lcd.print(':');
lcd.print(now.second(), DEC );//Segundo
lcd.print(' ');
lcd.print(now.day(), DEC ); //Dia
lcd.print('/');
lcd.print(now.month(), DEC ); //mes
if (tiempo < 60)
{
tiempo=tiempo+1440; // para cuando sean las 12 de la noche (00 horas)
}
Serial.println();
Serial.print("Tiempo: ");
Serial.println(tiempo);
delay(1000); // La información se actualiza cada 1 seg.
Luces (tiempo);
}
void Luces(int tiempo)
{
lcd.setCursor(0,1);
///////////tiempos de progamacion//////////
int PotLED;
int InicioAmanecerLED=720; //12:00
int FinAmanecerLED=780; //13:00 //
int InicioAnochecerLED=1200; //20:00//
int FinAnochecerLED=1290; //21:30//
int MaxLED=240; //Maximo que vamos a encender los LED sobre 255
//Noche
if (tiempo >FinAnochecerLED || tiempo < InicioAmanecerLED )
{
PotLED=0;
Serial.println();
lcd.print("NOCHE: ");
lcd.println(PotLED);
Serial.println();
}
//Amanecer
if (tiempo >= InicioAmanecerLED && tiempo <= FinAmanecerLED)
{
PotLED=map(tiempo,InicioAmanecerLED,FinAmanecerLED,0,MaxLED);
Serial.println();
lcd.print("AMANECIENDO ");
Serial.println(PotLED);
Serial.println();
}
//Dia
if (tiempo > FinAmanecerLED && tiempo < InicioAnochecerLED)
{
PotLED=MaxLED;
Serial.println();
lcd.print("DIA: ");
Serial.println(PotLED);
Serial.println();
}
//Anochecer
if (tiempo >= InicioAnochecerLED && tiempo <= FinAnochecerLED)
{
PotLED=map(tiempo,InicioAnochecerLED,FinAnochecerLED,MaxLED,0);
Serial.println();
lcd.print("ANOCHECIENDO: ");
Serial.println(PotLED);
Serial.println();
}
//Control
if(PotLED < 0)
{
PotLED=0;
}
if(PotLED >MaxLED)
{
PotLED=MaxLED;
}
analogWrite(9, PotLED);
delay(1000);
}
Cada x tiempo la pantalla se apaga 1 segundo y vuelve a encenderse