Go Down

Topic: LED queda mínimamente encendido (Read 1 time) previous topic - next topic

18turbo

Rig, te entendí perfectamente

Y te doy las gracias

Ahora soy yo el que está en el móvil. Cuando este mañana en mi PC explico lo que ha pasado

Lo intentaré arreglar siendomas restrictivo en la comparación

Gracias a todos

RIG

Que bien!   
De todos modos aquí el ejemplo que prometí:
Code: [Select]
const byte x=6;    //pin 6  para prueba
 unsigned long millisAntes;
 unsigned long millisAhora;
 byte estado=0;

 void setup()

 {
  pinMode(6,OUTPUT);
  analogWrite(x,255);
  delay(2000);
  analogWrite(x,0);     
  millisAntes = millis();
}


void loop()
{

  millisAhora = millis();

  switch (estado) {   
    case 0:
    if (millisAhora - millisAntes >= 4000UL)
    {
      analogWrite(x,255);
      estado=1;

    }
    break;
   
    case 1:
    if (millisAhora - millisAntes >= 6000UL)
    {
      analogWrite(x,140);
      estado=2;
    }     
    break;
   
    case 2:
    if (millisAhora - millisAntes >= 8000UL)
    {
      analogWrite(x,255);
      estado=3;

    }
    break;

    case 3:
    if (millisAhora - millisAntes >= 10000UL)
    {       
      analogWrite(x,120);
      estado=4;
    }
    break;

    case 4:
    if (millisAhora - millisAntes >= 12000UL)
    {
      analogWrite(x,0);
      estado=0;
      millisAntes=millis(); 
    }
  }

}


Mira que no hice grandes cambios a tu código, solo agregue un condicional múltiple y listo!,  pruebalo  y mira si lo puedes adaptar a tu código original y si no, espero te sirva para darte una idea de como puedes resolver el fallo que tenias

18turbo

Perfecto RIG. Funciona.

He simplificado un poco el código porque no necesitaba que fuera cíclico. Ya solo me falta adaptar la solución al programa principal.

Muchas gracias a todos, especialmente a ti RIG.

surbyte

Te das cuenta, 18turbo, siempre debes mostrar el código (tal como lo dicen las normas del foro) porque no debes asumir que las cosas estan bien, porque de ser así ni siquiera hubieras abierto este hilo no te parece?

Ademas en tu código simplemente desde los 4 segundos todos los if se ejecutan anidadamente. Ejemplo cuando superes los 6 segundos se ejecuta el if de 4 y el de 6 y cuando superes 8 los 3 anteriores y asi hasta 12 segundos.
Asi que no era problema del analogWrite() porque una cosa es ver en el osciloscopio que no es exactamente 0 PWM y en eso estoy de acuerdo contigo y otra que me digas que lo veas en un LED.
Para verlo debes tener un PWM interesante digamos.


Go Up