Nezvyčajný kombinovaný zámok na Arduino
Na jeho zostavenie je potrebné použiť špeciálne zariadenie obdĺžnikových impulzov, ako aj niekoľko počítadiel a hromadu. Hotové zariadenie by však malo veľké celkové rozmery a jeho použitie by bolo nepohodlné. Spravidla takéto myšlienky prenasledujú. Prvým krokom pri realizácii sna bolo vytvorenie programu pre Arduino. Slúži ako kombinovaný zámok. Ak ju chcete otvoriť, musíte stlačiť nie jedno tlačidlo, ale niekoľko klávesov a urobiť to súčasne. Dokončená schéma vyzerá takto:
Kvalita obrazu nie je najlepšia, ale spojenie je vykonané so zemou D3, D5, D7, D9 a D11.
Kód je uvedený nižšie:
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;
dlhá doba bez znamienka = 0; // nezabudnite na všetko, čo má hodnotu millis ()
nepodpísaná dlhá teplota = 0; // ukladať dlho bez znamienka
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // kódy
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
bajt k = 0;
neplatné nastavenie () {
pinMode (ina, INPUT_PULLUP); // 3 vstupy pripojené k tlačidlám
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // vstavaná LED na 13. kolíku
pinMode (7, VÝSTUP);
pinMode (11, VÝSTUP);
digitalWrite (7, LOW); // vymeňte zem
digitalWrite (11, LOW);
čas = millis (); // potrebné na počítanie času
}
void blinktwice () {// dvakrát blikajúca LED
digitalWrite (ledPin, HIGH);
oneskorenie (100);
digitalWrite (ledPin, LOW);
oneskorenie (100);
digitalWrite (ledPin, HIGH);
oneskorenie (100);
digitalWrite (ledPin, LOW);
oneskorenie (200);
}
void loop () {
ak (k == 0) {
blinktwice (); // výzva na zadanie kódu
}
ak (k == 8) {
digitalWrite (ledPin, HIGH);
oneskorenie (3000);
k je 0;
}
a = digitalRead (ina); // čítanie úrovní signálu z tlačidiel - stlačené / nestlačené
b = digitálne čítanie (inb);
c = digitalRead (inc);
oneskorenie (100); // next if - ochranu pred falošnými pozitívami nemôžete použiť
if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
if (a == keya [k]) {
if (b == keyb [k]) {
if (c == keyc [k]) {
k ++;
}
}
}
}
ak (k == 1) {
ak (d == 0) {
čas = millis ();
d ++;
}
}
temp = millis ();
temp = temp - time;
if (temp> 10 000) {
k je 0;
d je 0;
čas = millis ();
}
}
Aby sa predišlo zbytočným otázkam týkajúcim sa kódexu, je potrebné objasniť niektoré body. Funkcia nastavenia sa používa na priradenie portov. Ďalšou funkciou je Input_Pullup, ktorá je potrebná na zvýšenie napätia kolíka o 5 V. To sa robí pomocou odporu. Z tohto dôvodu nenastanú rôzne skraty. Kvôli lepšiemu odporúčame používať funkciu blinktwice. Všeobecne platí, že pri vytváraní rôznych programov musíte vyskúšať ďalšie funkcie.
Po priradení funkcií sa signál načíta z portov. Ak je tlačidlo stlačené, bude to indikované číslom 1, a ak nie - 2. Ďalej, analýza všetkých hodnôt. Napríklad existovala taká kombinácia ako 0,1,1. To znamená, že stlačíte prvé tlačidlo a ostatné dve nie. Ak sú všetky hodnoty pravdivé, potom platí aj podmienka 8. Dokazuje to rozsvietená dióda LED na prednom paneli. Ďalej musíte zadať špecifický kód, ktorý bude slúžiť na otvorenie dverí.
Posledné prvky kódu sa používajú na vynulovanie hodnôt počítadla. Táto funkcia sa vykoná, ak od posledného stlačenia tlačidla uplynulo viac ako 10 sekúnd.Bez tohto kódu by ste mohli prejsť všetkými možnými možnosťami, aj keď ich je veľa. Po vytvorení tohto zariadenia ho musíte otestovať.