#706
02-10-2014, 09:11 AM
Tienes que declarar cada dato que necesites usar en tu programa. Yo ignoro que datos vas a necesitar y para qué pero te comento qué cosas estoy viendo.
DECLARACIONES DE CONSTANTES
Los datos que me muestras son de tipo entero y en este caso se están usando variables para dar nombre a constates. Para eso se podría haber usado una macro de tipo #define, o caso de usar una variable se podría haber protegido.
int hamanecer=720; // Hora fase amanecer
Se puede declarar como:
const int hamanecer=720; // Hora fase amanecer
De esa forma una sentencia que intente modificar ese vaor daría un error en tiempo de compilación, lo cual es mucho mejor que detectar errores de lógica en tiempo de ejecución del programa.
Cuando se usa una sentencia '#define' estás ahorrando SRAM porque el valor se guarda en el código.
Las macros '#define' se sustituyen en una primera pasada de precompilación por el valor a la derecha del identificador. No llevan ni signo igual ni punto y coma.
Por ejemplo en lugar de
int hamanecer=720; // Hora fase amanecer
Podrías haber usado
#define MddAmanecer 720 // Minutos del día para fase amanecer
Si te das cuenta el idéntificador ya no se refiere a horas del día sino a minutos del día. (Son datos enteros positivos comprendidos entre 0 y 1439)
Deberías adaptar un montón de declaraciones que se refieren a constantes y te recomiendo usar #define
Son constantes todos estos datos:
ADAPTACIÓN DEL CÓDIGO
En los datos cuyo valor ha cambiado de hora del día a minutos del día tendrás que buscarlos en el código y adaptar los identificadores y la lógica para que use minutos del día.
Por ejemplo:
if (hour >= hamanecer && hour < hdia && faseluz ==0){ //FASE1
Como es lógico eso lo tienes que adaptar porque los momentos ya no serán hour sino (hour*60+ minute)
CRÍTICA AL ALGORITMO QUE USA TU DIMMER
Creo que el tipo de control del dimeo no se hacer depender directamente del momento del día. Se usan contadores para incrementar o disminuir el dimeo durante ciertos momentos y cuando llega a un cierto valor se conmuta de fase a la siguiente. Es una chapuza feísima.
La fase debería depender solo del momento del día y ser el reloj el que gobernara los cambios. Sería mucho mejor porque si cambias la hora del reloj todo se ajustaría a la nueva hora.
DECLARACIONES DE CONSTANTES
Los datos que me muestras son de tipo entero y en este caso se están usando variables para dar nombre a constates. Para eso se podría haber usado una macro de tipo #define, o caso de usar una variable se podría haber protegido.
int hamanecer=720; // Hora fase amanecer
Se puede declarar como:
const int hamanecer=720; // Hora fase amanecer
De esa forma una sentencia que intente modificar ese vaor daría un error en tiempo de compilación, lo cual es mucho mejor que detectar errores de lógica en tiempo de ejecución del programa.
Cuando se usa una sentencia '#define' estás ahorrando SRAM porque el valor se guarda en el código.
Las macros '#define' se sustituyen en una primera pasada de precompilación por el valor a la derecha del identificador. No llevan ni signo igual ni punto y coma.
Por ejemplo en lugar de
int hamanecer=720; // Hora fase amanecer
Podrías haber usado
#define MddAmanecer 720 // Minutos del día para fase amanecer
Si te das cuenta el idéntificador ya no se refiere a horas del día sino a minutos del día. (Son datos enteros positivos comprendidos entre 0 y 1439)
Deberías adaptar un montón de declaraciones que se refieren a constantes y te recomiendo usar #define
Son constantes todos estos datos:
Código:
//****************************************************************
// ILUMINACION 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= 95; // 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
ADAPTACIÓN DEL CÓDIGO
En los datos cuyo valor ha cambiado de hora del día a minutos del día tendrás que buscarlos en el código y adaptar los identificadores y la lógica para que use minutos del día.
Por ejemplo:
if (hour >= hamanecer && hour < hdia && faseluz ==0){ //FASE1
Como es lógico eso lo tienes que adaptar porque los momentos ya no serán hour sino (hour*60+ minute)
CRÍTICA AL ALGORITMO QUE USA TU DIMMER
Creo que el tipo de control del dimeo no se hacer depender directamente del momento del día. Se usan contadores para incrementar o disminuir el dimeo durante ciertos momentos y cuando llega a un cierto valor se conmuta de fase a la siguiente. Es una chapuza feísima.
La fase debería depender solo del momento del día y ser el reloj el que gobernara los cambios. Sería mucho mejor porque si cambias la hora del reloj todo se ajustaría a la nueva hora.