Étape 3: Code
Le commutateur de dérivation le plus dur pour moi. C’est une collaboration entre sath02 et moi-même. Je suis toujours reconnaissant à ces gars là connaissance.
Si vous n’avez pas les bibliothèques nécessaires pour le sketch, ils sont ici pour le téléchargement.
Référence
Arduino sur une maquette
#include < Password.h >
#include < Keypad.h >
#include < Servo.h > //tells d’utiliser la bibliothèque de servo
int pos = 5 ; variable pour stocker la position du servo
bouton int = A0 ; Le bouton est sur la broche 7
Servo myservo ; déclare le servo
#define retard 20 / / retard par boucle en ms
Mot de passe password = mot de passe ("4444") ; mot de passe pour déverrouiller la porte, peut être modifié
const byte rangs = 4 ; Quatre rangées
const byte COLS = 3 ; colonnes
Définir la vue d’ensemble
touches de char [lignes] [colonnes] = {}
{'1','2','3',},
{'4','5','6',},
{'7','8','9',},
{'*','0','#',},
};
rowPins Byte [rangs] = {4, 5, 2, 3};// connecter clavier ROW0, ligne1, ligne2 et ROW3 ces broches de l’Arduino.
colPins Byte [CDL] = {8, 7, 6,}; / / connecter clavier COL0, COL1 et COL2 ces broches de l’Arduino.
Créer le clavier
Clavier clavier = clavier (makeKeymap(keys), rowPins, colPins, lignes, colonnes) ;
unsigned long offtime ;
helper_light_is_on booléen = false ; Assistant lumière éteinte
variables vont changer :
buttonState int = 0 ; variable pour la lecture de l’état de bouton poussoir
int lastButtonState = 0 ;
Sub handle_button()
{
lire l’état de la valeur du bouton poussoir :
buttonState = digitalRead(button) ;
Vérifiez si le bouton est appuyé.
Si (buttonState! = lastButtonState) {}
Commande gâche
myservo.Write(100) ;
Delay(20) ;
digitalWrite (10, haute) ;
Delay(1000) ; ce retard peut être remplacé par la valeur appropriée
digitalWrite (10, faible) ;
myservo.Write(160); / / déplacer verrouiller la position après 5 secondes
Delay(20) ;
}
lastButtonState = buttonState ;
}
void setup()
{
Serial.Begin(9600) ;
Serial.Write(254) ;
Serial.Write(0x01) ;
Delay(200) ;
pinMode (sortie 10,) ; Lumière d’assistance
pinMode (sortie 11) ; feu vert
pinMode (sortie 12,) ; lumière rouge
pinMode (bouton, entrée) ;
myservo.Attach(9) ; servo sur la broche numérique 9 //servo
keypad.addEventListener(keypadEvent) ; Ajouter un écouteur d’événement pour ce clavier
pinMode (pos, sortie) ;
pinMode (bouton, entrée) ;
Delay(200) ;
}
void loop()
{
handle_button() ;
keypad.getKey() ;
myservo.Write(5) ;
process_helper_light() ;
}
prendre soin de certains événements spéciaux
Sub keypadEvent(KeypadEvent eKey)
{
commutateur (keypad.getState())
{
cas PRESSED :
une touche si léger la lumière d’assistance
helper_light_is_on = true ;
digitalWrite(10,HIGH) ;
offtime = millis() + 10000 ; la valeur de l’offtime pendant 30 secondes dans l’avenir
Serial.Print ("entrez:") ;
Serial.println(eKey) ;
Delay(10) ;
Serial.Write(254) ;
commutateur (eKey)
{
cas ' *' :
checkPassword() ;
Delay(1) ;
rupture ;
cas « # » :
Password.Reset() ;
Delay(1) ;
rupture ;
par défaut :
Password.Append(eKey) ;
Delay(1) ;
}
}
}
Sub checkPassword()
{
Si (password.evaluate()) //if mot de passe est juste débloquer porte
{
Serial.println ("acceptés") ;
Serial.Write(254) ;
Delay(10) ;
Ajoutez le code à exécuter si cela fonctionne
myservo.Write(90) ; 160deg
digitalWrite (11, HIGH); //turn sur Led verte
Delay(3000) ; attendez 5 secondes
digitalWrite (11, LOW); / / arrête Led verte
}
d’autre
{
Serial.println ("refusé") ; Si les mots de passe mal garder porte verrouillée
Serial.Write(254) ;
Delay(10) ;
Ajoutez le code à exécuter si elle n’a pas fonctionné
myservo.Write(5) ;
digitalWrite (12, HIGH) ; Allumez les RedLed
Delay(3000) ; attendez 5 secondes
digitalWrite (12, LOW); //turn off Led rouge
}
{
Si (digitalRead(button) == faible)
myservo.Write(90) ;
pour (pos = 0; pos < 90; pos += 90) / / va de 0 degrés à 90 degrés
{/ / pas de diplôme
Serial.println ("ouvert") ;
myservo.Write(POS) ;
myservo.Write(90) ; 160deg
Delay(80) ;
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
}
Si (digitalRead(button) == HIGH)
d’autre
pour (pos = 90; pos > = 90; pos-= 90) / / va de 90 degrés à 0 degrés
myservo.Write(90) ;
{
Serial.println ("rester fermé") ;
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
Delay(50) ;
myservo.Write(5) ; 160deg
myservo.Write(POS) ; dire de servo pour aller à positionner dans la variable « pos »
}
}
}
Cette routine s’éteint la lumière lorsque la minuterie expire
Sub process_helper_light(void)
{
Si (helper_light_is_on)
{
Si (millis() > = offtime)
{
digitalWrite(10,LOW) ; éteindre la lumière d’assistance
helper_light_is_on = false ;
}
}
}