Hola a todos, la cuestion es que he montado un controlador arduino para mi pantalla led, pero la cosa es que cuando le parece oportuno, el controlador se bloquea, es decir la pantalla se queda congelada y ya no se apaga la luz, o si pasa con la pantalla apagada, pues no se enciende hasta que no le hago un reset, parece ser que esto me lo hace solo cuando tiene la pantalla conectada y con carga, lo primero que hace es salir al lado de la fecha 3 digitos mas, ejemplo "17/07/13 seria la fecha pues despues del 13 sale 165 como esta ahora y al poco de salir esto se bloquea. Para descartar cosas, probe con otro codigo y se sigue bloqueando y tambien he probado cambiando de pin digital, el modulo de reloj, el pin digital del dimeo y desconectado la LCD, creo que no me falta nada mas por probar.
Alguien puede ayudarme???
Por otro lado no consigo hacer funcionar con el codigo que pongo a continuacion el rele para la fuente, con otros codigos si que lo hago, por lo que descarto conexiones, lo pongo y ya me decis.
Un saludo y gracias de antemano.
//Pinout//
/*
PWM2
PWM3
PWM4
PWM5 - Sensores de Temperatura
PWM6 - Receptor IRDA
PWM7
PWM8 - Dimeo 1 Azules
PWM9
PWM10
PWM11
PWM12
PWM13
D22 - rele1 fuente de lampara leds
D23 - rele2 Bombra de reposicion
D24 - rele3 Bomba de subida
D25 - rele4
D26 - rele5
D27 - rele6
D28 - rele7
D29 - rele8
D30 - triac ventiladores lampara
D31 - triac ventilador sump
D32 - triac ventiladores urna ppal
D33 - triac/rele luz sump
D34 - triac Luz Luna?? o dimeo..
D35
D36
D37
D38
D39
D40
D41
D42
D43
D44
D45
D46
D47
D48
D49
D50
D51
D52
D53
A0 - Boya nivel relleno 1
A1 - Boya nivel relleno 2
A2 - Boya nivel ppal
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
*/
#include <WProgram.h> // necesaria quita error de copilacion
#include <EEPROM.h> // read/write eeprom
#include <avr/wdt.h> //perro
#include <Wire.h> // comunicacion I2C
#include <IRremote.h> // #include <NECIRrcv.h> // Mando a Distacia
#include <OneWire.h> // temeperatura
#include <DallasTemperature.h> //temperatura DS1820
#include <LiquidCrystal_I2C.h> // Pantalla LCD
// direcciones de memoria del I2C
#define Reloj_I2C 0x68
LiquidCrystal_I2C lcd(0x3f,20,4);
//// Pin (I/O) /////
#define ONE_WIRE_BUS 25//pin de temperatura 25
int RECV_PIN = 23; // pin del mando a distancia
int Rele1Luces =22;
int DimeoA = 8;
OneWire oneWire(ONE_WIRE_BUS);//temperatura
DallasTemperature sensores(&oneWire);// temperatura
////+++++++++++++++++++++++++++++++++///
//////////////// variables//////////////
int ValorFaderMaxA = 180;
int ValorFaderA = 0;
int ValorHora = 0; // valor de la hora para poder comparar
int horaON = 10; //hora a la que empiezan a encender
int minutoON = 30;
int horaOFF = 21; //hora a la que se apagan
int minutoOFF = 0;
int TiempoDimeoA=25; //el valor bueno es 25 puesto 1 para pruebas
int TiempoDimeando = (ValorFaderMaxA*TiempoDimeoA)/60;
int ONLucesA = (horaON*60)+minutoON;
int OFFLucesA = ((horaOFF*60)+minutoOFF)-TiempoDimeando;
int ContadorA=0;
int ContadorDiaA=0;
int ContadorNocheA=0;
int TempAcu;//variable donde guardaremos la temperatura del acuario
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; //del reloj
////// constantes Mado distancia
#define mando_1 16621663
///////////////////Funciones /////////////////////////////
//////// leer la hora /////////////
void Leer_Reloj(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Resetea el registro puntero
Wire.beginTransmission(Reloj_I2C);
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(Reloj_I2C, 7);
// Alguno de estos necesitan enmascarar porque ciertos bits son bits de control
*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}
// Convierte números normales decimales a BCD (binario decimal codificado)
byte decToBcd(byte val){return ( (val/10*16) + (val%10) );}
// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) );}
//// LEDS PANTALLA////
void LucesA() {//Como son los primeros y ultimos solo estos controlan el rele
ContadorA=0;// se reinicia contador si no cumple ninguna de las condiciones
//On//
if (ValorHora >= ONLucesA && ValorHora <= OFFLucesA && ValorFaderA < ValorFaderMaxA)
{
if (ValorFaderA == 0)
{ digitalWrite(Rele1Luces,LOW); //sera low o high segun se conecten los reles
}
analogWrite (DimeoA,ValorFaderA);
ValorFaderA=ValorFaderA+1;
ContadorA=ContadorDiaA;
}
//OFF//
if (ValorHora >= OFFLucesA && ValorFaderA != 0 )
{
ValorFaderA=ValorFaderA-1;
analogWrite (DimeoA,ValorFaderA);
if (ValorFaderA == 0) {
digitalWrite(Rele1Luces,HIGH);
}
ContadorA=ContadorNocheA;
}
}
void setup()
{
lcd.init();
lcd.backlight();
}
void loop()
{
Leer_Reloj(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
ValorHora = (hour*60)+minute;
///// codiciones de los canales /////
if (ContadorA ==TiempoDimeoA)
{
LucesA(); // funcion de dimeo pantalla
}
/////// incremento contador de canales ////////
ContadorA=ContadorA+1;
lcd.setCursor(0, 0);
if (dayOfMonth < 10) lcd.print("0");
lcd.print(dayOfMonth, DEC);
lcd.print("/");
if (month < 10) lcd.print("0");
lcd.print(month, DEC);
lcd.print("/");
if (year < 10) lcd.print("0");
lcd.print(year, DEC);
lcd.setCursor(12, 0);
if (hour < 10) lcd.print("0");
lcd.print(hour, DEC);
lcd.print(":");
if (minute < 10) lcd.print("0");
lcd.print(minute, DEC);
lcd.print(":");
if (second < 10) lcd.print("0");
lcd.print(second, DEC);
lcd.setCursor(0,2);
lcd.print("Dimeo Pantalla:");
lcd.print(ValorFaderA, DEC);
/////TEMPERATURA/////
// Lee el valor de temperatura de todos los sensores conectados al bus
sensores.requestTemperatures();
// Crea una variable llamada ”T1” asignándole el valor de temperatura obtenido con sensores.getTemp(0),el valor 0 indica que es el primer sensor que encuentre en el bus//
float T1(sensores.getTempCByIndex(0));
lcd.setCursor(0,3);
lcd.print("Temp. Acuario:");
lcd.print(T1);
delay(800);
} - See more at: http://www.todomarino.com/forum/showthr ... D4eg1.dpuf
Podeis ayudarme con este codigo y problema???
Moderador: Alvaro31
-
- Aiptasia del foro
- Mensajes: 6
- Registrado: 09 Jul 2013 22:33
- MyReef: Boyu 60 litritos
- País: España
Bueno visto el exito del post, he cambiado el arduino mega, por un arduino uno, para asi poder descartar si es problema del mismo, ahora lo tengo conectado al ordenador y todo va bien, mañana lo pasare al acuario y espero que cuando tenga la carga de la pantalla no se quede bloqueado como el anterior.
>Cruzare los dedos.
>Cruzare los dedos.
- Antonio
- Blogger
- Mensajes: 986
- Registrado: 22 Ene 2013 18:12
- MyReef: cubo de 45x45x45
actualmente,semifuncionando - País: España
campeon de este teme estoy pez
...lo siento
pero hay compañeros que controlan este tema...pero,con el tema de las vacaciones,pue sya sabes...
no pierdas las esperanzas,veras como muy pronto te echan una manita.
animo campeon


pero hay compañeros que controlan este tema...pero,con el tema de las vacaciones,pue sya sabes...
no pierdas las esperanzas,veras como muy pronto te echan una manita.
animo campeon

EL AMOR NO SE MENDIGA....EL AMOR SE MERECE.