Usædvanlig kombinationslås på Arduino
For at samle det skal du bruge en speciel enhed med rektangulære pulser, samt flere tællere og en bunke. Men den færdige enhed ville have store samlede dimensioner, og det ville være ubelejligt at bruge. Som regel hjemsøger sådanne tanker. Det første trin i realiseringen af en drøm var oprettelsen af et program til Arduino. Det fungerer som en kombinationslås. For at åbne den, skal du trykke på ikke en tast, men flere, og gøre det samtidig. Den færdige ordning ser sådan ud:
Billedkvaliteten er ikke den bedste, men forbindelsen skabes til jorden, D3, D5, D7, D9 og D11.
Koden præsenteres nedenfor:
const int ina = 3;
const int inb = 5;
konst int inc = 9;
konst int ledPin = 13;
int i = 1000;
byte a = 0;
byte b = 0;
byte c = 0;
byte d = 0;
usigneret lang tid = 0; // glem ikke alt, hvad der kræver en millis () værdi
usigneret lang temp = 0; // opbevares i usigneret længe
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // koder faktisk
byte tastb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
byte k = 0;
ugyldig opsætning () {
pinMode (ina, INPUT_PULLUP); // 3 indgange tilsluttet knapper
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // indbygget LED på den 13. pin
pinMode (7, OUTPUT);
pinMode (11, OUTPUT);
digitalWrite (7, LAV); // udskift jorden
digitalWrite (11, LAV);
tid = millis (); // nødvendigt at tælle tid
}
void blinktwice () {// dobbelt blinkende LED
digitalWrite (ledPin, HIGH);
forsinkelse (100);
digitalWrite (ledPin, LOW);
forsinkelse (100);
digitalWrite (ledPin, HIGH);
forsinkelse (100);
digitalWrite (ledPin, LOW);
forsinkelse (200);
}
void loop () {
hvis (k == 0) {
blinktwice (); // prompt for code
}
hvis (k == 8) {
digitalWrite (ledPin, HIGH);
forsinkelse (3000);
k er 0;
}
a = digital læse (ina); // læse signalniveauer fra knapper - trykket / ikke trykket
b = digital læse (inb);
c = digital læse (inkl);
forsinkelse (100); // næste hvis - beskyttelse mod falske positiver, kan du ikke bruge
hvis ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
if (a == keya [k]) {
if (b == keyb [k]) {
if (c == keyc [k]) {
k ++;
}
}
}
}
hvis (k == 1) {
hvis (d == 0) {
tid = millis ();
d ++;
}
}
temp = millis ();
temp = temp - tid;
if (temp> 10000) {
k er 0;
d er 0;
tid = millis ();
}
}
For at undgå unødvendige spørgsmål om koden, skal nogle punkter afklares. Opsætningsfunktionen bruges til at tildele porte. Den næste funktion er Input_Pullup, hvilket er nødvendigt for at øge stiftspændingen med 5 V. Dette gøres ved hjælp af en modstand. På grund af dette forekommer forskellige kortslutninger ikke. For større bekvemmelighed anbefales det at bruge blinktwice-funktionen. Generelt skal du prøve andre funktioner, når du opretter forskellige programmer.
Når funktionerne er tildelt, læses signalet fra porte. Hvis der trykkes på knappen, vises den med nummer 1, og hvis ikke - 2. Derefter en analyse af alle værdier. For eksempel var der en sådan kombination som 0,1,1. Det betyder, at der trykkes på den første knap, og at de to andre ikke er. Hvis alle værdier er rigtige, er betingelse 8 også sand. Dette fremgår af en tændt LED på frontpanelet. Dernæst skal du indtaste en bestemt kode, der tjener til at åbne døren.
De sidste kodeelementer bruges til at nulstille tællerværdierne. En sådan funktion udføres, hvis der er gået mere end 10 sekunder siden det sidste tastetryk.Uden denne kode kan du gennemgå alle mulige muligheder, selvom der er mange af dem. Når du har oprettet denne enhed, skal du teste den.