Arduino'da olağandışı şifreli kilit

Arduino, herhangi bir ekipmanı kopyalamak için en iyi sistemdir. Çoğu fikir onsuz mümkün olmazdı. Uzun zamandır böyle bir fikir vardı: arduino için özel bir şifreli kilit oluşturmak. Açmak için belirli bir tuşu basılı tutmanız gerekir. Bu durumda, doğru düğmeyi bilseniz bile kilit açılmamalıdır. Açmak için kas hafızasını kullanarak belirli aralıklara dayanmak gerekir. Böyle bir suçlu işleyemez. Ama bu sadece bir teori.

Montajı yapmak için dikdörtgen darbelerin özel bir cihazının yanı sıra birkaç sayaç ve bir yığın kullanmanız gerekir. Ancak bitmiş cihazın genel boyutları büyük olacak ve kullanımı rahatsız edici olacaktır. Kural olarak, bu tür düşünceler akıldan çıkmaz. Bir rüyayı gerçekleştirmenin ilk adımı Arduino için bir program yaratmaktı. Şifreli kilit görevi görecektir. Açmak için bir tuşa değil, birkaç tuşa basmanız ve aynı anda yapmanız gerekir. Bitmiş şema şöyle görünür:

Şifreli kilit

Görüntü kalitesi en iyi değil, ancak bağlantı toprağa, D3, D5, D7, D9 ve D11'e yapılır.

Kod aşağıda sunulmuştur:

const int ina = 3;

const int inb = 5;

const int inc = 9;

const int ledPin = 13;

int i = 1000;

bayt a = 0;

bayt b = 0;

bayt c = 0;

bayt d = 0;

imzasız uzun süre = 0; // milis () değeri alan her şeyi unutma

işaretsiz uzun sıcaklık = 0; // imzasız olarak sakla

bayt keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // aslında kodlar

bayt keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};

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

bayt k = 0;

 

void setup () {

pinMode (ina, INPUT_PULLUP); // düğmelere bağlı 3 giriş

pinMode (inb, INPUT_PULLUP);

pinMode (inc, INPUT_PULLUP);

pinMode (ledPin, OUTPUT); // 13. pimde dahili LED

pinMode (7, ÇIKIŞ);

pinMode (11, ÇIKIŞ);

digitalWrite (7, DÜŞÜK); // dünyayı değiştir

digitalWrite (11, DÜŞÜK);

zaman = milis (); // zamanı saymak için gerekli

}

 

void blinktwice () {// çift yanıp sönen LED

digitalWrite (ledPin, YÜKSEK);

gecikme (100);

digitalWrite (ledPin, DÜŞÜK);

gecikme (100);

digitalWrite (ledPin, YÜKSEK);

gecikme (100);

digitalWrite (ledPin, DÜŞÜK);

gecikme (200);

}

 

void loop () {

eğer (k == 0) {

blinktwice (); // kod istemi

}

eğer (k == 8) {

digitalWrite (ledPin, YÜKSEK);

gecikme (3000);

k, O'dır;

}

a = digitalRead (ina); // düğmelerden sinyal seviyelerini oku - basılı / basılı değil

b = digitalRead (inç);

c = digitalRead (inc);

gecikme (100); // sonraki if - yanlış pozitiflere karşı koruma, kullanamazsınız

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

if (a == keya [k]) {

if (b == keyb [k]) {

if (c == keyc [k]) {

 

k ++;

}

}

}

}

eğer (k == 1) {

eğer (d == 0) {

zaman = milis ();

d ++;

}

}

temp = milis ();

temp = sıcaklık - zaman;

eğer (sıcaklık> 10000) {

k, O'dır;

d, O'dır;

zaman = milis ();

}

}


Kodla ilgili gereksiz soruları önlemek için bazı hususlar açıklığa kavuşturulmalıdır. Kurulum işlevi bağlantı noktalarını atamak için kullanılır. Bir sonraki fonksiyon, pin voltajını 5 V arttırmak için gerekli olan Input_Pullup'dur. Bu bir direnç kullanılarak yapılır. Bu nedenle, çeşitli kısa devreler oluşmaz. Kolaylık sağlamak için yanıp sönme işlevini kullanmanızı öneririz. Genel olarak, çeşitli programlar oluştururken, diğer işlevleri denemeniz gerekir.

Fonksiyonlar atandıktan sonra, sinyal portlardan okunur. Düğmeye basılırsa, o zaman 1 numara ile gösterilir ve değilse - 2. Daha sonra, tüm değerlerin bir analizi. Örneğin, 0,1,1 gibi bir kombinasyon vardı. Bu, ilk tuşa basıldığı ve diğer ikisinin basılmadığı anlamına gelir. Tüm değerler doğruysa, koşul 8 de doğrudur. Bu, ön paneldeki yanan bir LED ile kanıtlanmıştır. Ardından, kapıyı açmaya yarayacak belirli bir kod girmeniz gerekir.

Son kod elemanları sayaç değerlerini sıfırlamak için kullanılır. Son tuş vuruşundan bu yana 10 saniyeden uzun bir süre geçtiyse böyle bir işlev gerçekleştirilir.Bu kod olmadan, birçoğu olmasına rağmen olası tüm seçenekleri inceleyebilirsiniz. Bu cihazı oluşturduktan sonra test etmeniz gerekiyor.

 

(3 oy)
Yükleniyor ...

Yorum ekle