#641
23-09-2014, 12:26 AM
(Última modificación: 23-09-2014, 12:43 AM por
william.)
hola comento lo que e echo asta ahora la pantalla funciona ahora si alguien puede echar una mano para hacer que por ejemplo el día de la semana no me sale en el lcd ese es uno el otro como tengo que hacer para que en el lcd aparte de la fecha y hora me valla diciendo también en la faces que esta la pantalla por ejemplo con la botonera gracias
#include <LiquidCrystal.h>
#include <Wire.h>
#define DS1307_I2C_ADDRESS 0x68
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val)// Convierte BCD (binario decimal codificado) a números normales decimales
{
return ( (val/16*10) + (val%16) );
}
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.write(decToBcd(second)); // 0 a bit 7 inicia el reloj
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour)); // Si usted quiere 12 hora am/pm usted tiene que poner el
// bit 6 (tambien tiene que cambiar readDateDs1307)
Wire.write(decToBcd(dayOfWeek));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.endTransmission();
}
// Establece la fecha y el tiempo del ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Resetea el registro puntero
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// Alguno de estos necesitan enmascarar porque ciertos bits son bits de control
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
LiquidCrystal lcd(24, 23, 28, 27, 26, 25);
Luces
int led1 = 2; // Pin digital PWM
int led2 = 3; // Pin digital PWM
int led3 = 4; // Pin digital PWM
int led4 = 5; // Pin digital PWM
int led5 = 6; // Pin digital PWM
//Potencias
int pamanecer= 20; // Potencia amanecer 0-100%
int pdia= 50; // Potencia luz dia 0-100%
int psol= 100; // Potencia luz Sol 0-100%
int patardecer= 25; // Potencia atardecer 0-100%
int pluna= 1; // Potencia de luna (1-10 valores PWM solo leds azules)
//Horas
int hamanecer= 13; // Hora fase amanecer
int hdia= 14; // Hora fase día
int hsol= 16; // Hora fase Sol
int tsol= 5; // Duracion de Sol , horas
int hatardecer= 21; // Hora atardecer
int hluna= 22; // Hora fase luna
int tluna= 1; // Duración luna , horas
int vpwm= 2; // Tiempo del efecto en cada fase, minutos
// Calculos para el programa (no modificar)
int pwm=0;
int pwmamanecer=(pamanecer*2.55);//Calculamos la potencia de salida
int pwmdia=(pdia*2.55);
int pwmsol=(psol*2.55);
int pwmatardecer=(patardecer*2.55);
int pwmluna=(pluna*2.55);
int faseluz = 0;
int delayamanecer=(vpwm*700000)/(pwmamanecer);//Calculamos cada cuanto tiempo da un paso de intensidad
int delaydia=(vpwm*600000)/(pwmdia-pwmamanecer);
int delaysol=(vpwm*800000)/(pwmsol-pwmdia);
int delayatardecer=(vpwm*300000)/(pwmsol-pwmatardecer);
int delayluna=(vpwm*800000)/(pwmatardecer-pwmluna);
void setup()
{
//RELOJ//
Wire.begin();
Serial.begin(9600);
lcd.begin(16,2); // DEfine pantalla LCD de 16x2
/*
second = 00;
minute = 32;
hour = 14;
dayOfWeek = 5;
dayOfMonth = 12;
month = 8;
year = 11;
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
*/
//ILUMINACION//
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
}
void loop()
{
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); //Miramos la hora
lcd.setCursor(0,0);
if (dayOfMonth < 10) lcd.print("0");
lcd.print(dayOfMonth, DEC);
lcd.setCursor(2,0);
lcd.print("/");
lcd.setCursor(3,0);
if (month < 10) lcd.print("0");
lcd.print(month, DEC);
lcd.setCursor(5,0);
lcd.print("/");
if (year < 10) lcd.print("0");
lcd.print(year, DEC);
lcd.setCursor(9,0);
if (hour < 10) lcd.print("0");
lcd.print(hour, DEC);
lcd.setCursor(11,0);
lcd.print(":");
lcd.setCursor(12,0);
if (minute < 10) lcd.print("0");
lcd.print(minute, DEC);
lcd.setCursor(14,0);
lcd.print(":");
if (second < 10) lcd.print("0");
lcd.print(second, DEC);
lcd.setCursor(14,0);
switch (dayOfWeek)
{
case 1: lcd.print(" Lunes"); break;
case 2: lcd.print(" Martes"); break;
case 3: lcd.print(" Miercoles"); break;
case 4: lcd.print(" Jueves"); break;
case 5: lcd.print(" Viernes"); break;
case 6: lcd.print(" Sabado"); break;
case 7: lcd.print(" Domingo"); break;
}
luz();// Ejecutamos el programa Luz
delay(1000); //Pausa de 0,1 segundo
}
void luz ()
{
//FASE 1 - AMANECER
if (hour >= hamanecer && hour < hdia && faseluz ==0){ //FASE1
if (pwm!=pwmamanecer) { //Hasta que el valor de pwm no llege al valor pwmamanecer ira aumentandolo
analogWrite (led1,pwm);//Escribimos la potencia
analogWrite (led2,pwm);//Lo mismo
pwm++;//sube un paso la intensidad
delay(delayamanecer);//Esperamos para cumplir el tiempo de dimeado deseado
}
else
{faseluz = 1;}//Cuando el valor pwm ya ha llegado al deseado pasaremos a la siguiente fase
}
//FASE 2 - DIA
if (hour >= hdia && hour < hsol && faseluz <2) { //FASE2
if (pwm!=pwmdia){
analogWrite (led1,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led2,pwm);//Lo mismo para el blanco
analogWrite (led3,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led4,pwm);//Lo mismo para el blanco
analogWrite (led5,pwm);//Escribimos la potencia en el canal de leds azules
pwm++;
delay(delaydia);
}
else
{faseluz = 2;}
}
//FASE 3 - SOL
if (hour >= hsol && hour < hatardecer && faseluz <3) { //FASE3
if (pwm!=pwmsol) {
analogWrite (led1,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led2,pwm);//Lo mismo para el blanco
analogWrite (led3,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led4,pwm);//Lo mismo para el blanco
analogWrite (led5,pwm);//Escribimos la potencia en el canal de leds azules
pwm++;
delay(delaysol);
}
else
{faseluz = 3;}
}
//FASE 4 - ATARDECER I
if (hour >= hsol+tsol && hour < hatardecer && faseluz <4) { //FASE4
if (pwm!=pwmdia){
if (pwm==255){
pwm=pwmdia-1;
} //Por si reiniciamos en esta fase
analogWrite (led1,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led2,pwm);//Lo mismo para el blanco
analogWrite (led3,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led4,pwm);//Lo mismo para el blanco
analogWrite (led5,pwm);//Escribimos la potencia en el canal de leds azules
pwm--;
delay(delaysol);
}
else
{faseluz = 4;}
}
//FASE 5 - ATARDECER II
if (hour >= hatardecer && hour < hluna && faseluz <5){ //FASE5
if (pwm!=pwmatardecer){
if (pwm==0){
pwm=pwmatardecer+1;
} //Por si reiniciamos en esta fase
analogWrite (led1,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led2,pwm);//Lo mismo para el blanco
analogWrite (led3,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led4,pwm);//Lo mismo para el blanco
analogWrite (led5,pwm);//Escribimos la potencia en el canal de leds azules
pwm--;
delay(delayatardecer);
}
else
{faseluz = 5;}
}
//FASE 6 - LUNA
if (hour >= hluna && hour < hluna+tluna && faseluz <6){ //FASE6
if (pwm!=pwmluna) {
if (pwm==255){
pwm=pwmluna-1;
} //Por si reiniciamos en esta fase
analogWrite (led1,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led2,pwm);//Lo mismo para el blanco
analogWrite (led3,pwm);//Escribimos la potencia en el canal de leds azules
analogWrite (led4,pwm);//Lo mismo para el blanco
analogWrite (led5,pwm);//Escribimos la potencia en el canal de leds azules
pwm--;
delay(delayluna);
}
else
{
faseluz = 6;
analogWrite (led1,0);//Escribimos la potencia en el canal de leds azules
analogWrite (led2,0);//Lo mismo para el blanco
analogWrite (led3,0);//Escribimos la potencia en el canal de leds azules
analogWrite (led4,0);
}
}
//FASE 7 - APAGADO
if (hour >=hluna+tluna && faseluz==6) {
if (pwm!=0){
pwm--;
analogWrite (led5,pwm);
delay(delayluna);
}
else
{faseluz = 0;}
}
o si ves que algo puede ser mas simple dime antonio