Detección de pulsación con un micro
Hola a todos,
Se detectar una pulsacion de un boton con un micro, pero necesito detectar una pulsacion de dos teclas a la vez.
Esta es la parte de mi programa:
if ( (PORTA & B4) == 0 ) // Pulsar TECLA4
{
while ( (PORTA & B4) == 0 );
TEC = TECLA4;
}
Esta deteccion simple la hago bien, el problema es la siguiente:
// Pulsar TECLA4 y TECLA5
if ( (PORTB & B5) == 0 && (PORTB & B4) == 0 )
{
while ( ((PORTB & B5) == 0) && ((PORTB & B4) == 0) );
TEC = TEC8;
}
Esta sería la detección lógica, pero en realidad siempre vas a detectar una de las dos pulsaciones antes que la otra con lo que siempre entrará antes en otro bucle que en el de la pulsacion doble.
¿Cómo puedo hacer para detectar esta doble pulsación?
Se detectar una pulsacion de un boton con un micro, pero necesito detectar una pulsacion de dos teclas a la vez.
Esta es la parte de mi programa:
if ( (PORTA & B4) == 0 ) // Pulsar TECLA4
{
while ( (PORTA & B4) == 0 );
TEC = TECLA4;
}
Esta deteccion simple la hago bien, el problema es la siguiente:
// Pulsar TECLA4 y TECLA5
if ( (PORTB & B5) == 0 && (PORTB & B4) == 0 )
{
while ( ((PORTB & B5) == 0) && ((PORTB & B4) == 0) );
TEC = TEC8;
}
Esta sería la detección lógica, pero en realidad siempre vas a detectar una de las dos pulsaciones antes que la otra con lo que siempre entrará antes en otro bucle que en el de la pulsacion doble.
¿Cómo puedo hacer para detectar esta doble pulsación?
Es mejor hacer un if para detectar la condicion de doble pulsacion del puerto b (que es de un PIC supongo ;-) antes que culquier otra y encadenar las otras con un else if asi no se ejecutan una despues de la otra (si B4 y B5 estan pulsadas juntas es ovio que si verifico que B4 esta pulsada entrara en el primer if y en el segundo si no lo encadeno con un else... bueno, tal vez no sea tan ovio... perdon)
Particularmente te recomiendo que verifiques los bits particularmente (si el compilador C lo permite) por ejempo
if (RB4==1 && RB5==1)
...dondicion de las dos teclas...
else if (RB4==1)
...condicion de la tecla de RB4....
else if (RB5==1)
...condicion de la tecla de RB5....
else
...Bueno, supongo que esto no importa... ;-)
Si el compilador C no te permite acceder a los bits particulares de los puertos (deveria porque el PIC puede manejar datos a nivel de bits) lo haces con la condicion de enmascaramiento que usas normalmente...
Suerte.
Particularmente te recomiendo que verifiques los bits particularmente (si el compilador C lo permite) por ejempo
if (RB4==1 && RB5==1)
...dondicion de las dos teclas...
else if (RB4==1)
...condicion de la tecla de RB4....
else if (RB5==1)
...condicion de la tecla de RB5....
else
...Bueno, supongo que esto no importa... ;-)
Si el compilador C no te permite acceder a los bits particulares de los puertos (deveria porque el PIC puede manejar datos a nivel de bits) lo haces con la condicion de enmascaramiento que usas normalmente...
Suerte.
