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í .