Paso 4: código
El código utiliza bibliotecas ya existentes para el LCD, Servo y teclado. He creado mi propio código con respecto al sistema de contraseñas y funcionalidad general. El código proporciona tres opciones para la caja fuerte: abierta, cercana y establecer contraseña. Para cambiar la contraseña, el usuario tiene que saber la contraseña existente. El código es completamente comentado por la facilidad de una persona nueva a la programación.
El siguiente y adjunto es mi código. No dude en usarlo!
/***************************************************************************************************************************
Título: Cabeza de Lego seguro
Autor: Kaitlin Bellerose
Fecha: 01/11/2014
Actualizado: 03/12/2014
Propósito: Este bosquejo proporciona el sistema de control para el Lego Head seguro.
Este bosquejo pide prestado de múltiples fuentes. Las fuentes originales se citarán aquí en el bloque de título cuando siguieron planteamientos generales.
1) Biblioteca de Keypad.h escrito por Mark Stanley y Alexander Brevig (mstanley alexanderbrevig
2) existe una biblioteca de password.h en Instructables y sitios similares. No me importo para la aplicación, por lo que he creado mi propia. ****************************************************************************************************************************/
#include < Wire.h >
#include < LiquidCrystal_I2C.h >
#include < Servo.h >
#include < Keypad.h >
Lcd(0x27,16,2) de LiquidCrystal_I2C; Crear una instancia de una pantalla de LCD I2C de 16 x 2 con dirección 0x27
Servo myServo; Crear una instancia de un servo
int pos; Declarar la variable para que contenga el valor de posición del servo (Nota: "la posición es una palabra reservada)
int servoSpeed; Declarar la variable para que contenga el valor de la velocidad del servo (Nota: "velocidad" es una palabra reservada) password char [3]; Matriz que contiene la contraseña maestra. Establece a la longitud que se desea. Elegí 3 para facilitar la entrada de char demo [3]; Matriz que contiene el intento de contraseña introducidos por el usuario
isAlreadyOpen Boolean; Bandera que si seguro ya está abierto
isAlreadyClosed Boolean; Bandera que si seguro ya está cerrado
const filas bytes = 4; Cuatro filas en la matriz de teclado 4 x 4
byte const COLS = 4; Cuatro columnas en la matriz de teclado 4 x 4
teclas de Char [filas] [COLS] = {/ / mapas de los valores de teclado {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'* ', '0', '#','d '}};
byte rowPins [filas] = {8, 7, 6, 5}; Conectar a las conexiones de la fila del teclado
byte colPins [COLS] = {4, 3, 2, 10}; Conectar a las conexiones de la columna del teclado
Utilice el pasador de 1 o más apropiado para lo que yo he etiquetado como "10"
Mi Arduino tiene muchos puertos muertos por que tengo que navegar
Teclado teclado = teclado (makeKeymap(keys), rowPins colPins, filas, COLS); Crea una instancia de un teclado numérico con los valores pasados.
/ *** Función de configuración *** /
void setup() {Serial.begin(9600); / / Set serie a 9600 baudios
myServo.attach(11); Sistema servo en el pin 11
isAlreadyOpen = 0; Sistemas abierto bandera a falsos
isAlreadyClosed = 1; Bandera de conjuntos cerrados en true
pos = 90; Establece el valor de posición de brazo del servo a 90 º
servoSpeed = 3; Ajusta la velocidad del servo a 3 grados por segundo
myServo.write(pos); Sistemas servo brazo a 90 grados
contraseña [0] = '1'; Asegúrese de poner el valor inicial en comillas simples debido a su naturaleza de char
contraseña [1] = '2'; Segundo valor de matriz de contraseña
contraseña [2] = '3'; Último valor en contraseña. La contraseña por defecto "123" cuando / / se pierde la energía.
keypad.setDebounceTime(250); Establece el botón debounce tiempo para el teclado
LCD.init(); Inicializar el LCD
LCD.Backlight(); Configurar la pantalla a contraluz
LCD.Print ("Bienvenido a casa!"); Imprimir mensaje de bienvenida a LCD
Delay(1000); Tienen mensaje pantalla para milseconds de 1000
LCD.Clear(); Borrar la pantalla
LCD.Print("1) Open 2) estrecha"); Menú opciones de impresión
lcd.setCursor(0,1); Mover el cursor a la línea segunda
LCD.Print("3) Set Code"); Segunda parte del menú de opciones de impresión
Delay(3000); Retardo de
}
/***************Main Loop*****************/
void loop() {}
entrada [0] = NO_KEY; Restablece la matriz de entrada con cada lazo o bien
entrada [1] = NO_KEY; obtendrá "falsas" entradas de valores existentes
entrada [2] = NO_KEY; Configurar el teclado final a NO_KEY (similar a ajuste / /
valor null en C++)
clave char = keypad.getKey(); Obtener la primera tecla en el menú.
Si (clave == '1') {/ / inicia la lógica si se selecciona la opción "Open safe"
if(isAlreadyOpen == 1) / / comprueba si ya está abierta la caja fuerte. Ningún punto en la apertura de algo ya abierto
{
LCD.Clear(); LCD Clear
LCD.Print ("seguro es ya"); Mensaje de impresiones
lcd.setCursor(0,1); Mover el cursor a la línea segunda
LCD.Print("Open."); Segunda parte del menú de opciones de impresión
Delay(2000); Milisegundos de retardo 2000}
Else / / si la caja fuerte no está ya abierta, el código siguiente dedica a {}
LCD.Clear(); Claro la pantalla LCD
LCD.Print ("introducir la clave 1:"); Mensaje para solicitar la primera tecla
lcd.setCursor(0,1); Mueve el cursor a la línea segunda
mientras (entrada [0] == NO_KEY) / / el bucle se ejecuta hasta que una tecla válida
`{
entrada [0] = keypad.getKey(); Almacena el primer valor de la tentativa del introducido por el usuario en la contraseña
}
LCD.Print(Entry[0]); Imprime valor de visualización en pantalla LCD. Utilizar para la depuración y la facilidad de uso. Delay(1000); Retrasos para 1000 milisegundos
LCD.Clear(); Borra LCD
LCD.Print ("2 º Intro:"); Entrar en la segunda tecla
lcd.setCursor(0,1); Mover el curosr
mientras (entrada [1] == NO_KEY) / / otro bucle que se ejecutará indefinidamente a menos que una pulsación válida
{entrada [1] = keypad.getKey(); / / almacena el segundo valor el intento de contraseña introducidos por el usuario}
LCD.Print(Entry[1]); Imprime valor de visualización en pantalla LCD. Utilizar para la depuración y la facilidad de uso. Delay(1000); Retardo de 1000 milisegundos
LCD.Clear(); LCD Clear
LCD.Print ("introducir la clave 3:"); Solicitar tercera tecla
lcd.setCursor(0,1); Mover el cursor
mientras (entrada [2] == NO_KEY) / / otra vez, un tiempo bucle a continuamente unti de la encuesta se hace una tecla válida. {
entrada [2] = keypad.getKey(); Obtiene la tecla final
}
LCD.Print(Entry[2]); Imprime valor de visualización en pantalla LCD. Utilizar para la depuración y la facilidad de uso. Delay(1000); Retardo de 1000 milisegundos
LCD.Clear(); LCD Clear
Si ((entrada [0] == password[0]) & & entrada [1] == contraseña [1] & & entrada [2] == password[2]) / / si lo que el usuario introducido coincide con la contraseña almacenada, este bucle se ejecuta
{
isAlreadyOpen = 1; Configurar isAlreadyOpen bandera a true/alto
isAlreadyClosed = 0; Set isAlreadyClosed bandera a falsos bajo
pos = 180; Posición a 180 grados
myServo.write(pos); Fijar el servo a 180 grados
LCD.Clear(); LCD Clear en espera de mensaje
LCD.Print ("caja fuerte está abierta."); Mensaje que la caja fuerte está abierta
Delay(2000); Retraso de 2000 milisegundos}
Else / / si ha introducido un código incorrecto, esto se ejecuta
{
LCD.Clear(); LCD Clear
LCD.Print ("código no válido."); Mensaje de código no válido
Delay(1000); Retardo de 1000 milisegundos
LCD.Clear(); LCD Clear}}
mainLCDMenu(); Independientemente de si la entrada de contraseña ha sido exitoso, esto inicia nuevamente a las funciones de menú principal}
else if (clave == '2')
{/ / Se inicia si se selecciona "Cierre seguro"
if(isAlreadyClosed == 1) / / si la cabeza ya está cerrada, ¿por qué cerrarla otra vez?
{
LCD.Clear(); LCD Clear
LCD.Print ("seguro es ya"); Inicio mensaje de la caja fuerte ya cerrado lcd.setCursor(0,1); Mover el cursor a la línea segunda
LCD.Print("Closed."); Mensaje final
Delay(2000); Retraso de 2000 milisegundos demora}
Else / / si la caja fuerte no está ya cerrada, esto se ejecuta
{isAlreadyOpen = 0; / / sistemas isAlreadyOpen bandera a falsos bajo
isAlreadyClosed = 1; Establece isAlreadyClosed bandera a true y alto
pos = 90; Pos se establece en 90 grados
myServo.write(pos); Servo sistemas a 90 grados
LCD.Clear(); Borra LCD
LCD.Print ("seguro está cerrada."); Mensaje que la caja esté cerrada
Delay(2000); Milisegundos de retardo 2000}
LCD.Clear(); LCD Clear
mainLCDMenu(); De cualquier manera, volver al menú principal}
else if (clave == '3') {/ / si está seleccionada la opción "Ajustar código"
LCD.Clear(); LCD Clear
LCD.Print ("introducir la clave 1:"); El código que sigue es una repetición de código en lcd.setCursor(0,1) opción 1; El usuario tiene que introducir la contraseña correctamente antes de cambiarlo
mientras (entrada [0] == NO_KEY)
{entrada [0] = keypad.getKey();}
LCD.Print(Entry[0]);
Delay(1000);
LCD.Clear();
LCD.Print ("2 º Intro:");
lcd.setCursor(0,1);
mientras (entrada [1] == NO_KEY)
{entrada [1] = keypad.getKey();}
LCD.Print(Entry[1]);
Delay(1000);
LCD.Clear();
LCD.Print ("introducir la clave 3:");
lcd.setCursor(0,1);
mientras (entrada [2] == NO_KEY)
{entrada [2] = keypad.getKey();}
LCD.Print(Entry[2]);
Delay(1000);
LCD.Clear();
Si ((entrada [0] == password[0]) & & entrada [1] == contraseña [1] & & entrada [2] == password[2]) / / si se introdujo correctamente la contraseña, esta lógica se ejecuta
{contraseña [0] = NO_KEY; / / Reset el valor 0 de la contraseña para contraseña de NO-KEY [1] = NO_KEY; / / restablecer el valor de contraseña 1 contraseña de NO-KEY [2] = NO_KEY; / / restablecer el valor de contraseña 2 de NO-KEY
LCD.Print ("Set key 1:"); Primer valor clave
lcd.setCursor(0,1);
mientras que (contraseña [0] == NO_KEY) / / bucles sin fin hasta válido clave prensa recibido {contraseña [0] = keypad.getKey(); / / establece contraseña [0] al valor nuevo} lcd.print(password[0]); Imprime el nuevo valor
Delay(1000);
LCD.Clear(); LCD Clear
LCD.Print ("establecer clave 2:"); Mensaje de clave 2
lcd.setCursor(0,1); Mover código
mientras que (contraseña [1] == NO_KEY) / / bucles sin fin hasta válido clave prensa recibido {contraseña [1] = keypad.getKey(); / / establece contraseña [1] nuevo valor para} lcd.print(password[1]); Imprime el nuevo valor
Delay(1000); Retardo de 1000 milisegundos
LCD.Clear(); LCD Clear
LCD.Print ("establecer clave 3:"); Mensaje para la tercera llave
lcd.setCursor(0,1); Mover el cursor
mientras que (contraseña [2] == NO_KEY) / / bucles sin fin hasta válido clave prensa recibido {contraseña [2] = keypad.getKey(); / / establece contraseña [2] en nuevo valor}
LCD.Print(password[2]); Imprime el nuevo valor
Delay(1000); Retardo de 1000 milisegundos
LCD.Clear(); LCD Clear}
Else / / esto se ejecuta si el usuario escribe la contraseña incorrecta antes de la verificación {/ / para cambiar la contraseña. Usuario no puede cambiar la contraseña sin saber la contraseña
LCD.Clear(); LCD Clear
LCD.Print ("código no válido."); Mensaje de código no válido
Delay(1000); Retardo de 1000 milisegundos
LCD.Clear(); LCD Clear}
mainLCDMenu(); Independientemente del resultado, volver al menú principal
} }