Kunci kombinasi yang tidak biasa di Arduino

Arduino adalah sistem terbaik untuk menyalin sebarang peralatan. Sebilangan besar idea tidak akan dapat dilaksanakan tanpa dia. Sudah lama ada idea seperti itu: untuk membuat kunci kombinasi khas untuk arduino. Untuk membukanya, anda perlu menekan kekunci tertentu. Dalam kes ini, kunci tidak boleh dibuka, walaupun anda tahu butang yang betul. Untuk membukanya, perlu menahan selang waktu tertentu menggunakan memori otot. Penjenayah seperti itu tidak akan dapat melakukan. Tetapi ini hanyalah teori.

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:

Kunci kombinasi

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.

 

(3 undi)
Memuat ...

Tambah komen