fbpixel
Etiquetas: , ,

Uno de los ejemplos más comunes al aprender a programar con Arduino es la administración de un botón pulsador. De hecho, una de las funciones más útiles para desarrollar es poder interactuar con la placa Arduino. La interfaz más minimalista es la entrada de un botón y la salida del monitor en serie. Además, la funcionalidad que se puede desarrollar en un botón se puede aplicar a muchos sensores (interruptor, sensor magnético, RFID, etc.). Veremos aquí algunas de estas características.

Hardware

  • Computadora
  • Arduino UNO
  • Cable USB para conectar el Arduino a la computadora
  • Pulsador

Diagrama de conexión

push-button-arduino_bb Gestión de un pulsador con Arduino

Hay diferentes formas de conectar un botón a la placa Arduino. La forma más fácil es conectarlo entre tierra y una entrada analógica en el Arduino. Para que el botón se detecte correctamente, agregaremos una resistencia pullup disponible por el código. Por lo tanto, el estado será alto (1024) cuando se suelte el botón (0) y bajo cuando se presione el botón.

Codigo basico

En este ejemplo, detectaremos si el botón está presionado o no.

//Parameters 
const int btnPin  = A0; 
 
//Variables 
int btnVal  = 0; 

void setup(){ 
//Init Serial USB 
Serial.begin(9600); 
Serial.println(F("Initialize System")); 
//Init btn 
pinMode(btnPin,INPUT_PULLUP); 
} 

void loop() {
  ////Read pushbutton 
  btnVal=analogRead(btnPin); 
  Serial.print(btnVal); 
  Serial.print(F("-->")); 
  if(btnVal<200){ 
    Serial.println(F("Button is pressed")); 
  }else{ 
    Serial.println(F("Button is released")); 
  } 
  delay(100);
}

El código leerá constantemente la entrada analógica y escribirá «botón presionado» o «liberado» que no es muy limpio o fácil de depurar.

Código de detección del estado del botón

Una forma de mejorar este código es agregar una variable que registre el estado del botón. Esto permite que el resultado se muestre solo una vez cuando el botón ha cambiado de estado.

//Parameters 
const int btnPin  = A0; 
 
//Variables 
int btnVal  = 0; 
bool btnState  = false; 
bool oldbtnState  = false; 
 
void setup(){ 
//Init Serial USB 
Serial.begin(9600); 
Serial.println(F("Initialize System")); 
//Init btn 
pinMode(btnPin,INPUT_PULLUP); 
} 
 
void loop(){ 
testPushBtn(); 
} 
 
void testPushBtn( ){/* function testPushBtn */ 
////Read pushbutton 
btnVal=analogRead(btnPin); 
if(btnVal<200){ 
  btnState=true; 
  if(oldbtnState!=btnState) Serial.print(btnVal);Serial.print(F("-->"));Serial.println(F("Button was pressed")); 
}else{ 
  btnState=false; 
  if(oldbtnState!=btnState) Serial.print(btnVal);Serial.print(F("-->"));Serial.println(F("Button was released")); 
} 
oldbtnState=btnState; 
} 

Código para transformar un botón en un interruptor

Una vez que el estado del botón está en la memoria, es fácil transformar el botón en un interruptor. En este ejemplo, el LED se ilumina cuando se presiona el botón y se apaga cuando se presiona nuevamente el botón.

//Parameters
const int btnPin  = A0;
const int ledPin = 13;

//Variables
int btnVal  = 0;
bool btnState  = false;
bool oldbtnState  = false;
bool ledState  = LOW;


void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init btn
  pinMode(btnPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  testPushBtn();
}

void testPushBtn( ) { /* function testPushBtn */
  ////Read pushbutton
  btnVal = analogRead(btnPin);
  if (btnVal < 200) {
    btnState = true;
  } else {
    btnState = false;
  }
  
  if (oldbtnState != btnState) {
    if(btnState==true){
      Serial.print(F("Button was pressed")); Serial.print(F("-->")); Serial.print(F("LED "));
      ledState = !ledState;
      Serial.println(ledState);
      digitalWrite(ledPin, ledState);
    }
  }

  oldbtnState = btnState;
}

Mezcle y modifique estos ejemplos para obtener la funcionalidad que desea. También es necesario en algunos casos agregar funciones de promedio deslizante o antirrebote.

Para una gestión más avanzada del pulsador, puede utilizar una interrupción para detectar su estado.

Aplicación

  • Crea una interfaz minimalista para tu proyecto

Fuentes