Tutorial de Arduino botón (4 / 6 paso)

Paso 4: Distinción de corto de Prensas de largo

Longitud del pulso

Muchos dispositivos con pocos controles (por ejemplo digital relojes) pack múltiples funciones por botón.

Es muy útil, ahorrando valioso volumen, pero deben utilizarse con prudencia, de lo contrario el dispositivo puede ser poco intuitivo para usar.

Distinguir corto largo Prensas es medir la longitud del pulso.

El evento ya no se emite al presionar el botón, pero al soltarlo. Esto puede afectar la sensación de capacidad de respuesta. Pero hasta que los dispositivos no-causal pueden adquirirse, no se puede predecir la duración y por lo tanto, debe proceder así.

Este es un evento combinado y manejo de estado: detectar el cambio de estado (un evento) y la duración que el estado resultante es duradero.

Programación

Así que tenemos que introducir otra variable global (button_pressed_counter). Tenga en cuenta también que el evento no tiene un valor de tipo boolean (evento presente o no, como en el paso anterior), pero los tres Estados. Son definidos por una enumeración. (Tuve problemas de definición de un tipo enum; ¿Tema específico de Arduino? Así solía enum para definir constantes).

La primera foto de este paso muestran una pulsación larga y una sincronización de pulsación corta, con un umbral de pulsación larga de 3 periodos de muestreo (que es demasiado corto, pero adaptado al dibujo).

La segunda imagen muestra la salida serial para una pulsación larga seguida de dos cortas pulsaciones.

Pro/contras

Muy bien mejora la funcionalidad de botón (si se usa sabiamente, para asegurar la buena usabilidad). Pero el código comienza a crecer y conseguir contaminada por variables globales... El siguiente paso muestra la variante OO, para escalar.

Código

––––––––––8<––––––––––

 #define BUTTON_PIN 2 // Button #define LONGPRESS_LEN 25 // Min nr of loops for a long press #define DELAY 20 // Delay per loop in ms enum { EV_NONE=0, EV_SHORTPRESS, EV_LONGPRESS }; boolean button_was_pressed; // previous state int button_pressed_counter; // press running duration void setup() { pinMode(BUTTON_PIN, INPUT); digitalWrite(BUTTON_PIN, HIGH); // pull-up Serial.begin(9600); button_was_pressed = false; button_pressed_counter = 0; } int handle_button() { int event; int button_now_pressed = !digitalRead(BUTTON_PIN); // pin low -> pressed if (!button_now_pressed && button_was_pressed) { if (button_pressed_counter < LONGPRESS_LEN) event = EV_SHORTPRESS; else event = EV_LONGPRESS; } else event = EV_NONE; if (button_now_pressed) ++button_pressed_counter; else button_pressed_counter = 0; button_was_pressed = button_now_pressed; return event; } void loop() { // handle button boolean event = handle_button(); // do other things switch (event) { case EV_NONE: Serial.print("."); break; case EV_SHORTPRESS: Serial.print("S"); break; case EV_LONGPRESS: Serial.print("L"); break; } // add newline sometimes static int counter = 0; if ((++counter & 0x3f) == 0) Serial.println(); delay(DELAY); } 

––––––––––>8––––––––––

Artículos Relacionados

Cómo utilizar el Sensor de flujo de agua - Tutorial de Arduino

Cómo utilizar el Sensor de flujo de agua - Tutorial de Arduino

En este tutorial usted aprenderá cómo utilizar un sensor de flujo de agua con una placa Arduino.El sensor de flujo de agua consiste en un cuerpo de válvula de plástico, un rotor de agua y un sensor de efecto hall. Cuando el agua fluye a través del ro
Cómo utilizar el Tutorial de Arduino de sensor de DHT-11

Cómo utilizar el Tutorial de Arduino de sensor de DHT-11

La DHT-11 es una salida digital de humedad relativa y temperatura. Utiliza un sensor de humedad capacitivo y un termistor para medir el aire circundante. Comparado con el DHT22, este sensor es menos precisa, menos precisa y trabaja en un rango menor
Tutorial de Arduino - organizar tus proyectos

Tutorial de Arduino - organizar tus proyectos

