Arduino'da olağandışı şifreli kilit
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:
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.