Необичайно комбинирано заключване на Arduino
За да го сглобите, трябва да използвате специално устройство от правоъгълни импулси, както и няколко броячи и купчина. Но готовото устройство би имало големи габаритни размери и би било неудобно за използване. По правило подобни мисли преследват. Първата стъпка в осъществяването на една мечта беше създаването на програма за Arduino. Той ще служи като комбинирано заключване. За да го отворите, ще трябва да натиснете не един клавиш, а няколко, и да го направите едновременно. Готовата схема изглежда така:
Качеството на картината не е най-доброто, но връзката се осъществява със земята, D3, D5, D7, D9 и D11.
Кодът е представен по-долу:
const int ina = 3;
const int inb = 5;
const int inc = 9;
const int ledPin = 13;
int i = 1000;
байт a = 0;
байт b = 0;
байт c = 0;
байт d = 0;
неподписано дълго време = 0; // не забравяйте всичко, което приема стойност milis ()
неподписан дълъг темп = 0; // съхранявайте в неподписан дълъг
байт кея [] = {0, 0, 0, 0, 0, 0, 0, 0}; // кодове всъщност
байт клавиш [] = {1, 1, 1, 1, 0, 1, 0, 0};
байт keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
байт k = 0;
настройка за невалидност () {
pinMode (ina, INPUT_PULLUP); // 3 входа, свързани към бутони
pinMode (inb, INPUT_PULLUP);
pinMode (вкл., INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // вграден светодиод на 13-ия пин
pinMode (7, изход);
pinMode (11, изход);
digitalWrite (7, LOW); // замени земята
digitalWrite (11, LOW);
време = millis (); // необходими за броене на времето
}
void blinktwice () {// двойно мигащ светодиод
digitalWrite (ledPin, HIGH);
забавяне (100);
digitalWrite (ledPin, LOW);
забавяне (100);
digitalWrite (ledPin, HIGH);
забавяне (100);
digitalWrite (ledPin, LOW);
забавяне (200);
}
void loop () {
ако (k == 0) {
blinktwice (); // подкана за код
}
ако (k == 8) {
digitalWrite (ledPin, HIGH);
забавяне (3000);
k е 0;
}
a = digitalRead (ina); // четене на нивата на сигнала от бутоните - натиснат / не натиснат
b = digitalRead (inb);
c = digitalRead (inc);
забавяне (100); // next if - защита срещу фалшиви позитиви, не можете да използвате
if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
ако (a == кея [k]) {
ако (b == keyb [k]) {
ако (c == keyc [k]) {
k ++;
}
}
}
}
ако (k == 1) {
ако (d == 0) {
време = millis ();
d ++;
}
}
temp = millis ();
temp = temp - време;
ако (темп.> 10000) {
k е 0;
d е 0;
време = millis ();
}
}
За да избегнете ненужните въпроси относно кода, някои точки трябва да се изяснят. Функцията за настройка се използва за присвояване на портове. Следващата функция е Input_Pullup, което е необходимо за увеличаване на напрежението на щифта с 5 V. Това става с помощта на резистор. Поради това няма да възникнат различни къси съединения. За удобство се препоръчва да използвате функцията blinktwice. Като цяло, когато създавате различни програми, трябва да опитате други функции.
След като функциите са назначени, сигналът се чете от портовете. Ако бутонът е натиснат, тогава той ще бъде обозначен с числото 1, а ако не - 2. След това, анализ на всички стойности. Например, имаше такава комбинация като 0,1,1. Това означава, че първият клавиш е натиснат, а другите два не. Ако всички стойности са верни, тогава условие 8 също е вярно. Това се доказва от светещ светодиод на предния панел. След това трябва да въведете конкретен код, който ще служи за отваряне на вратата.
Последните елементи на кода се използват за нулиране на стойностите на брояча. Такава функция се изпълнява, ако са минали повече от 10 секунди от последното натискане на клавиш.Без този код бихте могли да преминете през всички възможни опции, въпреки че ги има много. След като създадете това устройство, трябва да го тествате.