Autor Tema: Encender y apagar un led con un mismo pulsador  (Leído 7820 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado milecMaestre

  • PIC10
  • *
  • Mensajes: 2
Encender y apagar un led con un mismo pulsador
« en: 27 de Julio de 2017, 21:49:49 »
Saludos amigos este es mi primera pregunta en el foro, quisiera que me explicaran como encender y apagar un led con el mismo pulsador, el código que estoy implementando es el que les dejo aquí abajo. lo que quiero es que al alimentar el pic el led inicie encendido pero que tenga la posibilidad de apagarlo y encenderlo, he probado de varias forma y en la simulación enciende el led pero no apaga cuando presiono el pulsador, les dejo el codigo para ver si me pueden ayudar, muchas gracias...


#include <12F629.h>

#fuses INTRC_IO,NOWDT,NOPROTECT, NOMCLR ,BROWNOUT, PUT 
#use delay(clock=4000000)
#use fast_io(A)


#BYTE   GPIO   = 0X05

#define LED          PIN_A5
#define ON_OFF    PIN_A3

void main()
{
   setup_comparator(nc_nc_nc_nc);
   PORT_A_PULLUPS(0xFF);

   while(TRUE)
   {
    output_high(LED);

 if(!input(ON_OFF))
        {
         delay_ms(50); 
         output_toggle(LED);
         }
                                                 
    }

}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Encender y apagar un led con un mismo pulsador
« Respuesta #1 en: 27 de Julio de 2017, 22:22:16 »
Creo que seria mas facil si lo ves asi:

Código: C
  1. void main()
  2. {
  3.    //Configuracion y condiciones iniciales
  4.  
  5.    while(TRUE)
  6.    {
  7.         //Programa
  8.     }
  9. }

Tu programa falla, porque si observas el WHILE se repite siempre. Si tenemos presionado el boton continuamente pasaria esto:

- Salida en 1
- Boton presionado, entra al if
- Delay de 50ms
- Cambio salida ( Apagado)
- Vuelve al incio del while
- Activa la salida ....

Si observas vuelve a repetirse todo, es decir tu led encenderia un ratito ( 50ms), apenas lo apaga vuelve a encenderlo, seran microsegundos lo que esta apagado, por lo cual simplemente no lo ves.

Y lo que buscas es algo asi:

Código: C
  1. void main()
  2. {
  3.    setup_comparator(nc_nc_nc_nc);
  4.    PORT_A_PULLUPS(0xFF);
  5.    output_high(LED);           // Condicion inicial
  6.  
  7.    while(TRUE)
  8.    {
  9.         if(!input(ON_OFF))       //Esta presionado?  Si lo esta entro
  10.         {
  11.              output_toggle(LED);        // Cambio el estado del LED
  12.              delay_ms(10);                 // Delay rebote
  13.              while(!input(ON_OFF));   // Espero hasta que se suelte el boton, Para que no se repita muchas veces el toggle
  14.          }
  15.     }
  16. }

« Última modificación: 27 de Julio de 2017, 22:30:34 por KILLERJC »

Desconectado milecMaestre

  • PIC10
  • *
  • Mensajes: 2
Re:Encender y apagar un led con un mismo pulsador
« Respuesta #2 en: 06 de Agosto de 2017, 23:33:27 »
Agradecido amigo, no haba visto su respuesta.... funciono de 100