Neobična kombinacija zaključavanja na Arduinu

Arduino je najbolji sustav za kopiranje bilo koje opreme. Većina ideja ne bi bila moguća bez nje. Dugo je postojala takva ideja: stvoriti posebnu kombinacijsku bravu za arduino. Da biste ga otvorili, morate pritisnuti određenu tipku. U tom se slučaju brava ne smije otvoriti, čak i ako znate pravi gumb. Da biste ga otvorili, potrebno je izdržati određene intervale pomoću mišićne memorije. Takav zločinac neće moći počiniti. Ali ovo je samo teorija.

Da biste ga sastavili trebate koristiti poseban uređaj pravokutnih impulsa, kao i nekoliko brojača i hrpu. No, gotov uređaj imao bi velike ukupne dimenzije i bilo bi nezgodno koristiti. U pravilu, takve misli progone. Prvi korak u ostvarenju sna bilo je stvaranje programa za Arduino. Služit će kao kombinirana brava. Da biste ga otvorili, morat ćete pritisnuti ne jednu tipku, već nekoliko, i to učiniti istovremeno. Gotova shema izgleda ovako:

Kombinirana brava

Kvaliteta slike nije najbolja, ali veza se uspostavlja s masom, D3, D5, D7, D9 i D11.

Kod je prikazan u nastavku:

const int ina = 3;

const int inb = 5;

const int inc = 9;

const int ledPin = 13;

int i = 1000;

bajt a = 0;

bajt b = 0;

bajt c = 0;

bajt d = 0;

dugo vremena bez potpisa = 0; // ne zaboravite sve što uzima milis () vrijednost

nepotpisana duga temp = 0; // pohraniti u nepotpisano dugo

byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // kodovi zapravo

byte tipka [] = {1, 1, 1, 1, 0, 1, 0, 0};

byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};

bajt k = 0;

 

poništavanje postave () {

pinMode (ina, INPUT_PULLUP); // 3 ulaza spojena na gumbe

pinMode (inb, INPUT_PULLUP);

pinMode (inc, INPUT_PULLUP);

pinMode (ledPin, OUTPUT); // ugrađeni LED na 13. pinu

pinMode (7, IZLAZ);

pinMode (11, IZLAZ);

digitalWrite (7, NISKO); // zamijeniti zemlju

digitalWrite (11, NISKO);

vrijeme = millis (); // potrebno za brojanje vremena

}

 

void blinktwice () {// dvostruko trepereće LED

digitalWrite (ledPin, HIGH);

kašnjenje (100);

digitalWrite (ledPin, LOW);

kašnjenje (100);

digitalWrite (ledPin, HIGH);

kašnjenje (100);

digitalWrite (ledPin, LOW);

kašnjenje (200);

}

 

void petlja () {

ako je (k == 0) {

blinktwice (); // prompt za kod

}

ako je (k == 8) {

digitalWrite (ledPin, HIGH);

kašnjenje (3000);

k je 0;

}

a = digitalno čitanje (ina); // čitanje razine signala s gumba - pritisnuto / nije pritisnuto

b = digitalno čitanje (inb);

c = digitalno čitanje (inc);

kašnjenje (100); // next if - zaštitu od lažnih pozitivnih rezultata, ne možete koristiti

if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {

ako je (a == keya [k]) {

ako je (b == tipka [k]) {

ako je (c == keyc [k]) {

 

k ++;

}

}

}

}

ako je (k == 1) {

ako je (d == 0) {

vrijeme = millis ();

d ++;

}

}

temp = millis ();

temp = temp - vrijeme;

ako (temp> 10000) {

k je 0;

d je 0;

vrijeme = millis ();

}

}


Da biste izbjegli nepotrebna pitanja o kodu, potrebno je razjasniti neke točke. Funkcija postavljanja koristi se za dodjelu portova. Sljedeća funkcija je Input_Pullup, što je potrebno za povećanje napona pina za 5 V. To se vrši pomoću otpornika. Zbog toga se neće pojaviti razni kratki spojevi. Za veću praktičnost preporučuje se korištenje funkcije blinktwice. Općenito, prilikom stvaranja različitih programa trebate isprobati druge funkcije.

Nakon dodjeljivanja funkcija signal se očitava iz portova. Ako pritisnete gumb, tada će biti označeno brojem 1, a ako ne - 2. Zatim, analiza svih vrijednosti. Na primjer, postojala je takva kombinacija kao 0,1,1. To znači da je prva tipka pritisnuta, a ostale dvije nisu. Ako su sve vrijednosti istinite, onda je i uvjet 8 istinit. O tome svjedoči upaljena LED na prednjoj ploči. Zatim morate unijeti određeni kôd koji će služiti za otvaranje vrata.

Posljednji elementi koda koriste se za resetiranje vrijednosti brojača. Takva se funkcija obavlja ako je prošlo više od 10 sekundi od posljednjeg pritiska tipke.Bez ovog koda mogli biste proći sve moguće opcije, iako ih ima puno. Nakon stvaranja ovog uređaja, morate ga testirati.

 

(3 glasova)
Učitavanje ...

Dodajte komentar