Autor Tema: while - IF - dentro de funciones - Proteus  (Leído 5173 veces)

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

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
while - IF - dentro de funciones - Proteus
« en: 01 de Septiembre de 2009, 09:50:44 »
hola amigos

Tengo un sencillo programa

//////////////////////////////funciones.c//////////////////////////////////////
Código: CSS
  1. int pulsadores(int pulsa01,int pulsa02,int pulsa03)
  2. {
  3. int desplaza=1;
  4. int hms;
  5.  
  6.   while(desplaza==1)
  7.     {
  8.      if(pulsa01==1)
  9.       {
  10.        delay_ms(300);
  11.        if(pulsa01==1)
  12.         {
  13.          printf("entro");
  14.          hms=hms+1;
  15.          if(hms>3){hms=0;}
  16.         }
  17.       }
  18.    lcd_gotoxy(1,1);  
  19.    printf(lcd_putc,"%02d",hms);
  20.    
  21.    if((pulsa02==1) | ( pulsa03==1))
  22.    {desplaza=0;}
  23.    
  24.     }
  25.    return(hms);
  26. }

el cual es llamado desde una función principal



////////////////////////////////Programa principal////////////////////////7
Código: CSS
  1. ...
  2. #include pulsa01 input(PIN_A0)
  3. #include pulsa02 input(PIN_A1)
  4. #include pulsa03 input(PIN_A2)
  5. ...
  6. #include <cabecera.c>
  7. #include <funciones.c>
  8.  
  9. ...
  10. ..
  11.  
  12. main()
  13. {
  14. ..
  15. .
  16. pulsadores(pulsa01,pulsa02,pulsa03);
  17.  
  18. ..
  19. .
  20. }

/////////////////////////////bichero de cabeceras
Código: CSS
  1. extern int pulsadores(int pulsa01,int pulsa02,int pulsa03)

Lo que intento es lo siguiente;
en vez de hacer un bucle en la función principal y llamar desde ahi a la otra función, cosa que ya he probado y funciona, he intentado meter el bucle dentro de función a llamar, de forma que cuando llamas a la función con este bucle permanece dentro de la función hasta que la condicion que evalua no se cumpla, entonces saldrá de la función.

Dentro de este bucle hay un evaluar tecla pulsada, si se evalua tecla "P1"incrementa digito en  el lcd, basicamante un contador, pero si se pulsa otra tecla sale del bucle y por tanto de la función.

En el programa ,encontre un problema, si comento dentro de la función
la instrución while, y dejo solo el if funciona,

¿cual es el por que? de que no funcione?

Un saludo.

« Última modificación: 08 de Septiembre de 2009, 20:59:10 por pajaro »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: while - IF - dentro de funciones - Proteus
« Respuesta #1 en: 01 de Septiembre de 2009, 22:08:04 »
...
En el programa ,encontre un problema, si comento dentro de la funcion
la instrucion while, y dejo solo el if funciona,

¿cual es el por que? de que no funcione?

...

