Hola a todos resulta que no consigo hacer funcionar el rele de la fuente para el dimeo, el dimeo si que lo hace bien.
Este codigo es gracias a el compañero Ben y lo he modificado a mis necesidades.
Gracias por vuestra ayuda:
//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);
}
Este codigo es gracias a el compañero Ben y lo he modificado a mis necesidades.
Gracias por vuestra ayuda:
//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);
}