Keyless Entry / Arduino (3 / 4 steg)
Steg 3: kod
Bypass switch svårast för mig. Det var ett samarbete mellan sath02 och mig själv. Jag är alltid tacksam att killarna där kunskap.
Om du inte har de bibliotek som behövs för att skissa är de här för att ladda ner.
Referens
#include < Password.h >
#include < Keypad.h >
#include < Servo.h > //tells att använda servo biblioteket
int pos = 5; variabel att lagra servo position
int knappen = A0; Knappen kommer vara på Pin 7
Servo myservo; förklarar servo
#define dröjsmål 20 / / fördröjning per slinga i ms
Lösenord lösenord = lösenord ("4444"); lösenord för att låsa upp dörren, kan ändras
CONST byte rader = 4; Fyra rader
CONST byte COLS = 3; kolumner
Definiera Tangentlayouten
char nycklar [rader] [COLS] = {
{'1','2','3',},
{'4','5','6',},
{'7','8','9',},
{'*','0','#',},
};
byte rowPins [rader] = {5, 4, 3, 2} ;// Anslut tangentbordet ROW0, ROW1, ROW2 och ROW3 till dessa Arduino stift.
byte colPins [COLS] = {8, 7, 6,}; / / anslut tangentbordet COL0, kolumn1 och COL2 till dessa Arduino stift.
Skapa tangentbordet
Tangentbordet knappsatsen = knappsatsen (makeKeymap(keys), rowPins, colPins, rader, kolumner);
osignerade långa offtime;
booleska helper_light_is_on = false; helper ljus av
variabler som ändras:
int buttonState = 0; variabel för att läsa tryckknapp status
int lastButtonState = 0;
void handle_button()
{
Läs statligt av tryckknapp värdet:
buttonState = digitalRead(button);
Kontrollera om tryckknappen trycks.
om (buttonState! = lastButtonState) {
Låsa release
myservo.write(100);
Delay(20);
digitalWrite 10, hög.
Delay(1000); denna försening kan ändras till lämpligt värde
digitalWrite (10, låg).
myservo.write(160); / / flytta till låsa position efter 5: e sekund
Delay(20);
}
lastButtonState = buttonState;
}
void setup()
{
Serial.BEGIN(9600);
Serial.write(254);
Serial.write(0x01);
Delay(200);
pinMode (10, OUTPUT); Helper ljus
pinMode (11, OUTPUT); grönt ljus
pinMode (12, OUTPUT); rött ljus
pinMode (knapp, indata);
myservo.attach(9); servo på digital stift 9 //servo
keypad.addEventListener(keypadEvent); lägga till en händelseavlyssnare för detta knappsatsen
pinMode (pos, produktionen);
pinMode (knapp, indata);
Delay(200);
}
void loop()
{
handle_button();
keypad.getKey();
myservo.write(5);
process_helper_light();
}
ta hand om vissa särskilda händelser
void keypadEvent(KeypadEvent eKey)
{
Switch (keypad.getState())
{
fall tryckt:
trycker på en knapp så lätt helper ljuset
helper_light_is_on = sant;
digitalWrite(10,HIGH);
Offtime = millis() + 10000; Ange offtime i 30 sekunder i framtiden
Serial.Print ("Ange:");
Serial.println(eKey);
Delay(10);
Serial.write(254);
Switch (eNyckeln)
{
fallet "*":
checkPassword();
Delay(1);
bryta;
fallet "#":
Password.Reset();
Delay(1);
bryta;
standard:
Password.append(eKey);
Delay(1);
}
}
}
void checkPassword()
{
om (password.evaluate()) //if lösenordet är rätt låsa upp dörren
{
Serial.println ("accepterat");
Serial.write(254);
Delay(10);
Lägg till kod för att köra om det fungerar
myservo.write(90); 160deg
digitalWrite (11, hög), //turn på grön Led
Delay(3000); vänta 5 sekunder
digitalWrite (11, låg); / / stänga av grön Led
}
annat
{
Serial.println ("nekad"); om lösenord fel hålla dörren låst
Serial.write(254);
Delay(10);
Lägg till kod för att köra om det inte fungerade
myservo.write(5);
digitalWrite 12, hög. Aktivera RedLed
Delay(3000); vänta 5 sekunder
digitalWrite (12, låg), //turn av röd Led
}
{
om (digitalRead(button) == låg)
myservo.write(90);
för (pos = 0; pos < 90; pos + = 90) / / går från 0 grader till 90 grader
{/ / steg i examen
Serial.println ("öppnas");
myservo.write(POS);
myservo.write(90); 160deg
Delay(80);
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
}
om (digitalRead(button) == hög)
annat
för (pos = 90; pos > = 90; pos-= 90) / / går från 90 grader till 0 grader
myservo.write(90);
{
Serial.println ("Stay stängd");
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
Delay(50);
myservo.write(5); 160deg
myservo.write(POS); berätta servo gå för att placera i variabel "pos"
}
}
}
Denna rutin stänger av ljuset när timern går ut
void process_helper_light(void)
{
om (helper_light_is_on)
{
om (millis() > = offtime)
{
digitalWrite(10,LOW); stänga av helper ljuset
helper_light_is_on = false;
}
}
}