Autor Tema: Lectura de teclado  (Leído 5449 veces)

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

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Lectura de teclado
« Respuesta #15 en: 08 de Febrero de 2011, 22:42:41 »
Bien, copio la estructura:

Código: C++
  1. void main(void) {
  2.  
  3. do{  //hacer..
  4.     if (kbhit()){  // si pulso tecla
  5.  
  6.          char entrada;       //declara variable
  7.          entrada=getchar();  //capturas el caracter y lo guardas en variable
  8.  
  9.            // aqui deberia de verificar o filtar con un while que quieres que pase por el if.
  10.  
  11.            if (entrada=='2') avance();
  12.  
  13.            else if (entrada=='5') retroceso();
  14.  
  15.      }//fin de if
  16.      else detencion(); //haces la detencion pero seguiras dentro del  bucle si no lo rompes
  17.    }
  18. while(x<10);
  19. }
El problema es que en virtual console de proteus una vez que pulso 2 o 5, luego la única manera de detenerlo es pulsando una tecla que no sea una de esas dos. Es como si kbhit no funcionase, ya que si fuese cero debería irse directamente a detención y solamente entrar en la sentencia if si hubiese algún botón presionado.

Otra cosa:

le dice :
hacer cosa mietras x<10.
   despues dice si pulsas tecla, carga la tecla en varible
   si esa tecla es 2 avanza
   si esa tecla es 5 retrocede
si no es 2 o 5 detines

//si no pulsaras tecla se te detendra de inmediato(no se si te da tiempo a pulsar tecla)  y se quedaria en el blucle
 que sino incrementas la x, sera infinito nunca saldra del bucle y si detencion no te saca del bucle sera infinito tambien-------


Desconectado antoniojdobarro

  • PIC12
  • **
  • Mensajes: 84
Re: Lectura de teclado
« Respuesta #16 en: 09 de Febrero de 2011, 04:18:31 »
No incremento la x ya que no quiero salir nunca del bucle, quiero que esté atento a las pulsaciones.

El problema es que kbhit() una vez que se pulsa tiene valor -1 luego nunca más sale del if.

Luego el problema es como resetear kbhit()

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Lectura de teclado
« Respuesta #17 en: 09 de Febrero de 2011, 09:16:28 »
  Se supone que sólo entraría en el if si kbhit() fuera 1 o TRUE pero con -1 no debería entrar. Ya que no se cumpliría con la condición " kbhit() verdadero "

  Si nunca querés salir del loop conviene escribirlo como

Código: C
  1. do
  2. {
  3. ...
  4. ...
  5. ...
  6. }
  7. while (TRUE);

  Eso sería un loop infinito y no presta lugar a confusiones.

  Podés buscar en CCS el .h  del PIC que estés utilizando y ver como llama al registro donde se encuentre el bit RCIF. Luego buscar la manera de testear dicho bit en forma manual sin hacer uso de kbhit() para ver que pasa.
  Me parecío haber leído en algunos post que CCS tiene la función bit_test, con ella podrías testear el bit RCIF.

  Sería llegar a poner algo así....

Código: C
  1. while (TRUE)
  2. {
  3.   if (bit_test(PIR1,RCIF) == 1)
  4.   {
  5.     // todo lo que quieras hacer si se pulsa una tecla
  6.   }
  7.   else
  8.   {
  9.     detencion();
  10.   }
  11. }

  Tal vez hay algún bug en el compilador y por ello el fallo
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything