Go Down

Topic: Reducir intensidad luces (Read 143 times) previous topic - next topic

OrnyTorrynKo

Buenas, necesito programar unos leds para que se vayan apagando poco a poco en un tiempo concreto, por ejemplo, que en 15 minutos reduzcan su intensidad gradualmente hasta apagarse. Dispongo del modulo DS3231 por si pudiera ser de ayuda usarlo. Gracias!

surbyte

Estudia el comando analogWrite(pin, valor) y tmb estudia el ejemplo Blinkwithoutdelay.ino de tu IDE, en el se emplea millis() como reemplazo de delay.

OrnyTorrynKo

Es exactamente lo que tengo utilizado pero en función del tiempo del reloj.

Este es el código de esa parte:
Code: [Select]
void control_luces(){
  luz=lectura_ldr();
  DateTime now = rtc.now();
  horas = now.hour() + (now.minute()*0.01);

  if(horas==horaenc && luz<100.0){
    digitalWrite(led,HIGH);
  }

  if(horas==horaapa && atardecer==false){
    atardecer=true;
    apag_luz=horaapa;
  }
  if(atardecer==true && horas==apag_luz){
    int_luz=int_luz-17;
    int_luz=constrain(int_luz,0,255);
    digitalWrite(led,(int_luz));
    apag_luz=(apag_luz+0.01);
  }
  if(int_luz==0){
    digitalWrite(led,LOW);
    atardecer=false;
    int_luz=225;
  }
}


Los valores los da correctos pero el led de reduce la intensidad.

surbyte

Code: [Select]
digitalWrite(led,(int_luz));
Esto no funciona.
Es analogWrite lo que debes usar.
digitalWrite tiene dos modos SI O NO, HIGH o LOW, si tu le envias cualquier cosa entre 1 y 255 prende y si le envias 0 apaga.

Go Up