Buenas a todos,
llevo con mi pantalla y con mi código algo mas de dos meses y no consigo hacerlo funcionar en condiciones.
El caso es que lo que yo hago es lo más sencillo posible, tan solo controlo 4 canales para el amanecer y anochecer de la pantalla, nada mas, ni ph ni nivel de agua ni nada, solo la pantalla...
Mi programa estoy seguro que es de lo más chapuza que puedes encontrar ya que mi conocimiento de programación es escaso y es lo único que he podido hacer funcionar como quiero. El problema que tengo es que cuando le da la gana (ya sea a las horas o a los días de funcionar) se queda el programa bloqueado y no hace absolutamente nada, es decir, si esta encendida se queda encendida y si esta apagada o apagando o encendiendo, se queda en el punto en el que se encuentre. Tengo que desenchufar y volver a enchufar para que siga funcionando.
No consigo saber la causa ya que nunca se bloquea en el mismo punto ni a la misma hora ni nada.
Necesito que vosotros los que entendéis mucho más que yo, por favor me echéis una mano y miréis si podéis ayudarme y depurar mejor el código. Es ya desesperante irte un fin de emana y ver que la luz se ha quedado encendida los dos días o apagada o levantarte y ver la pantalla bloqueada...
Os pongo aquí mi código, como digo, seguro que es una chapuza pero lo único que he conseguido hacer...
Aquí os pongo el código, veréis que el paso de los minutos lo hago "forzado" sumando minuto a minuto y solo consulto el reloj una vez al día ya que si lo consulto cada segundo o cada minuto, los bloqueos son continuos y funciona aun peor. Los delays los hago de menos de 1 segundo ya que compenso el retraso que me provoca si le pongo delay(1000).
Ayudadme por favor que he visto muchos programas buenisimos por aquí!!!
Gracias!!
llevo con mi pantalla y con mi código algo mas de dos meses y no consigo hacerlo funcionar en condiciones.
El caso es que lo que yo hago es lo más sencillo posible, tan solo controlo 4 canales para el amanecer y anochecer de la pantalla, nada mas, ni ph ni nivel de agua ni nada, solo la pantalla...
Mi programa estoy seguro que es de lo más chapuza que puedes encontrar ya que mi conocimiento de programación es escaso y es lo único que he podido hacer funcionar como quiero. El problema que tengo es que cuando le da la gana (ya sea a las horas o a los días de funcionar) se queda el programa bloqueado y no hace absolutamente nada, es decir, si esta encendida se queda encendida y si esta apagada o apagando o encendiendo, se queda en el punto en el que se encuentre. Tengo que desenchufar y volver a enchufar para que siga funcionando.
No consigo saber la causa ya que nunca se bloquea en el mismo punto ni a la misma hora ni nada.
Necesito que vosotros los que entendéis mucho más que yo, por favor me echéis una mano y miréis si podéis ayudarme y depurar mejor el código. Es ya desesperante irte un fin de emana y ver que la luz se ha quedado encendida los dos días o apagada o levantarte y ver la pantalla bloqueada...
Os pongo aquí mi código, como digo, seguro que es una chapuza pero lo único que he conseguido hacer...
Aquí os pongo el código, veréis que el paso de los minutos lo hago "forzado" sumando minuto a minuto y solo consulto el reloj una vez al día ya que si lo consulto cada segundo o cada minuto, los bloqueos son continuos y funciona aun peor. Los delays los hago de menos de 1 segundo ya que compenso el retraso que me provoca si le pongo delay(1000).
PHP:
#include <Wire.h> // Incluye la librería Wire
#include "RTClib.h" // Incluye la librería RTClib
#include <OneWire.h>
#include <pitches.h> //Libreria para buzzer
#include <MemoryFree.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
RTC_DS1307 RTC; // Crea el objeto RTC
int hora;
int minuto;
int segundo;
int x=0;
void setup () {
Serial.begin(9600); // Establece la velocidad de datos del puerto serie
Wire.begin(); // Establece la velocidad de datos del bus I2C
RTC.begin();// Establece la velocidad de datos del RTC
//Descomentar la linea siguiente cada vez que queramos ponerlo en hora
//RTC.adjust(DateTime(__DATE__, __TIME__));
pinMode(7, OUTPUT); //Azules//
pinMode(8, OUTPUT); //Blancos//
pinMode(9, OUTPUT); //Mixtos//
pinMode(10, OUTPUT); //Mixtos2//
lcd.noBlink();
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" ACUARIO MARINO ");
delay(1000);
lcd.setCursor(0,1);
lcd.print(" Cargando ");
delay(1000);
for (int i=0; i<5; i++)
{
lcd.print((char)46); //pone un punto
delay (1000);
}
}
void loop () {
int minute;
int hour;
int second;
int tiempo;
if(x==0)
{
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
hora=now.hour();
minuto=now.minute();
}
lcd.clear();
lcd.noBlink();
lcd.setCursor(11, 0);
if (hora < 10)
lcd.print("0");
lcd.print(hora, DEC);
lcd.print(":");
if (minuto < 10)
lcd.print("0");
lcd.print(minuto, DEC);
tiempo=(hora*60)+minuto;
Luces (tiempo);
}
void Luces(int tiempo)
{
///////////tiempos de progamacion//////////
int PotAzul, PotBlanco, PotMix, PotMix2, Porcent;
int IamaneceAzules=720; //12:00
int FamaneceAzules=750; //12:30 //
int IanocheceAzules=1381; //23:01//
int FanocheceAzules=1410; //23:30//
int IamaneceBlancos=751; //12:31//
int FamaneceBlancos=780; //13:00//
int IanocheceBlancos= 1321; //22:01//
int FanocheceBlancos=1380; //23.00//
int IamaneceMixtos=781; //13:01//
int FamaneceMixtos=840; //14:00//
int IanocheceMixtos=1260; //21:00//
int FanocheceMixtos=1320; //22:00//
int MaxLED=250;//-canal2
int MaxRojos=250;//-canal4
int MaxAzules=250; //-canal 1
int MaxBlancos=250;//-canal3
//Noche
if (tiempo > FanocheceAzules || tiempo < IamaneceAzules )
{
PotAzul=1;
PotBlanco=0;
PotMix=0;
PotMix2=0;
analogWrite(10, PotAzul);
analogWrite(8, PotBlanco);
analogWrite(9, PotMix);
analogWrite(7, PotMix2);
for (int i=0; i<30; i++)
{
lcd.setCursor(0,0);
lcd.print("Luces");
lcd.setCursor(0,1);
lcd.print("apagadas ");
delay(979);
}
for (int i=0; i<30; i++)
{
lcd.setCursor(0, 0);
lcd.print("C1:- ");
lcd.print("C2:-");
lcd.setCursor(0,1);
lcd.print("C3:- ");
lcd.print("C4:- ");
delay(979);
}
}
//AmanecerAzules
if (tiempo >= IamaneceAzules && tiempo <= FamaneceAzules)
{
PotAzul=map(tiempo,IamaneceAzules,FamaneceAzules,1,MaxAzules);
PotBlanco=0;
PotMix=0;
PotMix2=0;
Porcent=(PotAzul*100)/MaxAzules;
analogWrite(10, PotAzul);
analogWrite(8, PotBlanco);
analogWrite(9, PotMix);
analogWrite(7, PotMix2);
for (int i=0; i<30; i++)
{
lcd.setCursor(0,0);
lcd.print("Canal 1");
lcd.setCursor(0,1);
lcd.print("Encendiendo ");
lcd.print(Porcent);
lcd.print("%");
delay(979);
}
for (int i=0; i<30; i++)
{
lcd.setCursor(0, 0);
lcd.print("C1:E ");
lcd.print("C2:-");
lcd.setCursor(0,1);
lcd.print("C3:- ");
lcd.print("C4:- ");
delay(979);
}
}
//AmanecerBlancos
if (tiempo >= IamaneceBlancos && tiempo <= FamaneceBlancos)
{
PotBlanco=map(tiempo,IamaneceBlancos,FamaneceBlancos,1,MaxLED);
PotAzul=MaxAzules;
PotMix=0;
PotMix2=0;
Porcent=(PotBlanco*100)/MaxLED;
analogWrite(10, PotAzul);
analogWrite(8, PotBlanco);
analogWrite(9, PotMix);
analogWrite(7, PotMix2);
for (int i=0; i<30; i++)
{
lcd.setCursor(0,0);
lcd.print("Canal 2");
lcd.setCursor(0,1);
lcd.print("Encendiendo ");
lcd.print(Porcent);
lcd.print("%");
delay(979);
}
for (int i=0; i<30; i++)
{
lcd.setCursor(0, 0);
lcd.print("C1:E ");
lcd.print("C2:E");
lcd.setCursor(0,1);
lcd.print("C3:- ");
lcd.print("C4:- ");
delay(979);
}
}
//AmanecerMixtos
if (tiempo >= IamaneceMixtos && tiempo <= FamaneceMixtos)
{
PotMix=map(tiempo,IamaneceMixtos,FamaneceMixtos,1,MaxBlancos);
PotMix2=map(tiempo,IamaneceMixtos,FamaneceMixtos,1,MaxRojos);
PotAzul=MaxAzules;
PotBlanco=MaxLED;
analogWrite(10, PotAzul);
analogWrite(8, PotBlanco);
analogWrite(9, PotMix);
analogWrite(7, PotMix2);
Porcent=(PotMix*100)/MaxBlancos;
for (int i=0; i<30; i++)
{
lcd.setCursor(0,0);
lcd.print("Canal 3/4");
lcd.setCursor(0,1);
lcd.print("Encendiendo ");
lcd.print(Porcent);
lcd.print("%");
delay(979);
}
for (int i=0; i<30; i++)
{
lcd.setCursor(0, 0);
lcd.print("C1:E ");
lcd.print("C2:E");
lcd.setCursor(0,1);
lcd.print("C3:E ");
lcd.print("C4:E ");
delay(979);
}
}
//Dia
if (tiempo > FamaneceMixtos && tiempo < IanocheceMixtos)
{
PotAzul=MaxAzules;
PotBlanco=MaxLED;
PotMix=MaxBlancos;
PotMix2=MaxRojos;
analogWrite(10, PotAzul);
analogWrite(8, PotBlanco);
analogWrite(9, PotMix);
analogWrite(7, PotMix2);
lcd.setCursor(15,1);
for (int i=0; i<30; i++)
{
lcd.setCursor(0,0);
lcd.print("Luces");
lcd.setCursor(0,1);
lcd.print("encendidas ");
delay(979);
}
for (int i=0; i<30; i++)
{
lcd.setCursor(0, 0);
lcd.print("C1:E ");
lcd.print("C2:E");
lcd.setCursor(0,1);
lcd.print("C3:E ");
lcd.print("C4:E ");
delay(979);
}
}
//AnochecerMixtos
if (tiempo >= IanocheceMixtos && tiempo <= FanocheceMixtos)
{
PotMix=map(tiempo,IanocheceMixtos,FanocheceMixtos,MaxBlancos,1);
PotMix2=map(tiempo,IanocheceMixtos,FanocheceMixtos,MaxRojos,1);
PotAzul=MaxAzules;
PotBlanco=MaxLED;
Porcent=(PotMix*100)/MaxBlancos;
analogWrite(10, PotAzul);
analogWrite(8, PotBlanco);
analogWrite(9, PotMix);
analogWrite(7, PotMix2);
for (int i=0; i<30; i++)
{
lcd.setCursor(0,0);
lcd.print("Canal 3/4");
lcd.setCursor(0,1);
lcd.print("Apagando ");
lcd.print(Porcent);
lcd.print("%");
delay(979);
}
for (int i=0; i<30; i++)
{
lcd.setCursor(0, 0);
lcd.print("C1:E ");
lcd.print("C2:E");
lcd.setCursor(0,1);
lcd.print("C3:- ");
lcd.print("C4:- ");
delay(979);
}
}
//AnochecerBlancos
if (tiempo >= IanocheceBlancos && tiempo <= FanocheceBlancos)
{
PotBlanco=map(tiempo,IanocheceBlancos,FanocheceBlancos,MaxLED,1);
PotAzul=MaxAzules;
PotMix=0;
PotMix2=0;
Porcent=(PotBlanco*100)/MaxLED;
analogWrite(10, PotAzul);
analogWrite(8, PotBlanco);
analogWrite(9, PotMix);
analogWrite(7, PotMix2);
for (int i=0; i<30; i++)
{
lcd.setCursor(0,0);
lcd.print("Canal 2");
lcd.setCursor(0,1);
lcd.print("Apagando ");
lcd.print(Porcent);
lcd.print("%");
delay(979);
}
for (int i=0; i<30; i++)
{
lcd.setCursor(0, 0);
lcd.print("C1:E ");
lcd.print("C2:-");
lcd.setCursor(0,1);
lcd.print("C3:- ");
lcd.print("C4:- ");
delay(979);
}
}
//AnochecerAzules
if (tiempo >= IanocheceAzules && tiempo <= FanocheceAzules)
{
PotAzul=map(tiempo,IanocheceAzules,FanocheceAzules,MaxAzules,1);
PotBlanco=0;
PotMix=0;
PotMix2=0;
Porcent=(PotAzul*100)/MaxAzules;
analogWrite(10, PotAzul);
analogWrite(8, PotBlanco);
analogWrite(9, PotMix);
analogWrite(7, PotMix2);
for (int i=0; i<30; i++)
{
lcd.setCursor(0,0);
lcd.print("Canal 1");
lcd.setCursor(0,1);
lcd.print("Apagando ");
lcd.print(Porcent);
lcd.print("%");
delay(979);
}
for (int i=0; i<30; i++)
{
lcd.setCursor(0, 0);
lcd.print("C1:- ");
lcd.print("C2:-");
lcd.setCursor(0,1);
lcd.print("C3:- ");
lcd.print("C4:- ");
delay(979);
}
}
//Control
if(PotAzul < 0)
{
PotAzul=0;
}
if(PotBlanco < 0)
{
PotBlanco=0;
}
if(PotMix < 0)
{
PotMix=0;
}
if(PotMix2 < 0)
{
PotMix2=0;
}
if(PotAzul >MaxAzules)
{
PotAzul=MaxAzules;
}
if(PotBlanco >MaxLED)
{
PotBlanco=MaxLED;
}
if(PotMix >MaxBlancos)
{
PotMix=MaxBlancos;
}
if(PotMix2 >MaxRojos)
{
PotMix2=MaxRojos;
}
minuto=minuto+1;
if (minuto==60)
{
minuto=0;
hora=hora+1;
if (hora==24)
{
hora=0;
}
}
x=x+1;
if (hora==5 && minuto==0)
{
x=0;
}
}
Ayudadme por favor que he visto muchos programas buenisimos por aquí!!!
Gracias!!