Programación de FRDM-KL25Z utilizando Interrupción

0

Estoy intentando desarrollar un software para FRDM-KL25Z que necesita un botón. Cada vez que se presiona este botón, necesito que la variable "seleccionar" se incremente en 1, así que diseñé la función changeSelection:

void changeSelection() {
   selection = selection + 1;

   if (selection > 3)
     selection = 0;
}

Pero, cuando uso esto en la función principal, aparece el error: "La expresión debe tener el tipo de clase" button.rise (& changeSelection) "". ¿Qué me estoy perdiendo?

InterruptIn button(PTA2);
void main() {
   button.rise(&changeSelection);

   while {
     ...do some stuff...
   }
}

Gracias

    

1 respuesta

0

Mi respuesta se basa en tu comentario en la pregunta. Dado que su objetivo principal es detectar si se presiona un interruptor o no, un algoritmo de ejemplo sería:

ISR:

wait for pin to go low(depends on switch)
 if low,increment a variable
 else,clear the variable

If variable is greater than debounce time for switch(70ms maybe for switches)
 Set,Switch pressed flag


Main:

while(1)
{
 if Switch is pressed
  do something(may be increment "selection" here)
}

Si su interrupción está configurada para activarse cada 1 ms, el indicador de Interrupción presionada se activará cuando se lean al menos 70 valores bajos consecutivos en el pin. Detectar si un pin se presiona o no con una interrupción cada vez que el valor de los cambios de pin puede no ser una buena idea debido al ruido. En su lugar, use una interrupción de temporizador.

Para obtener detalles sobre la sintaxis de su código, sugiero StackOverflow .

    
respondido por el Akshay Immanuel D

Lea otras preguntas en las etiquetas