Comportamiento peculiar de los botones que muestran el código al usar MSP430

0

He creado un programa simple en MSP430 usando Energia para contar los pulsos del botón de 0 a 9 y mostrarlos en una pantalla de siete segmentos.

El código que incluye las definiciones de los pines, el estado de los pines (establecido como Entrada o Salida) y la rutina de visualización trivial se omite, ya que sería demasiado largo. Si es necesario, dímelo y editaré mi pregunta.

El código esencial es:

void loop()

{

 ButtonState=digitalRead(Button);

    if (ButtonState!=LastButtonState)
    {
        if (ButtonState==HIGH)
        {
            ButtonCounter++;
        }

    }

    LastButtonState=ButtonState;


   if(ButtonCounter==0)
   {

       Zero();
   }
   else if(ButtonCounter==1)
   {
       ...
   }

No pude hacer que la pantalla comenzara desde 0 al principio cuando no había presionado el botón, pero siempre empezaba a mostrar 1 hasta que cambié:

if (ButtonState==HIGH)

a

if (ButtonState==LOW)

¡Y está funcionando perfectamente! Pero me parece muy raro.

¿Por qué sucede esto? ¿Cuando no estoy presionando el botón no es su estado BAJO? Como comienza desde 1, significa que su estado cuando no se presiona es ALTO. No debería ser el correcto:

if (ButtonState==HIGH)

para chech si se presiona el botón y luego aumentar el contador? Con LOW como la comparación, entonces se comprueba cuando no se presiona el botón, ¿por qué funciona perfectamente?

El esquema del botón se puede encontrar aquí .

    
pregunta Adam

2 respuestas

1

Está utilizando una resistencia de pull-up, en un botón momentáneo normalmente Normally-Open . Un pull-up es una resistencia con una resistencia bastante débil ligada a VCC, utilizada para hacer el estado predeterminado del pin de entrada a un nivel alto. Cuando se presiona el botón, la conexión directa a tierra lleva el pin de entrada a Nivel bajo.

Cuando usaste if (ButtonState==HIGH) , el código leería automáticamente el estado físico predeterminado del pin de entrada como Alto debido al pull-up y el botón no presionado, y agregaría 1 al contador.

Su código funcionó exactamente como debería.

Si quieres que funcione de otra manera, moverías la resistencia hacia el lado de tierra del botón, lo que lo convierte en un menú desplegable en lugar de en la configuración de Pull-Up.

    
respondido por el Passerby
1
  

¿Por qué sucede esto? ¿Cuando no estoy presionando el botón no es su estado BAJO?

Creo que hay alguna documentación incorrecta. Si siguió el esquema del enlace que proporcionó, entonces cuando no se presiona el botón, el estado sería ALTO.

Laexplicacióndelcódigodice

  

SielestadodelbotónesALTO,significaquesepresionóelbotónpulsador,delocontrarionoloestá.CuandoelestadodelbotónesALTO,elLEDverdeseenciendeenconsecuencia,delocontrarioseapaga.

Peroestenoeselcaso.Elhardwaredicequecuandosepresionaelbotón,elestadodelbotónseráBAJO.

Loquehicieronfuecopiarel tutorial de arduino button y simplemente lo modifiqué ligeramente para usarlo con el tablero Energia. Si miras el esquema de Arduino, está más en línea con lo que esperas. Así que la descripción de su código es incorrecta.

Si usas el esquema de Energia, entonces necesitas usar LOW y si estás usando el esquema de Arduino, necesitas usar HIGH.

    
respondido por el efox29

Lea otras preguntas en las etiquetas