Go Down

Topic: Encendido de un LED y autoapagado pasado un tiempo (Read 771 times) previous topic - next topic

arduinopata

Buenas a todos.

Aunque es la primera vez que hago una consulta, llevo con Arduino un tiempo.
Tengo un problema que no consigo solucionar. Quiero programr el Arduino para que encienda un monito a través de un relé por medio de la señal power on de una fuente de alimentación.

La fuente de alimentación genera una señal de power ON para activar el resto de alimentaciones, esta señal que está en HIGH durante todo el tiempo que la fuente está encendida la voy a usar para introducirla como señal de activación a una entrada digital.
Lo que necesito es que cuando Arduino detecte este nivel HIGH constante, me de una salida HIGH en otro puerto, pero que dure solo 2 segundos, pasado este tiempo la salida tiene que ir a LOW aunque la entrada siga en HIGH. Posteriormente cuando la fuente de alimentación de un valor LOW en su salida de control, el Arduino debe de hacer lo contrario, es decir, cuando detecte un valor LOW en su entrada debe de activar a HIGH durante dos segundos la salida digital de antes y volver a estado LOW. La salida la tengo conectada a un relé a través de un transistor y lo que pretendo es enceder y apagar automáticamente el monitor al enceder el ordenador.
Le he dado muchas vueltas pero no consigo apagar el LED pasado ese tiempo.
Si alguien puede darme alguan idea le estaría muy agradecido.
Gracias de antemano.

Marcial

Code: [Select]
#define ON HIGH                 // Cambiar para logica positiva/negativa
#define OF LOW                  // Cambiar para logica positiva/negativa
byte Pinentrada=10;
byte Pinled=7;
unsigned long T_Control=0;      // Para controlar el tiempo consumido
unsigned long T_Apagar=2000;    // Tiempo de funcionamiento
bool EstadoPin=false;           
bool AnteriorEstadoPin=false;
void setup()
{
  pinMode(Pinled, OUTPUT);     
  pinMode(Pinentrada, INPUT);
  digitalWrite (Pinled, OF);
}
void loop()
{
  EstadoPin=digitalRead(Pinentrada);    // Leer pin
  if (AnteriorEstadoPin != EstadoPin)   // Estado ha variado?
  {
    T_Control=millis()+T_Apagar;        // Valor de millis para apagar
    digitalWrite (Pinled, ON);          // Encender         
  }
  AnteriorEstadoPin=EstadoPin;
  if (millis()>T_Control && T_Control>0)// Finalozo el tiempo y lo estamos controlando?
  {
    digitalWrite (Pinled, OF);          // Apagar
    T_Control=0;                        // Dejamos de controlar
  }
}


prueba a ver si va...

arduinopata

Hola Marcial

Muchísimas gracias por tu ayuda, funciona a la perfección. Es justo lo que necesito.
Gracias de nuevo.

Saludos.

napoleon1

buenos dias  tengo una pregunta es que soy nuevo y no he podido conseguir me parece intersante la informacion pero  necesito algo similar, necender un led y que  al cabo de dos segundos apague de  manera automatica y no vuelva a encender solo hasta que  vuelva  a darle  la orden le  agradezco su pronta respuesta

surbyte

Hola napoleon1, tal vez no lo sabes pero cuando un post no tiene cambios en mas de 120 días no deberías responder al mismo y si crear un nuevo hilo con tu duda y en todo caso, poner una referencia (enlace) usando tags.
Se que eres nuevo pero te recomiendo le des una leída a las Normas del foro que te responderán muchas posibles dudas/consultas futuras.

No me quedamuy claro si lo que quieres es que tu led encienda como respuesta a un pulsador/botón y a los 2 seg apague y de nuevo lo haga cuando vuelvas a presionar?
Eso es muy básico, asi que deberías ver por ejemplo blink.ino en ejemplos del IDE.
Ahi prenden un led y lo mantienen por X tiempo usando delay funcion que no me gusta pero para este caso que solo hará eso sirve.
Usa un pulsador conectado a una entrada digital y cada vez que se pone en HIGH activas el LED con un delay de 2 seg y cuando termine estará listo para el proximo evento cuando se vuelva a presionar.
Si quieres hacerlo con algo que viene desde afuera, sigue el mismo criterio.

Si tienes dudas en DOCUMENTACION hay numerosos tutoriales empezando por los dos primeros que te guiarán para hacer esto y muchas cosas mas.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy