Вы находитесь на странице: 1из 8

Tutorial 3: Botones.

Introducción:

El objetivo de este tutorial es conocer la forma de configurar la placa Arduino para leer el estado de un botón.
Una vez armado el circuito se procede a programar dos opciones, las cuales implican el uso de procedimientos
que permiten leer las entradas.

Lista de materiales.

1. Placa arduino.
2. Cable usb.
3. Computador con Arduino instalado.
4. Botón.
5. Led.
6. Resistencia de 10 kOhm

Procedimiento.

1. Realice el procedimiento del tutorial 1.

2. Instalación de los elementos


Los pulsadores o switches conectan dos puntos de un circuito al ser pulsados. El ejemplo que realizaremos a
continuación enciende el LED conectado en el pin 13 de la placa, (aunque si se prefiere se puede instalar un led
adicional en el protoboard), cuando se pulsa el botón.
Conecte los elementos del circuito en el protoboard, guíese por el esquema.

3-1
3. Sobre los switch y botones
Abierto. Cerrado.

Es ta s d o s p a tita s e s tá n c o ne c ta d a s .

Po r lo q ue s o n d o s p a tita s .

Ab ie rto c ua nd o no Ce rra d o c ua nd o
e s ta p re s io na d o . e s ta p re s io na d o .

3-2
4. Montaje de elementos

Esquema desarrollado en Fritzing

5. Esquema de elementos

3-3
6. Botón simple

Cuando el pulsador está abierto el pin está conectado a tierra (a través de la resistencia pull-down) y
leemos un LOW (bajo ó 0). Cuando el botón se cierra (pulsado), se establece la unión entre sus dos
extremos, conectando el pin a 5 voltios, por lo que leemos un HIGH (alto ó 1). También se puede cablear
el circuito en sentido contrario, con una resistencia "pull-up" que mantenga la entrada en HIGH, y que pase
a LOW cuando se pulse el botón. Así, el comportamiento del programa (sketch) se invertirá, con el LED
normalmente encendido y apagado cuando se pulsa el botón.

código
/*
Button
se enciende o apaga el led del pin 13 cuando se presiona o se suelta el botón
The circuit:
* LED attached from pin 13 to ground
* pushbutton attached to pin 2 from +5V
* 10K resistor attached to pin 2 from ground
by DojoDave <http://www.0j0.org>
modified 28 Oct 2010
by Tom Igoe
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/Button
*/

// las constantes se usan para guardar los pins utilizados


const int buttonPin = 2; // el número del pin donde está el botón
const int ledPin = 13; // número del pin del led, en 13 ya hay uno.

// variables que cambian:


int buttonState = 0; // variable para leer el estado del botón

void setup() {
// inicializa el pin del led como salida
pinMode(ledPin, OUTPUT);
// inicializa el pin del botón como entrada:
pinMode(buttonPin, INPUT);
}

void loop(){
// lee el estado del botón
buttonState = digitalRead(buttonPin);

// verifica que el botón esté presionado


// si es cierto, lo enciende si no lo apaga
if (buttonState == HIGH) {
// prender LED:
digitalWrite(ledPin, HIGH);
}
else {
// apagar LED:
digitalWrite(ledPin, LOW);
}
}

3-4
7. Detección de cambio de estado (detección de extremos)

En algunas aplicaciones se requiere que la acción se gatille cuando el botón ha cambiado de estado, por
lo que se necesita saber cuando se produce ese cambio. Esto se conoce como detección de cambio de
estado o detección de extremos. El código lee constantemente el estado del botón y lo compara con el
estado anterior. Si el estado cambia entonces cambia el estado del pin donde está el led.

código
/* se encuentra en ejemplos Files > Ejemplos > 2. Digital
*/

// Estas constantes no cambian


const int buttonPin = 2; // pin del botón
const int ledPin = 13; // pin del LED

// Variables que cambiarán


int buttonPushCounter = 0; // Contador de las veces que es presionado el botón
int buttonState = 0; // estado actual del botón
int lastButtonState = 0; // estado previo del botón

