Stap 3: Code
De Bypass schakelaar het moeilijkst voor mij. Het was een samenwerking tussen sath02 en mijn zelf. Ik ben altijd dankbaar zijn voor deze jongens voor er kennis.
Als u niet over de bibliotheken die nodig zijn voor de schets beschikt zijn ze hier voor het downloaden.
Referentie
Arduino op een Breadboard
#include < Password.h >
#include < Keypad.h >
#include < Servo.h > //tells servo-bibliotheek gebruiken
int pos = 5; variabele op te slaan van de servo positie
int knop = A0; De knop zal worden op Pin 7
Servo myservo; verklaart servo
#define vertraging 20 / / vertraging per lus in ms
Wachtwoord wachtwoord = Password ("4444"); wachtwoord voor het ontgrendelen van de deur, kan worden gewijzigd
Const byte rijen = 4; Vier rijen
Const byte COLS = 3; kolommen
Definiëren van de Keymap
char toetsen [ROWS] [COLS] = {}
{'1','2','3',},
{'4','5','6',},
{'7','8','9',},
{'*','0','#',},
};
byte rowPins [ROWS] = {5, 4, 3, 2} ;// Connect toetsenbord, ROW0, ROW1, ROW2 en ROW3 op deze Arduino pinnen.
byte colPins [COLS] = {8, 7, 6,}; / / Connect toetsenbord COL0, COL1 en COL2 op deze Arduino pinnen.
Maken van het toetsenbord
Toetsenbord toetsenbord toetsenbord = (makeKeymap(keys), rowPins, colPins, rijen, COLS);
unsigned long offtime;
Boole helper_light_is_on = false; Helper licht af
variabelen zal veranderen:
int buttonState = 0; variabele voor het lezen van de drukknop status
int lastButtonState = 0;
VOID handle_button()
{
Lees de stand van de drukknop waarde:
buttonState = digitalRead(button);
Controleer als de drukknop ingedrukt is.
Als (buttonState! = lastButtonState) {}
Lock release
myservo.write(100);
vertraging(20);
digitalWrite (10, hoge);
delay(1000); deze vertraging kan worden veranderd op passende waarde
digitalWrite (10, laag);
myservo.write(160); / / verplaatsen naar een positie vergrendelen na 5 seconden
vertraging(20);
}
lastButtonState = buttonState;
}
VOID Setup
{
Serial.begin(9600);
Serial.write(254);
Serial.write(0x01);
delay(200);
pinMode (10, OUTPUT); Helper licht
pinMode (11, OUTPUT); groen licht
pinMode (12, OUTPUT); rood licht
pinMode (button, INPUT);
myservo.attach(9); Servo op digitale pin 9 //servo
keypad.addEventListener(keypadEvent); toevoegen van een gebeurtenislistener voor dit toetsenbord
pinMode (pos, OUTPUT);
pinMode (button, INPUT);
delay(200);
}
void loop
{
handle_button();
keypad.getKey();
myservo.write(5);
process_helper_light();
}
sommige speciale evenementen verzorgen
VOID keypadEvent(KeypadEvent eKey)
{
schakelaar (keypad.getState())
{
Case PRESSED:
een toets is gedrukt zo licht licht van de helper
helper_light_is_on = true;
digitalWrite(10,HIGH);
offtime = millis() + 10000; instellen van de offtime gedurende 30 seconden in de toekomst
Serial.Print ("Voer:");
Serial.println(eKey);
delay(10);
Serial.write(254);
schakelaar (eKey)
{
geval ' *':
checkPassword();
delay(1);
breken;
Case '#':
password.reset();
delay(1);
breken;
standaard:
password.Append(eKey);
delay(1);
}
}
}
VOID checkPassword()
{
Als (password.evaluate()) //if wachtwoord klopt ontgrendelen van de deur
{
Serial.println ("geaccepteerd");
Serial.write(254);
delay(10);
Code toevoegen om te draaien als het werkt
myservo.write(90); 160deg
digitalWrite (11, hoge); //turn op groene Led
delay(3000); wacht 5 seconden
digitalWrite (11, laag); / / uitzetten groene Led
}
anders
{
Serial.println ('geweigerd'); als wachtwoorden verkeerde deur vergrendeld houden
Serial.write(254);
delay(10);
code toevoegen om te draaien als het niet werkte
myservo.write(5);
digitalWrite (12, hoge); RedLed inschakelen
delay(3000); wacht 5 seconden
digitalWrite (12, laag); //turn uit de rode Led
}
{
Als (digitalRead(button) == laag)
myservo.write(90);
voor (pos = 0; pos < 90; pos += 90) / / gaat van 0 graden tot 90 graden
{/ / in stappen van graad
Serial.println ("geopend");
myservo.write(POS);
myservo.write(90); 160deg
delay(80);
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
}
Als (digitalRead(button) == HIGH)
anders
voor (pos = 90; pos > = 90; pos-= 90) / / gaat van 90 graden naar 0 graden
myservo.write(90);
{
Serial.println ("Stay gesloten");
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
delay(50);
myservo.write(5); 160deg
myservo.write(POS); servo naar positie in de variabele 'pos' vertellen
}
}
}
Deze routine uitgeschakeld aan het licht wanneer de timer afloopt
VOID process_helper_light(void)
{
Als (helper_light_is_on)
{
Als (millis() > = offtime)
{
digitalWrite(10,LOW); uitschakelen van het licht van de helper
helper_light_is_on = false;
}
}
}