(29-04-2014, 08:37 AM)Namiga escribió: Yo te paso lo que tengo yo. Es muy simple y no hace atardecer, solo amaneces ... pero por que no me he puesto a calacular el tiempo necesario
Cuando controle el reloj sera más facil .. supongo
Código:
int led1 = 2; // the pin that the LED is attached to
int led2 = 3; // the pin that the LED is attached to
int led3 = 4; // the pin that the LED is attached to
int led4 = 5; // the pin that the LED is attached to
int brightness = 0; // how bright the LED is
int fadeAmount = 1; // how many points to fade the LED by
// the setup routine runs once when you press reset:
void setup() {
// declare pin 2,3,4,5 to be an output:
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// set the brightness of pin 2,3,4,5:
analogWrite(led1, brightness);
analogWrite(led2, brightness);
analogWrite(led3, brightness);
analogWrite(led4, brightness);
if(brightness<170)
{
brightness++;
}
if(brightness>=170)
{
brightness=170;
}
// wait for 900 milliseconds to see the dimming effect
delay(900);
}
Habría que ajustar mejor el delay
Y la variable brightnes la dejo en 170 de momento. es un 70% de la potencia total
Namiga, aunque la solución buena es la que dice Antonio, mientras cacharreas y aprendes algo de C puedes hacer algo muy simple en tu rutina de pruebas para tener el atardecer:
Si te fijas tienes una variable que fija el incremento de brillo para el led. Basta que cambies su valor por un incremento negativo y tendrás el atardecer hasta el apagado.
Si haces algo puramente secuencial sin estructurar en absoluto puedes tener el efecto. Pero insisto que la solución de Antonio es lo suyo!
El tema sería algo como:
unsigned long duraciondia; //ms en un dia
unsigned long duracionfotoperiodo; //ms a tope en fotoperiodo
unsigned long duracionfade; //ms para fadein y fadeout
Basta que en el loop pongas una lógica que haga:
1) calcular tiempo de fadein y fadeout (=número de pasos por el delay del fade en ms)
2) calcular el tiempo apagado (=día menos 2xtiempo de fadein menos fotoperiodo)
3) hacer en bucle
Fadein
Esperar fotoperiodo
Fadeout (repetir lo mismo que fadein, pero con fadeamount -1 y testeando para 0 en vez de max
Esperar apagado
Volver a empezar el bucle
Hay un poco de pupurri en el código que has puesto (ie tienes el fadeamount pero también usas brightness++ que es un fadeamount de 1. Usa esto en su lugar:
brightness+=fadeamount;
De esta forma cuando fadeamount es negativo estarás reducíendo intensidad. Pero ni siquiera hace falta:
for(; brightness<maxbrightness; brightness+=fadeamount) {
delay(fadedelay);
}
delay(duracionfotoperiodo);
for(; brightness>0; brightness-=fadeamount) {
delay(fadedelay);
}
delay(duraciondia-duracionfotoperiodo-2*fadedelay*maxbrightness);
Perdona que estoy con el móvil y es una castaña escribir cosas al vuelo así... Sólo son ideas muy básicas, pero a lo mejor te sirven.