Khóa kết hợp bất thường trên Arduino
Để lắp ráp nó, bạn cần sử dụng một thiết bị đặc biệt gồm các xung hình chữ nhật, cũng như một số bộ đếm và một đống. Nhưng thiết bị đã hoàn thành sẽ có kích thước tổng thể lớn và nó sẽ gây bất tiện khi sử dụng. Như một quy luật, những suy nghĩ như vậy ám ảnh. Bước đầu tiên để thực hiện giấc mơ là tạo ra một chương trình cho Arduino. Nó sẽ phục vụ như một khóa kết hợp. Để mở nó, bạn sẽ cần nhấn không phải một phím, mà là nhiều phím và thực hiện đồng thời. Lược đồ hoàn thành trông như thế này:
Chất lượng hình ảnh không phải là tốt nhất, nhưng kết nối được thực hiện với mặt đất, D3, D5, D7, D9 và D11.
Mã được trình bày dưới đây:
const int ina = 3;
const int inb = 5;
const int inc = 9;
const int ledPin = 13;
int i = 1000;
byte a = 0;
byte b = 0;
byte c = 0;
byte d = 0;
thời gian dài không dấu = 0; // đừng quên mọi thứ có giá trị millis ()
temp dài không dấu = 0; // lưu trữ trong dấu dài
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // mã thực sự
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
byte k = 0;
void setup () {
pinMode (ina, INPUT_PULLUP); // 3 đầu vào được kết nối với các nút
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // đèn LED tích hợp trên chân thứ 13
pinMode (7, ĐẦU RA);
pinMode (11, ĐẦU RA);
kỹ thuật sốWrite (7, THẤP); // thay thế trái đất
kỹ thuật sốWrite (11, THẤP);
thời gian = millis (); // cần thiết để đếm thời gian
}
void blinktwice () {// đèn LED nhấp nháy kép
kỹ thuật sốWrite (ledPin, CAO);
độ trễ (100);
kỹ thuật sốWrite (ledPin, THẤP);
độ trễ (100);
kỹ thuật sốWrite (ledPin, CAO);
độ trễ (100);
kỹ thuật sốWrite (ledPin, THẤP);
trì hoãn (200);
}
void loop () {
if (k == 0) {
chớp mắt (); // nhắc mã
}
if (k == 8) {
kỹ thuật sốWrite (ledPin, CAO);
độ trễ (3000);
k là 0;
}
a = kỹ thuật sốRead (ina); // đọc mức tín hiệu từ các nút - nhấn / không nhấn
b = kỹ thuật sốRead (inb);
c = kỹ thuật sốRead (inc);
độ trễ (100); // next if - bảo vệ chống lại dương tính giả, bạn không thể sử dụng
if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
if (a == keya [k]) {
if (b == keyb [k]) {
if (c == keyc [k]) {
k ++;
}
}
}
}
if (k == 1) {
if (d == 0) {
thời gian = millis ();
d ++;
}
}
temp = millis ();
temp = temp - thời gian;
if (temp> 10000) {
k là 0;
d là 0;
thời gian = millis ();
}
}
Để tránh những câu hỏi không cần thiết về mã, một số điểm cần được làm rõ. Chức năng thiết lập được sử dụng để gán các cổng. Chức năng tiếp theo là Input_Pullup, cần thiết để tăng điện áp chân lên 5 V. Điều này được thực hiện bằng cách sử dụng một điện trở. Do đó, các mạch ngắn khác nhau sẽ không xảy ra. Để thuận tiện hơn, nên sử dụng chức năng blinktwice. Nói chung, khi tạo các chương trình khác nhau, bạn cần thử các chức năng khác.
Sau khi các chức năng được gán, tín hiệu được đọc từ các cổng. Nếu nút được nhấn, thì nó sẽ được chỉ định bằng số 1 và nếu không - 2. Tiếp theo, tất cả các giá trị được phân tích. Ví dụ, có một sự kết hợp như 0,1,1. Điều này có nghĩa là phím đầu tiên được nhấn và hai phím còn lại thì không. Nếu tất cả các giá trị là đúng, thì điều kiện 8 cũng đúng. Điều này được chứng minh bằng một đèn LED sáng trên bảng điều khiển phía trước. Tiếp theo, bạn cần nhập một mã cụ thể sẽ phục vụ để mở cửa.
Các phần tử mã cuối cùng được sử dụng để đặt lại các giá trị bộ đếm. Một chức năng như vậy được thực hiện nếu hơn 10 giây trôi qua kể từ lần nhấn phím cuối cùng.Không có mã này, bạn có thể đi qua tất cả các tùy chọn có thể, mặc dù có rất nhiều trong số chúng. Sau khi tạo thiết bị này, bạn cần kiểm tra nó.