Neobična kombinacija zaključavanja na Arduinu
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:
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.