Diferencia entre revisiones de «Bounce»
De ArduWiki
(→Ejemplo) |
(→Ejemplo 3) |
||
Línea 112: | Línea 112: | ||
Serial.println(millis()-tiempo); | Serial.println(millis()-tiempo); | ||
tiempo = millis(); | tiempo = millis(); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Ejemplo 4 == | ||
+ | Muestra cuando el boton el presionado y soltado. Ademas si lo mantienes presionado te da un mensaje cada medio segundo. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | #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"); | ||
+ | } | ||
} | } | ||
} | } |
Revisión del 00:55 3 may 2019
Contenido
Descripción
La librería Bounce2.h de Thomas Frefericks...
Nota: Para saber mas del efecto Rebote.
Placas aplicables
Sintaxis
Métodos
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