void setup() {
// inicializa el pin del botón como entrada:
pinMode(buttonPin, INPUT);
// inicializa el pin del LED como salida:
pinMode(ledPin, OUTPUT);
// inicia la comunicación serial:
Serial.begin(9600);
}
void loop() {
// le el pin del botón:
buttonState = digitalRead(buttonPin);

// compara el estado del botón con su estado previo


if (buttonState != lastButtonState) {
// si el estado cambia, incrementa el contador
if (buttonState == HIGH) {
// si el estado actual del botón es ALTO entonces
// pasó de apagado a encendido
buttonPushCounter++;
Serial.println("encendido");
Serial.print("número de presiones del botón: ");
Serial.println(buttonPushCounter, DEC);
}
else {
// si el estado actual del botón es BAJO entonces el botón
// fué dede encendido a apagado:
Serial.println("apagado");
}
}
// guarda el estado actual como el último estado,
//para la siguiente vez en el loop
lastButtonState = buttonState;

// enciende el LED cada cuatro presiones del botón


// verificando el “modulo” del contador
// la función modulo entrega el resto de
// la división de dos números

3-5
if (buttonPushCounter % 4 == 0) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}

En este ejemplo se presentan dos funciones: Serial y modulo(%):

Serial
Se utiliza para la comunicación entre la placa Arduino y un ordenador u otros dispositivos. Todas las
placas Arduino tienen al menos un puerto serie (también conocido como UART o USART): Serial.
Se comunica a través de los pines digitales 0 (RX) y 1 (TX), y por USB al PC. Por lo tanto, si se utiliza
estas funciones, no deben usarse los pines 0 y 1 como entrada o salida digital.
Puede utilizarse el monitor del puerto serie incorporado en el entorno Arduino para comunicarse con la
placa Arduino. Haga clic en el botón del monitor de puerto serie en la barra de herramientas y seleccione
la misma velocidad en baudios utilizada en la llamada a begin().

3-6
La placa Arduino Mega tiene tres puertos adicionales de serie, para ver la forma de usarlo, referirse al sitio
de arduino.

begin() : Establece la velocidad de datos en bits por segundo (baudios) para la transmisión de datos en
serie. Para comunicarse con el computador, utilice una de estas velocidades: 300, 1200, 2400, 4800,
9600, 14400, 19200, 28800, 38400, 57600 o 115200. Sin embargo, puedes especificar otras velocidades -
por ejemplo, para comunicarte a través de los pines 0 y 1 con un componente que requiere una velocidad
de transmisión en particular.

print() : Imprime los datos al puerto serie como texto ASCII. Este comando puede tomar muchas formas.
Los números son impresos mediante un juego de caracteres ASCII para cada dígito. Los valores de tipo
"float" son impresos en forma de dígitos ASCII con dos decimales por defecto. Los valores tipo "byte" se
envían como un único carácter. Los caracteres y las cadenas se envían tal cual.

println() : Imprime los datos al puerto serie como texto ASCII seguido de un retorno de carro (ASCII 13, o
'\r') y un carácter de avance de línea (ASCII 10, o '\n'). Este comando tiene la misma forma
que Serial.print ().

% (módulo)

Calcula el resto de la división entre dos enteros. Es útil para mantener una variable dentro de un
rango particular (por ejemplo el tamaño de un array)
Sintaxis

resultado = dividendo % divisor


Parametros

dividendo: el número que se va a dividir


divisor: el número por el que se va a dividir
Devuelve

el resto de la división
Ejemplo

x = 7 % 5; // x ahora contiene 2
x = 9 % 5; // x ahora contiene 4
x = 5 % 5; // x ahora contiene 0
x = 4 % 5; // x ahora contiene 4

3-7
9. Tarea
Escriba dos sketch que realicen las siguientes tareas:

• Al presionar el botón cambia el estado del led, si estaba encendido lo apaga, si estaba apagado lo
enciende.
• Mida el tiempo de reacción y lo muestre en el monitor serial.

10. Resumen

En este tutorial se examinó el sketch para ver los valores del botón. También se vieron dos funciones:
Serial para comunicaciones y la función matemática resto (%) y el procedimiento digitalRead(pin) que
permite leer el valor de un pin.

11. Referencias.
http://arduino.cc/es/Tutorial/HomePage
http://arduino.cc/es/Reference/HomePage
http://www.ladyada.net/learn/arduino/lesson2.html
http://wiki.webdearde.com/index.php?title=Tutorial:_Comenzando_con_Arduino
http://www.ladyada.net/learn/sensors/tilt.html

3-8

Вам также может понравиться