Bounce

De ArduWiki
Revisión del 19:30 4 may 2019 de Kike GL (Discusión | contribuciones) (Parametros)

Saltar a: navegación, buscar

Descripción

La librería Bounce2.h de Thomas Frefericks que esta en el gestos de librerias del IDE.

Nota: Para saber mas del efecto Rebote.


Placas aplicables

Sintaxis

#include <Bounce2.h>
Bounce rebote = Bounce(); 
rebote.attach(pin);
rebote.interval(pausa);

Parametros

pin
pin del pulsador.
pausa
Valor de retardo.

Métodos

Metodos disponibles en libreria Bounce2.h
Método Descripción
Bounce(pin, pausa) Instancia el objeto
attach(pin) Asigna el pin
interval(pausa) Asigna el tiempo en milisegundos
update() Debido a que Bounce no usa interrupciones, debe "actualizar" el objeto antes de leer su valor y debe hacerlo con la mayor frecuencia posible (eso significa incluirlo en su bucle ()). El método update() actualiza el objeto y devuelve verdadero (1) si el estado del pin cambia. Falso (0) si no. Solo llame a update() una vez por loop().
read() Lee el estado del pin luego de update().
fell() Devuelve true si las transiciones de señal del pin es de HIGH a LOW (falling).
rose() Devuelve true si las transiciones de señal del pin es de LOW a HIGH (rissing).

Comentarios

Advertencias

Ejemplo 1

El ejemplo basico, un solo pulsador en pin 2.

#include <Bounce2.h>
#define PIN 2
#define LED 13
Bounce rebote = Bounce();   //Instancia objeto

void setup() {
   pinMode(PIN, INPUT_PULLUP);
   rebote.attach(PIN);      //Cuando ya esta definido el pin
   rebote.interval(5);
   pinMode(LED, OUTPUT);
}

void loop() {
   rebote.update();          //Actualiza
   bool valor = rebote.read();
   if (valor) {
      digitalWrite(LED, LOW);    //Apaga LED
   }else{
      digitalWrite(LED, HIGH);   //Prende LED
   }
}

Ejemplo 2

En este ejemplo configuramos 8 pines.

#include <Bounce2.h>
#define LED 13
#define NUM 8
const byte PULSADOR[NUM] = {2, 3, 4, 5, 6, 7, 8, 9};
Bounce * boton = new Bounce[NUM];              //Instancia todos los pines

void setup() {
   for (byte i=0; i<NUM; i++) {
      boton[i].attach(PULSADOR[i], INPUT_PULLUP);
      boton[i].interval(25);
   }
   pinMode(LED, OUTPUT);
}

void loop() {
   for (byte i=0; i<NUM; i++)  {
      boton[i].update();                         //Actualiza
      if (boton[i].fell()) {
         digitalWrite(LED, !digitalRead(LED));   //Conmuta LED
      }
   }
}

Ejemplo 3

Muestra los milisegundos entre dos pulsaciones.

#include <Bounce2.h>

#define BOTON 2
Bounce rebote = Bounce(); 
unsigned long tiempo = 0;

void setup() {
  Serial.begin(57600); 
  pinMode(BOTON, INPUT_PULLUP);
  rebote.attach(BOTON);
  rebote.interval(5);  
}

void loop() { 
   rebote.update();
   if (rebote.fell()) {;
      Serial.println(millis()-tiempo);
      tiempo = millis();  
   }
}

Ejemplo 4

Muestra cuando el boton el presionado y soltado. Ademas si lo mantienes presionado te da un mensaje cada medio segundo.

#include <Bounce2.h>

#define BOTON 2
#define LED 13

Bounce rebote = Bounce(); 
unsigned long tiempo = 0;
bool valor = false;

void setup() { 
  Serial.begin(57600);
  pinMode(BOTON, INPUT_PULLUP);
  rebote.attach(BOTON);
  rebote.interval(5); 
  pinMode(LED, OUTPUT);
}

void loop() {
   if (rebote.update()) {
      if (rebote.read()){
         digitalWrite(LED, LOW); 
         Serial.println("Boton soltado (HIGH)");  
         valor = false;
      }else{
         digitalWrite(LED, HIGH);
         Serial.println("Boton presionado (LOW)");
         tiempo = millis();
         valor = true;
      }
   }
   if (valor) {
      if (millis()-tiempo >= 500) {
         tiempo = millis();
         digitalWrite(LED, LOW);
         Serial.println("Boton reactivado");
      }
   }
}

Vea también


Referencias externas