Szokatlan kombinációs zár az Arduino-n
Összeszereléséhez speciális téglalap alakú impulzusokat kell használni, valamint több számlálót és egy rakást. De a kész eszköz nagyméretű lenne, és használata kényelmetlen lenne. Az ilyen gondolatok általában kísértetjárta. Az álom megvalósításának első lépése egy program létrehozása volt Arduino számára. Kombinált zárként fog szolgálni. A megnyitáshoz nem csak egy gombot, hanem többet kell megnyomnia, és egyszerre kell megtennie. A kész séma így néz ki:
A képminőség nem a legjobb, de a kapcsolat a földdel történik, D3, D5, D7, D9 és D11.
A kódot az alábbiakban mutatjuk be:
const int ina = 3;
const int inb = 5;
const int inc = 9;
const int ledPin = 13;
int i = 1000;
bájt a = 0;
bájt = 0;
c = 0 byte
d = 0 byte
alá nem írt hosszú idő = 0; // ne felejtsd el mindent, ami millisz () értéket vesz fel
alá nem írt hosszú hőmérséklet = 0; // hosszú ideig tárolja
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // kódok valójában
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
k = 0 byte
érvénytelen beállítás () {
pinMode (ina, INPUT_PULLUP); // 3 bemenet csatlakoztatva a gombokhoz
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // beépített LED a 13. tűn
pinMode (7, OUTPUT);
pinMode (11, OUTPUT);
digitalWrite (7, LOW); // cserélje le a földet
digitalWrite (11, LOW);
idő = millis (); // az idő számításához szükséges
}
void blinktwice () {// dupla villogású LED
digitalWrite (ledPin, HIGH);
késleltetés (100);
digitalWrite (ledPin, LOW);
késleltetés (100);
digitalWrite (ledPin, HIGH);
késleltetés (100);
digitalWrite (ledPin, LOW);
késleltetés (200);
}
void loop () {
if (k == 0) {
blinktwice (); // kód kérése
}
if (k == 8) {
digitalWrite (ledPin, HIGH);
késés (3000);
k értéke 0;
}
a = digitalRead (ina); // jelszint olvasása a gombokból - megnyomva / nem megnyomva
b = digitalRead (inb);
c = digitalRead (inc);
késleltetés (100); // Next if - védelem a hamis pozitívok ellen, nem használható
if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
if (a == keya [k]) {
if (b == keyb [k]) {
if (c == keyc [k]) {
k ++;
}
}
}
}
if (k == 1) {
if (d == 0) {
idő = millis ();
d ++;
}
}
temp = millis ();
temp = temp - idő;
if (temp> 10000) {
k értéke 0;
d értéke 0;
idő = millis ();
}
}
A kódmal kapcsolatos felesleges kérdések elkerülése érdekében néhány pontot tisztázni kell. A beállító funkció a portok hozzárendelésére szolgál. A következő funkció az Input_Pullup, amelyre szükség van a tűs feszültség 5 V-os növeléséhez. Ezt ellenállás segítségével hajtjuk végre. Emiatt különféle rövidzárlatok nem fordulnak elő. A nagyobb kényelem érdekében a blinktwice funkció használata ajánlott. Általában különféle programok létrehozásakor meg kell próbálnia más funkciókat.
A funkciók hozzárendelése után a portokból kiolvassa a jelet. Ha megnyomja a gombot, akkor azt 1-es szám jelzi, ha nem - 2-et. Ezután az összes érték elemzése. Például létezett egy olyan kombináció, mint a 0,1,1. Ez azt jelenti, hogy az első gombot megnyomják, a másik kettőt pedig nem. Ha minden érték igaz, akkor a 8. feltétel is igaz. Ezt az előlapon világító LED jelzi. Ezután be kell írnia egy egyedi kódot, amely az ajtó kinyitására szolgál.
Az utolsó kódelemeket használjuk a számlálók visszaállításához. Ezt a funkciót akkor hajtják végre, ha több mint 10 másodperc telt el az utolsó gombnyomás óta.E kód nélkül minden lehetséges lehetőséget átléphet, bár nagyon sok van. Az eszköz létrehozása után tesztelnie kell azt.