Autor Tema: Encender y apagarlo con distinto botom  (Leído 3059 veces)

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

Desconectado hctransaut

  • PIC10
  • *
  • Mensajes: 2
Encender y apagarlo con distinto botom
« en: 12 de Abril de 2018, 11:26:58 »
Hola amigos del foro TODOPIC saludos, estoy buscando la forma en lenguaje c de encender un led con pulsador y apagarlo con otro pulsador, les agradecería esta ayuda en vista soy nuevo en lo relacionado con programación, por cierto muy interesante lo que he leído en los diferentes temas gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Encender y apagarlo con distinto botom
« Respuesta #1 en: 12 de Abril de 2018, 11:54:56 »
Lo mas simple que podes llegar es el siguiente codigo

Suponiendo que el boton da un 1 al ser presionado (sino cambiar la logica a 0 )

Código: C
  1. while(1)
  2. {
  3.    if(boton_on == 1)
  4.    {
  5.         salida_led = 1;
  6.    }
  7.    if(boton_off == 1)
  8.    {
  9.         salida_led = 0;
  10.    }
  11. }

cambiar boton_on / boton_off y salida_led a lo necesario..
Ejemplo para boton_on, supongamos RB0.
En XC8 : PORTBbits.RB0
En CCS: input(PIN_B0)

para salida_led supongamos que esta en RB7:
En XC8: PORTBbits.RB7
En CCS: output_high(PIN_B7) y output_low(PIN_B7) si deseas ponerlo a 1 o 0 respectivamente

Desconectado hctransaut

  • PIC10
  • *
  • Mensajes: 2
Re:Encender y apagarlo con distinto botom
« Respuesta #2 en: 15 de Abril de 2018, 08:01:04 »
Gracias KILLERJC, por tu ayuda lo probare.

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:Encender y apagarlo con distinto botom
« Respuesta #3 en: 16 de Abril de 2018, 23:20:20 »
killer tu codigo no va a funcionar porque el codigo se va a ejecutar muchas veces y no hay manera de saber si quedara encendido o apagad

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Encender y apagarlo con distinto botom
« Respuesta #4 en: 17 de Abril de 2018, 09:15:56 »
Si funcionaria micronet, son 2 botones distintos, si fuera un boton si tendria problemas el codigo, pero al ser 2 botones distintos (uno para encendido y otro para apagado), no importa cuantas veces entre al if de encendido por ejemplo, ya que siempre estaria poniendole un 1 a la salida que estaba en 1, y nunca cambiaria. Lo mismo ocurre con el boton de apagado, si esta en 0 la salida y la vuelvo a poner en 0, sigue en 0.

Lo que si el problema que puede llegar a tener es que NO se mantengan presionado los 2 botones (que alternaria la salida), pero eso con agregarle un "else" al primer if se solucionaria y le damos prioridad al encendido en este caso.

Código: C
  1. if(boton_on == 1)
  2.    {
  3.         salida_led = 1;
  4.    }
  5.    else
  6.    {
  7.       if(boton_off == 1)
  8.       {
  9.            salida_led = 0;
  10.       }
  11.    }

La idea fue hacerlo lo mas simple posible al codigo

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re:Encender y apagarlo con distinto botom
« Respuesta #5 en: 17 de Abril de 2018, 12:11:04 »
tienes razon killerjc, estaba considerando lo que tu explicas pero para este caso si funciona sin problemas, los rebotes no importan!

Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re:Encender y apagarlo con distinto botom
« Respuesta #6 en: 27 de Abril de 2018, 01:02:52 »
Creo que si nos complicamos un poco la vida también podría ser así.