podrias desglosar un poco mas esta parte, la verdad no entendí  :(

 
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: while - IF - dentro de funciones - Proteus
« Respuesta #2 en: 02 de Septiembre de 2009, 08:08:30 »
Hola PalitroqueZ

////////////////////////////// funciones.c //////////////////////////////////////
Código: CSS
  1. int pulsadores(int pulsa01,int pulsa02,int pulsa03)
  2. {
  3. //int desplaza=1;
  4. int hms;
  5.  
  6. // while(desplaza==1)
  7.  //  {
  8.      if(pulsa01==1)
  9.       {
  10.        delay_ms(300);
  11.        if(pulsa01==1)
  12.         {
  13.          printf("entro");
  14.          hms=hms+1;
  15.          if(hms>3){hms=0;}
  16.         }
  17.       }
  18.    lcd_gotoxy(1,1);  
  19.    printf(lcd_putc,"%02d",hms);
  20.    
  21.    if((pulsa02==1) | ( pulsa03==1))
  22.    {desplaza=0;}
  23.    
  24.    // }
  25.    return(hms);
  26. }

La función anterior (pulsadores), es llamada desde una función principal.



//////////////////////////////// Programa principal ////////////////////////
Código: CSS
  1. ...
  2. ...
  3.  
  4. #include <funciones.c>
  5.  
  6. ...
  7. ..
  8. int desplaza=1;
  9.  
  10. main()
  11. {
  12. ..
  13. .
  14. while(desplaza==1)
  15. {
  16. pulsadores(input(PIN_A0),input(PIN_A1),input(PIN_A2));
  17.  
  18. }
  19.  
  20. ..
  21. .
  22. }


Si coloco el bucle en el programa principal y quito el bucle de la función pulsadores(comentando ese trozo de la función pulsadores), si que funciona.

Este código en igual que el primer post, la diferencia esta, en que en el primer post, el bucle con while lo puse dentro de la función pulsadores, que es la que llamamos desde la función principal.

Pero en este segundo caso, coloque el bucle dentro del programa principal dejando solo las funciones "IF" en la función pulsadores.

Perdona si me explique incorrectamente, gracias por tu interes y tu ayuda.
Un saludo.
« Última modificación: 02 de Septiembre de 2009, 09:44:58 por pajaro »

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: while - IF - dentro de funciones - Proteus
« Respuesta #3 en: 02 de Septiembre de 2009, 20:32:05 »
en base a ese ejemplo, da igual donde pongas el while(desplaza) siempre y cuando declares desplaza=1 como global. colocarlo 2 veces es redundar.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: while - IF - dentro de funciones - Proteus
« Respuesta #4 en: 03 de Septiembre de 2009, 10:36:30 »
Hola palitroqueZ

Lo que intento es crear un bucle dentro de una función llamada, evitando su continua llamada.
Como si se tratasen de casitas, cada función es una casita o un cuarto, imagínate Matrix.

Hola estoy dentro del programa principal, voy a llamar a una función.
Hola ya estoy dentro de la función llamada.
Hola voy a crear un bucle para que repita el proceso de verificar pulsadores, pero sin salir de esta función.
Hola ya estoy dentro del bucle, para salir de la función, deberá salir primero del bucle, pero como lo hago.
El bucle evalúa si se presiona 3 teclas una de ellas, será la que le haga salir del bucle y por lo tanto nos devuelva al programa principal.


Con ello evito salir y entrar de un lado a otro, reduciendo el proceso.


Un saludo.


« Última modificación: 03 de Septiembre de 2009, 10:40:42 por pajaro »

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: while - IF - dentro de funciones - Proteus
« Respuesta #5 en: 03 de Septiembre de 2009, 18:46:48 »
void main()
{
     comprobar();
}


void comprobar()
{
     int salida=0x00;                                         //la variable salida es la que hara repetir o salir del bucle
     while(salida==0x00){                                 // mientras que la variable sea 0x00 se repetira el bucle
           if(input(PIN_B0)) salida = 0x01;            //primera opcion
           if(input(PIN_B1)) salida = 0x02;            //segunda opcion
           if(input(PIN_B2)) salida = 0x03;            //tercera opcio
      }
}


a esto te refieres?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: while - IF - dentro de funciones - Proteus
« Respuesta #6 en: 03 de Septiembre de 2009, 22:11:20 »
si lo que quieres es salir de while, una vez que se cumpla lo que quieres de adentro, (ej: presionaste el botón1) preguntas por ese pin y usas Break;

tomando el ejemplo de ppyote (pido prestado el ejemplo de ppyote) :mrgreen:

Código: C
  1. ...
  2.  
  3.  while(1){
  4.            if(input(PIN_B0)) break;            //primera opcion
  5.            if(input(PIN_B1)) break;          //segunda opcion
  6.            if(input(PIN_B2)) break;            //tercera opcio
  7.       }
  8. ...



La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: while - IF - dentro de funciones - Proteus
« Respuesta #7 en: 04 de Septiembre de 2009, 19:00:17 »
tomando el ejemplo de ppyote (pido prestado el ejemplo de ppyote) :mrgreen:


XD jejejeje no pasa nada yo seguramente lo pillaria de otro usuario, incluso a lo mejor de ti jejejejje

Como ha dicho PalitroqueZ asi se hace para acabar con un bucle, yo puese el ejemplo de la variable  salida,por si acaso se necesitaba saber el pulsador que habia accionado...
solo fue por eso...
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: while - IF - dentro de funciones - Proteus
« Respuesta #8 en: 06 de Septiembre de 2009, 09:38:16 »
Hola amigos

Probare sus ejemplos, pero todo esto lo toy haciendo con funciones que devuelven y recogen parametros,
y al parecer tienen "algunas" diferencias de hacerlo sobre un mismo codigo fuente..y el problemilla añadido de variables
locales y globales,...

Pero me agrada, y es de agradecer su ayuda y cooperación en la resolución del problema, muchas gracias compañeros.

Un cordial saludo.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: while - IF - dentro de funciones - Proteus
« Respuesta #9 en: 08 de Septiembre de 2009, 14:33:12 »
hola amigos

ya lo probe los while dentro de una función que posteriormente se llaman desde una funcion principal,
 no me funcionan, y si dentro esta la verificacion de pulsadores, peor aun, y no se por que, no funcionan?

Un saludo.

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: while - IF - dentro de funciones - Proteus
« Respuesta #10 en: 08 de Septiembre de 2009, 19:08:15 »
por que no pones el codigo entero para ver lo que puede fallar?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: while - IF - dentro de funciones - Proteus
« Respuesta #11 en: 08 de Septiembre de 2009, 20:49:38 »
hola ppyote

En el principio del hilo esta el codigo.

Falta decir que en mi codigo main y la funcion estan en ficheros diferentes.

Un saludo

« Última modificación: 08 de Septiembre de 2009, 20:54:56 por pajaro »