Ayuda reles codigo

5 Feb 2008
148
España
Provincia
Sevilla
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);
}
 
5 Feb 2008
148
España
Provincia
Sevilla
Mas de 190 visitas y ni un solo comentario???
Me parece que no soy el unico que no sabe mucho de este tema.
 
15 Dic 2010
122
esp
Provincia
valencia
Hola, no soy experto ni mucho menos pero en el setup creo que te falta algo como esto "pinMode (rele1, OUTPUT);// FUENTE ALIMENTACION ON/OFF" pero para tus necesidades. Saludos
 
Arriba