while (1)
{
while (boton_off ^boton_on) ;
salida_led=! boton_off&&boton_on;
while (boton _on) ;
while (boton_off) ;
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Encender y apagarlo con distinto botom
« Respuesta #7 en: 27 de Abril de 2018, 08:41:45 »
Podes reemplazar:

Código: C
  1. while (boton _on) ;
  2. while (boton_off) ;

Por:

Código: C
  1. while (boton _on || boton_off) ;

Pero no la compliquemos y la hagamos bloqueante.. simplifiquemos mas siguiendo tu metodo:

Código: C
  1. while(1)
  2. {
  3.   if(boton_off ^ boton_on)
  4.     salida_led=boton_on;
  5. }

Suponiendo que no cambie el estado del boton luego de pasar el IF, al if pasa con 2 opciones, uno tienen que ser 0 y el otro 1. O sea 01 y 10, Y justamente tiene el estado correcto del boton_on, asi que no es necesario poner boton_off. Pero para estar bien seguros nunca deberia suceder lo de la "posibilidad" que cambie el estado mientras pasa, asi que deberia usarse una variable para cargar boton_off y boton_on y usar esta.

Código: C
  1. while(1)
  2. {
  3.   char a = boton_off ^ boton_on;
  4.   if(a)
  5.     salida_led=a;
  6. }
« Última modificación: 27 de Abril de 2018, 08:45:02 por KILLERJC »

Desconectado electroipod

  • PIC16
  • ***
  • Mensajes: 166
Re:Encender y apagarlo con distinto botom
« Respuesta #8 en: 27 de Abril de 2018, 10:42:12 »
Podes reemplazar:

Código: C
  1. while (boton _on) ;
  2. while (boton_off) ;

Por:

Código: C
  1. while (boton _on || boton_off) ;

Pero no la compliquemos y la hagamos bloqueante.. simplifiquemos mas siguiendo tu metodo:

Código: C
  1. while(1)
  2. {
  3.   if(boton_off ^ boton_on)
  4.     salida_led=boton_on;
  5. }

Suponiendo que no cambie el estado del boton luego de pasar el IF, al if pasa con 2 opciones, uno tienen que ser 0 y el otro 1. O sea 01 y 10, Y justamente tiene el estado correcto del boton_on, asi que no es necesario poner boton_off. Pero para estar bien seguros nunca deberia suceder lo de la "posibilidad" que cambie el estado mientras pasa, asi que deberia usarse una variable para cargar boton_off y boton_on y usar esta.

Código: C
  1. while(1)
  2. {
  3.   char a = boton_off ^ boton_on;
  4.   if(a)
  5.     salida_led=a;
  6. }
Pero el led nunca se va apagar, revisa tu código.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Encender y apagarlo con distinto botom
« Respuesta #9 en: 27 de Abril de 2018, 10:56:18 »
Tenes razón, en mi ultimo código nunca se va a apagar. Pero este funcionaria (jugando a la ruleta rusa  :D ):

Código: C
  1. while(1)
  2. {
  3.   if(boton_off ^ boton_on)
  4.     salida_led=boton_on;
  5. }

Todas las soluciones para incorporar alguna especie de protección ante el cambio de la entrada en ese punto que se me ocurren ahora ya vamos a definir 2 o mas variables.. y dejan de ser tan cortitas asi  :(
Me refiero a sin hacerlas bloqueante, sino agregandole un while al final lo soluciona. Del mismo tipo que tenes vos, es decir:

Código: C
  1. while(1)
  2. {
  3.   if(boton_off ^ boton_on)
  4.     salida_led=boton_on;
  5.   while( boton_on || boton_off );
  6. }

O de ultima y creo que solucion final ahora si, entonces no hay mas problemas con que cambie boton_on en medio de la situacion (aunque para mi lo correcto es que se tomen ambos botones y leerse juntos):

Código: C
  1. while(1)
  2. {
  3.   bool a = boton_on;
  4.   if(boton_off ^ a)
  5.     salida_led=a;
  6. }

PD: Esto es puramente por diversion jeje
PD2: Espero no haberme equivocado de nuevo
« Última modificación: 27 de Abril de 2018, 11:08:05 por KILLERJC »


 

anything