Podeis ayudarme con este codigo y problema???

Cualquier duda sobre Arduino.

Moderador: Alvaro31

Responder
Joiba
Aiptasia del foro
Aiptasia del foro
Mensajes: 6
Registrado: 09 Jul 2013 22:33
MyReef: Boyu 60 litritos
País: España

17 Jul 2013 16:39

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

Avatar de Usuario
Sylar
Zooanthus del foro
Zooanthus del foro
Mensajes: 50
Registrado: 21 Abr 2013 16:55
MyReef: 150x60x60
País: España

17 Jul 2013 17:04

Tiene toda la pinta de que estas llenando la memoria del arduino y por eso se bloquea, estoy con el movil y no puedo ver el codigo bien, en cuanto pueda le hecho un vistazo

Un saludo

Joiba
Aiptasia del foro
Aiptasia del foro
Mensajes: 6
Registrado: 09 Jul 2013 22:33
MyReef: Boyu 60 litritos
País: España

18 Jul 2013 14:54

Ojala podais ayudarme, empiezo a estar desesperado.
Gracias y espero como agua de mayo.

Joiba
Aiptasia del foro
Aiptasia del foro
Mensajes: 6
Registrado: 09 Jul 2013 22:33
MyReef: Boyu 60 litritos
País: España

21 Jul 2013 20:25

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.

Joiba
Aiptasia del foro
Aiptasia del foro
Mensajes: 6
Registrado: 09 Jul 2013 22:33
MyReef: Boyu 60 litritos
País: España

22 Jul 2013 16:52

Pues nada sigo con el mismo problema, alguien puede ayudarme???

Avatar de Usuario
Antonio
Blogger
Blogger
Mensajes: 986
Registrado: 22 Ene 2013 18:12
MyReef: cubo de 45x45x45
actualmente,semifuncionando
País: España

22 Jul 2013 22:37

campeon de este teme estoy pez :black_eye: ...lo siento :shutup:
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 :clap:
EL AMOR NO SE MENDIGA....EL AMOR SE MERECE.

Joiba
Aiptasia del foro
Aiptasia del foro
Mensajes: 6
Registrado: 09 Jul 2013 22:33
MyReef: Boyu 60 litritos
País: España

24 Jul 2013 19:26

Gracias Antonio, eres un crack.
Como más vale una imagen que mil palabras, pues aqui teneis una foto del montaje.

Imagen

Un abrazo Antonio.

Responder