si usted ha tenido éxito en algunos proyectos de arduino, Felicidades! Puede ser motivado para asumir un proyecto más amplio.Pero como te tomas en un proyecto más amplio, el protoboard se convierte en messier y messier, como un plato de espagueti (al
Cómo utilizar el Sensor infrarrojo Sharp (GP2Y0A41SK0F) - Tutorial de Arduino

Cómo utilizar el Sensor infrarrojo Sharp (GP2Y0A41SK0F) - Tutorial de Arduino

En este tutorial usaremos el sensor de infrarrojos Sharp (GP2Y0A41SK0F) para medir la distancia de un objeto.Sensores IR trabajar mediante el uso de un sensor de luz específico para detectar un seleccionar longitud de onda de luz en el espectro infra
Tutorial de Arduino Bundle.: Arduino Kit de experimentación:. (ARDX)

Tutorial de Arduino Bundle.: Arduino Kit de experimentación:. (ARDX)

¿Interesado en hacer proyectos aseados con un Arduino pero no está seguro de dónde empezar?Aquí es fácil de seguir guía acerca de cómo conectar y utilizar un conjunto de componentes electrónicos.(shameless plug)¿Interesados en hacer todo?Kits complet
Cómo utilizar el Sensor de Adafruit BMP280 - Tutorial de Arduino

Cómo utilizar el Sensor de Adafruit BMP280 - Tutorial de Arduino

En este tutorial vamos a utilizar el sensor de Adafruit BMP280. Este sensor puede medir la presión barométrica y la temperatura con muy buena precisión. Porque la presión cambia con la altitud podemos también usarlo como un altímetro con una precisió
Cómo: varios botones en el Pin analógico 1 - Tutorial de Arduino

Cómo: varios botones en el Pin analógico 1 - Tutorial de Arduino

La placa de Arduino uno tiene 12 pines de I/O digitales disponible y 6 pines de entrada analógicas, a veces, en proyectos complejos o 'grandes', corremos de pines digitales. En este tutorial usted aprenderá cómo utilizar varios botones en un pin anal
Cómo utilizar los módulos XBee como transmisor y receptor - Tutorial de Arduino

Cómo utilizar los módulos XBee como transmisor y receptor - Tutorial de Arduino

En este tutorial utilizaremos dos módulos xBee (serie 1) con la placa de Arduino uno. Configuraremos a actuar como un transmisor y receptor para controlar el brillo de un LED sin cables mediante un potenciómetro.La pila de xBee - serie 1 - módulos to
Tutorial de Arduino - teclados numéricos

Tutorial de Arduino - teclados numéricos

este es un ejemplo de uno de mis tutoriales de Arduino.Teclados numéricos puede proporcionar una alternativa sencilla para el usuario final para varias interfaces para sus proyectos. O si usted necesita un montón de botones, usted puede ahorrar mucho
Cómo desaparecer un LED - Tutorial de Arduino

Cómo desaparecer un LED - Tutorial de Arduino

En este ejemplo aprenderá a desvanecerse un LED mediante la función analogWrite(). AnalogWrite utiliza modulación de anchura de pulso (PWM), digital pin y apagado muy rápidamente, para crear un efecto de desvanecimiento.Antes de empezar vamos a apren
Tutorial de Arduino Wireless SD Shield

Tutorial de Arduino Wireless SD Shield

como su nombre indica, el escudo de Arduino Wireless SD sirve dos funciones. Ante todo, este escudo permite que fácilmente la interfaz con los módulos de transceptor de Xbee para crear malla de redes y otros dispositivos inalámbricos. En segundo luga
Tutorial de Arduino defusable bomba (cuenta regresiva)

Tutorial de Arduino defusable bomba (cuenta regresiva)

Por qué hice esto.Hay otros tutoriales de hacer relojes de alarma y otras bombas defusable, son realmente buenos. pero se a complicado para mis necesidades. Se trata de una simple bomba de cuenta regresiva y glamur.Así que si usted está buscando un s
Tutorial de Arduino Robot

Tutorial de Arduino Robot

Estaba buscando la base de datos Instructable un tutorial para el Robot oficial de Arduino, pero no he podido encontrar uno! Así que mad este tutorial para ayudar a otros que necesitan poco un poco de ayuda con su nuevo Arduino Robot.Paso 1: Configur
Cómo controlar una tira de LED RGB - Tutorial de Arduino

Cómo controlar una tira de LED RGB - Tutorial de Arduino

En este tutorial vamos a utilizar una tira con 8 LED ' s RGB con la placa de Arduino uno. Usaremos la biblioteca de NeoPixel de Adafruit para cambiar el color de cada led.Vamos a empezar!Paso 1: Lo que se necesitaPara este proyecto necesitarás:Arduin