Autor Tema: AYUDA - Botones con delay (PICF1684A) CCS C Compiler  (Leído 2311 veces)

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

Desconectado Atrehus

  • PIC10
  • *
  • Mensajes: 2
AYUDA - Botones con delay (PICF1684A) CCS C Compiler
« en: 11 de Abril de 2021, 01:25:47 »
Hola, soy nuevo en el foro y en el tema de la programación, me gustaría saber si pueden ayudarme con el siguiente código:

Código: [Seleccionar]
       while(true){
            if(input(43)==1){
               output_bit(48,1);
            }
            if(input(44)==0){
               output_bit(48,0);
            }
            if(input(43)==1 && input(43)==delay_ms(1500)){
               goto SALIDA;
            }
            if(input(44)==0 && input(44)==delay_ms(1500)){
               goto SALIDA;
            }
        }

La idea es que al pulsar algún botón el led se encienda y con otro  se apague. Y que al presionar alguno de los dos botones por cierto tiempo pueda ejecutar la acción "goto" para salir de un bucle (esta es la única parte que me da problemas de todo mi código). Agradecería muchísimo su ayuda.

Los botones tienen asignado el valor 43 y 44 en mi código, y el led el valor 48 :)
« Última modificación: 11 de Abril de 2021, 01:36:01 por Atrehus »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:AYUDA - Botones con delay (PICF1684A) CCS C Compiler
« Respuesta #1 en: 11 de Abril de 2021, 11:38:17 »
- No se que hace SALIDA. No se a dodne va, y siempre necesitas mantenerte DENTRO del while TRUE, ya que deberia ser tu unico WHILE con esa condicion.
- Usualmente usar un goto a no ser casos puntuales en C es un NO! NO!
- ¿Por que usar 43,44,48 cuando tranquilamente podes usar PIN_A1, PIN_B0, etc
- Podes usar output_high(PIN_B1) y output_low(PIN_B1) para encender y apagar.
- El delay en una comparacion, a pesar que se ejecuta no estaria cumpliendo el cometido o lo que vos esperas que haga.
Ya que la función delay_ms puede retornar cualquier cosa, en el manual esta especificado como "indefinido". Por lo tanto no es de fiarse. Y estoy mas que seguro es un error de lo que quisite hacer.

Citar
La idea es que al pulsar algún botón el led se encienda y con otro  se apague. Y que al presionar alguno de los dos botones por cierto tiempo pueda ejecutar la acción "goto" para salir de un bucle (esta es la única parte que me da problemas de todo mi código). Agradecería muchísimo su ayuda.

El delay_ms hace que el micro se encierre ejecutando instrucciones sin sentido. En realidad todo delay hace eso... Lo que podes hacer es un delay cortito, y contar cuantes veces estuvo presionado. Sigo usando ese while a pesar que me llama la atencion, pero supongo que no es la unica parte del codigo.

Código: C
  1. while(true){
  2.  
  3.             if(input(PIN_A0)==1){
  4.                output_high(PIN_B0);
  5.                contador++;
  6.             } else if(input(PIN_A1)==0){
  7.                output_LOW(PIN_B0);
  8.               contador++;
  9.             } else {
  10.                contador=0;   // Reseteo porque se soltaron ambos
  11.             }
  12.             delay_ms(10);
  13.             if(contador == 150){    //  150 * 10ms = 1500ms
  14.               break;
  15.             }
  16.         }

Mientras esta presionado... Aumenta "contador". Si se suelta, se reinicia contador a 0. Nunca ejecutandose el break que es quien te va a sacar del while.

Desconectado Atrehus

  • PIC10
  • *
  • Mensajes: 2
Re:AYUDA - Botones con delay (PICF1684A) CCS C Compiler
« Respuesta #2 en: 11 de Abril de 2021, 17:45:11 »
Citar
El delay_ms hace que el micro se encierre ejecutando instrucciones sin sentido. En realidad todo delay hace eso... Lo que podes hacer es un delay cortito, y contar cuantas veces estuvo presionado. Sigo usando ese while a pesar que me llama la atención, pero supongo que no es la única parte del código.

KILLERJC muchísimas gracias por tu tiempo y ayuda, tus consejos y tu código me sirvieron muchísimo para lograr terminar mi código c:


 

anything