UNIVERSIDAD NACIONAL
AUTÓNOMA DE MÉXICO
FACULTAD DE ESTUDIOS SUPERIORES ARAGÓN
LABORATORIO DE MICROPROCESADORES Y
MICROCONTROLADORES
PRACTICA 6: PERIFERICOS DE ENTRADA
CORONA ORTEGA BRANDON
ZALETA ANDRADE SERGIO
RESÉNDIZ ESPÍNDOLA DAVID
GRUPO: 8583
Objetivo
Se aprenderá a procesar en el microcontrolador de ardiuno la información proveniente desde distintos
periféricos de entrada.
Actividades previas
Se observaron los videos 9 y 17 “Teclado keypad 4x4 y simple control de acceso” y “Módulo Joystick analógico
“del canal de YouTube “BitwiseAr”.
1. ¿Qué es un periférico de entrada?
Son aquellos que hacen 'entrar' información en el microprocesador (o microcontrolador) a través de
dispositivos manejados por el usuario.
2. Investiga cómo funciona un teclado matricial 4x4.
Agrupa varios pulsadores y permite controlarlos empleando un número de conductores inferior al que se
necesitaría al usarlos de forma individual.
El teclado tiene agrupados los pulsadores en filas y columnas formando una matriz.
3. Investiga cómo funciona un joystick.
El funcionamiento está basado en el movimiento en dos dimensiones de una palanca, este movimiento es
capturado por dos potenciómetros (uno para cada movimiento), de este modo se entiende que para cada
movimiento en cada dirección será regulado un potenciómetro.
Con este módulo joystick se puede utilizar el cambio de valor resistivo para tomar lectura con dos entradas
analógicas en el Arduino.
Este módulo de joystick cuenta con cinco pines.
GND: Pin conectado a tierra.
+5V: pin de alimentación(5v).
VRx: pin de lectura de potenciómetro para el eje de las x’s.
VRy: pin de lectura de potenciómetro para el eje de las y’s.
SW: es un pin adicional que se utiliza para un push button en la parte inferior.
4. Explica qué es la zona de reposo de un joystick.
Cuando el joystick se encuentra en la posición inicial o media en algunos casos no se mantiene en un valor
medio.
Materiales
Placa de programación Arduino Uno
Cable USB a USB tipo B
Protoboard
Teclado numérico matricial 4x4 ARD 320
Joystick para arduino ARD-358
1 resistencia de 10 k Ω
5 resistencias de 330 Ω
5 LEDs
Cables tipo Dupont de 15 cm
Desarrollo
1. Se elaboró un circuito en el que se introdujo una contraseña de 6 símbolos mediante el teclado
matricial 4x4. Si la contraseña era correcta, en el monitor serie de Arduino se mostró el mensaje
“contraseña correcta”, de lo contrario se mostraría el mensaje “contraseña incorrecta” (la contraseña
correcta fue 54B6D3).
CIRCUITO IMPLEMENTADO:
CODIGO DEL PROGRAMA:
Se utilizó la librería: Keypad by Mark Stanley and Alexander Brevig
#include <Keypad.h>
const byte FILAS = 4;
const byte COLUMNAS = 4;
char keys[FILAS][COLUMNAS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {9,8,7,6};
byte pinesColumnas[COLUMNAS] = {5,4,3,2};
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS);
char TECLA;
char CLAVE[7];
char CLAVE_MAESTRA[7] = "123456";
byte INDICE = 0;
void setup()
{
[Link](9600);
}
void loop(){
TECLA = [Link]();
if (TECLA)
{
CLAVE[INDICE] = TECLA;
INDICE++;
[Link](TECLA);
}
if(INDICE == 6)
{
if(!strcmp(CLAVE, CLAVE_MAESTRA))
[Link](" Correcta");
else
[Link](" Incorrecta");
INDICE = 0;
}
}
2. Se elaboró un circuito en el que dependiendo de la dirección en que se mueve el joystick se iluminaron
cuatro leds. Los cuatros leds deberían tener salida PWM y tener una intensidad proporcional a la
posición del joystick, además de estar dispuestos en forma de cruz sobre la protoboard, un quinto led
se mostraba si el joystick se presionaba hacia abajo.
CODIGO DEL PROGRAMA:
int X;
int Y;
int LED_IZQUIERDO = 3;
int LED_DERECHO = 5;
int LED_ABAJO = 6;
int LED_ARRIBA = 9;
int PULSADOR = 10;
int LED_SW = 11;
int SW;
void setup(){
pinMode(LED_IZQUIERDO, OUTPUT);
pinMode(LED_DERECHO, OUTPUT);
pinMode(LED_ABAJO, OUTPUT);
pinMode(LED_ARRIBA, OUTPUT);
pinMode(LED_SW, OUTPUT);
pinMode(PULSADOR, INPUT);
void loop(){
X = analogRead(A0);
Y = analogRead(A1);
SW = digitalRead(PULSADOR);
if (X >= 0 && X < 480){
analogWrite(LED_IZQUIERDO, map(X, 0, 480, 255, 0));
} else {
analogWrite(LED_IZQUIERDO, 0);
}
if (X > 520 && X <= 1023){
analogWrite(LED_DERECHO, map(X, 520, 1023, 0, 255));
} else {
analogWrite(LED_DERECHO, 0);
}
if (Y >= 0 && Y < 480){
analogWrite(LED_ABAJO, map(Y, 0, 480, 255, 0));
} else {
analogWrite(LED_ABAJO, 0);
}
if (Y > 520 && Y <= 1023){
analogWrite(LED_ARRIBA, map(Y, 520, 1023, 0, 255));
} else {
analogWrite(LED_ARRIBA, 0);
}
digitalWrite(LED_SW, !SW);
}
CIRCUITO IMPLEMENTADO: