Kunci kombinasi yang tidak biasa di Arduino
Untuk memasangnya, anda perlu menggunakan alat khas denyut segi empat tepat, serta beberapa pembilang dan timbunan. Tetapi peranti siap akan mempunyai dimensi keseluruhan yang besar dan tidak selesa untuk digunakan. Sebagai peraturan, pemikiran seperti itu menghantui. Langkah pertama dalam merealisasikan impian adalah penciptaan program untuk Arduino. Ia akan berfungsi sebagai kunci gabungan. Untuk membukanya, anda perlu menekan bukan satu kekunci, tetapi beberapa, dan melakukannya secara serentak. Skim siap seperti ini:
Kualiti gambar bukanlah yang terbaik, tetapi sambungan dibuat ke tanah, D3, D5, D7, D9 dan D11.
Kodnya ditunjukkan di bawah:
const int ina = 3;
const int inb = 5;
const int inc = 9;
const int ledPin = 13;
int i = 1000;
bait a = 0;
bait b = 0;
bait c = 0;
bait d = 0;
lama tidak ditandatangani = 0; // jangan lupa semua yang memerlukan nilai milis ()
temp panjang tidak bertanda = 0; // simpan dalam panjang yang tidak ditandatangani
bait keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // kod sebenarnya
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
bait keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
bait k = 0;
batal persediaan () {
pinMode (ina, INPUT_PULLUP); // 3 input disambungkan ke butang
pinMode (inb, INPUT_PULLUP);
pinMode (termasuk, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // LED terbina dalam pada pin ke-13
pinMode (7, OUTPUT);
pinMode (11, OUTPUT);
digitalWrite (7, RENDAH); // ganti bumi
digitalWrite (11, RENDAH);
masa = milis (); // perlu mengira masa
}
void blinktwice () {// LED berkelip berganda
digitalWrite (ledPin, TINGGI);
kelewatan (100);
digitalWrite (ledPin, RENDAH);
kelewatan (100);
digitalWrite (ledPin, TINGGI);
kelewatan (100);
digitalWrite (ledPin, RENDAH);
kelewatan (200);
}
gelung kosong () {
jika (k == 0) {
blinktwice (); // meminta kod
}
jika (k == 8) {
digitalWrite (ledPin, TINGGI);
kelewatan (3000);
k ialah 0;
}
a = digitalRead (ina); // membaca tahap isyarat dari butang - ditekan / tidak ditekan
b = digitalRead (inb);
c = digitalRead (termasuk);
kelewatan (100); // seterusnya jika - perlindungan terhadap positif palsu, anda tidak boleh menggunakan
jika ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
jika (a == keya [k]) {
jika (b == keyb [k]) {
jika (c == keyc [k]) {
k ++;
}
}
}
}
jika (k == 1) {
jika (d == 0) {
masa = milis ();
d ++;
}
}
temp = milis ();
temp = temp - masa;
jika (temp> 10000) {
k ialah 0;
d ialah 0;
masa = milis ();
}
}
Untuk mengelakkan soalan yang tidak perlu mengenai kod, beberapa perkara harus dijelaskan. Fungsi persediaan digunakan untuk menetapkan port. Fungsi seterusnya adalah Input_Pullup, yang diperlukan untuk meningkatkan voltan pin sebanyak 5 V. Ini dilakukan dengan menggunakan perintang. Oleh kerana itu, pelbagai litar pintas tidak akan berlaku. Untuk kemudahan yang lebih besar, disarankan untuk menggunakan fungsi blinktwice. Secara umum, semasa membuat pelbagai program, anda perlu mencuba fungsi lain.
Setelah fungsi ditugaskan, isyarat dibaca dari port. Sekiranya butang ditekan, maka ia akan ditunjukkan dengan angka 1, dan jika tidak - 2. Selanjutnya, analisis semua nilai. Sebagai contoh, terdapat gabungan seperti 0,1,1. Ini bermaksud bahawa kekunci pertama ditekan dan dua yang lain tidak. Sekiranya semua nilai benar, maka syarat 8 juga benar. Ini dibuktikan dengan LED yang menyala di panel depan. Seterusnya, anda perlu memasukkan kod tertentu yang akan berfungsi untuk membuka pintu.
Unsur terakhir kod digunakan untuk menetapkan semula nilai pembilang. Fungsi seperti itu dilakukan jika lebih dari 10 saat berlalu sejak penekanan kekunci terakhir.Tanpa kod ini, anda dapat melalui semua pilihan yang mungkin, walaupun ada banyak pilihan. Setelah membuat peranti ini, anda perlu mengujinya.