Paso 3: código
El interruptor de derivación lo más difícil para mí. Fue una colaboración entre sath02 y mi auto. Siempre estoy agradecido a estos tipos de conocimiento allí.
Si no tienes las librerías necesarias para el bosquejo está aquí para su descarga.
Referencia
Arduino en un protoboard
#include < Password.h >
#include < Keypad.h >
#include < Servo.h > //tells a utilizar la librería servo
int pos = 5; variable para almacenar la posición del servo
int tecla = A0; El botón estará en Pin 7
Servo myservo; declara servo
#define 20 de retraso / retardo por loop en ms
Contraseña password = Password ("4444"); puede cambiar la contraseña para abrir la puerta,
const filas bytes = 4; Cuatro filas
byte const COLS = 3; columnas
Definir el mapa de teclado
teclas de Char [filas] [COLS] = {}
{'1','2','3',},
{'4','5','6',},
{'7','8','9',},
{'*','0','#',},
};
byte rowPins [filas] = {5, 4, 3, 2} ;// Conecte teclado ROW0, ROW1, ROW2 y ROW3 a estos pines de Arduino.
byte colPins [COLS] = {8, 7, 6,}; / / conecta teclado COL0, COL1 y COL2 a estos pines de Arduino.
Crear el teclado
Teclado teclado = teclado (makeKeymap(keys), rowPins colPins, filas, COLS);
offtime largo sin firmar;
Boolean helper_light_is_on = false; Ayudante de luz
va a cambiar las variables:
int buttonState = 0; variable para lectura del estado del pulsador
int lastButtonState = 0;
void handle_button()
{
leer el estado del pulsador valor:
buttonState = digitalRead(button);
comprobar si el pulsador está presionado.
Si (buttonState! = lastButtonState) {}
Lanzamiento de la cerradura
myservo.Write(100);
Delay(20);
digitalWrite (10, HIGH);
Delay(1000); este retraso se podía cambiar al valor adecuado
digitalWrite (10, bajo);
myservo.Write(160); / / mover a la posición de la cerradura después de 5 segundos
Delay(20);
}
lastButtonState = buttonState;
}
void setup()
{
Serial.Begin(9600);
Serial.Write(254);
Serial.Write(0x01);
Delay(200);
pinMode (10, salida); Luz auxiliar
pinMode (11, salida); luz verde
pinMode (12, salida); luz roja
pinMode (botón, entrada);
myservo.Attach(9); servo en el pin digital 9 //servo
keypad.addEventListener(keypadEvent); Agregar un detector de eventos para este teclado
pinMode (pos, salida);
pinMode (botón, entrada);
Delay(200);
}
void loop()
{
handle_button();
keypad.getKey();
myservo.Write(5);
process_helper_light();
}
Tenga cuidado de algunos eventos especiales
void keypadEvent(KeypadEvent eKey)
{
interruptor (keypad.getState())
{
caso presiona:
se pulsa una tecla hasta el ayudante de la luz
helper_light_is_on = true;
digitalWrite(10,HIGH);
offtime = millis() + 10000; establecer el offtime durante 30 segundos en el futuro
Serial.Print ("introducir:");
Serial.println(eKey);
Delay(10);
Serial.Write(254);
interruptor (eKey)
{
caso ' *':
checkPassword();
Delay(1);
rotura;
caso '#':
Password.Reset();
Delay(1);
rotura;
por defecto:
Password.Append(eKey);
Delay(1);
}
}
}
void checkPassword()
{
Si (password.evaluate()) //if contraseña es correcto abrir la puerta
{
Serial.println ("aceptado");
Serial.Write(254);
Delay(10);
Agregue código para ejecutar si funciona
myservo.Write(90); 160deg
digitalWrite (11, HIGH); //turn el Led verde
Delay(3000); Espere 5 segundos
digitalWrite (11, LOW); / / apaga Led verde
}
otra cosa
{
Serial.println ("denegado"); Si las contraseñas mal Mantén puerta cerrada
Serial.Write(254);
Delay(10);
Agregue código para ejecutar si no funcionaba
myservo.Write(5);
digitalWrite (12, HIGH); girar en rojo
Delay(3000); Espere 5 segundos
digitalWrite (12, bajo); //turn de Led rojo
}
{
Si (digitalRead(button) == LOW)
myservo.Write(90);
para (pos = 0; pos < 90; pos += 90) / / va desde 0 grados a 90 grados
{/ / en pasos de grado
Serial.println ("abierto");
myservo.Write(POS);
myservo.Write(90); 160deg
Delay(80);
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
}
Si (digitalRead(button) == HIGH)
otra cosa
para (pos = 90; pos > = 90; pos-= 90) / / va desde 90 grados hasta 0 grados
myservo.Write(90);
{
Serial.println ("estancia cerrada");
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
Delay(50);
myservo.Write(5); 160deg
myservo.Write(POS); Dile el servo a la posición en la variable 'pos'
}
}
}
Esta rutina se apaga la luz cuando el temporizador caduca
void process_helper_light(void)
{
Si (helper_light_is_on)
{
Si (millis() > = offtime)
{
digitalWrite(10,LOW); Apagar la luz de ayuda
helper_light_is_on = false;
}
}
}