TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: antoniojdobarro en 09 de Febrero de 2011, 12:27:24

Título: kbhit()
Publicado por: antoniojdobarro en 09 de Febrero de 2011, 12:27:24
Esto es lo que hace la entrada de un pic, conectado a un Max232, ya que los datos vienen del pc.

void main(void) {

do{
if (kbhit(){                // Si hay una pulsación de tecla
     avance();
    ??????????            // Aquí debería volver kbhit() a FALSE
}

else {                      //Si no hay pulsación de tecla
detencion();
}

}

while (x<10);           // Para que esté leyendo siempre las entradas

}

El problema viene que una vez que recibe una pulsación kbhit() se queda siempre a TRUE luego siempre cumple la condición y corre la subrutina avance.

Donde tengo ???????? debería resetear kbhit() a FALSE y correr la subrutina detencion hasta que nuevamente se pulse una tecla.

Como puedo resetear kbhit(), o devolverlo a su estado inicial?



Título: Re: kbhit()
Publicado por: MGLSOFT en 09 de Febrero de 2011, 12:31:24
Al detectar Kbhit() hay que leer el buffer del puerto serie, ya que no hay otra forma que entre un nuevo caracter que no sea limpiando ese buffer. :mrgreen: :mrgreen:
Título: Re: kbhit()
Publicado por: antoniojdobarro en 09 de Febrero de 2011, 13:26:15
    if (kbhit() && getchar()=='2'){           
      avance();}


Esta orden significa que si hay una tecla pulsada y la tecla es 2 avanza?
Título: Re: kbhit()
Publicado por: MGLSOFT en 09 de Febrero de 2011, 15:06:12
No se si getchar() esta bien utilizado así (deberías ver mas en el help) pero si, esa es la idea.
Título: Re: kbhit()
Publicado por: pajaro en 09 de Febrero de 2011, 19:59:34
hola amigo

en esta web hay buen material de librerias y funciones de C.
Ponle un ojo.
 ir a enlace  (http://c.conclase.net/borland/?borlandfun=kbhit#inicio).

Un saludo.