Niezwykły zamek szyfrowy w Arduino
Aby go złożyć, musisz użyć specjalnego urządzenia prostokątnych impulsów, a także kilku liczników i stosu. Ale gotowe urządzenie miałoby duże gabaryty i byłoby niewygodne w użyciu. Z reguły takie myśli nawiedzają. Pierwszym krokiem w realizacji marzenia było stworzenie programu dla Arduino. Będzie służyć jako zamek szyfrowy. Aby go otworzyć, musisz nacisnąć nie jeden klawisz, ale kilka, i zrobić to jednocześnie. Gotowy schemat wygląda następująco:
Jakość obrazu nie jest najlepsza, ale połączenie jest wykonane z ziemią, D3, D5, D7, D9 i D11.
Kod jest przedstawiony poniżej:
const int ina = 3;
const int inb = 5;
const int inc = 9;
const int ledPin = 13;
int i = 1000;
bajt a = 0;
bajt b = 0;
bajt c = 0;
bajt d = 0;
długi czas bez znaku = 0; // nie zapomnij wszystkiego, co wymaga wartości millis ()
bez znaku długa temperatura = 0; // przechowuj długo bez znaku
bajt keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // kody faktycznie
bajt keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
bajt k = 0;
void setup () {
pinMode (ina, INPUT_PULLUP); // 3 wejścia podłączone do przycisków
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // wbudowana dioda LED na 13 styku
pinMode (7, WYJŚCIE);
pinMode (11, WYJŚCIE);
digitalWrite (7, LOW); // zastąp ziemię
digitalWrite (11, LOW);
czas = millis (); // trzeba liczyć czas
}
void blinktwice () {// podwójna migająca dioda LED
digitalWrite (ledPin, HIGH);
opóźnienie (100);
digitalWrite (ledPin, LOW);
opóźnienie (100);
digitalWrite (ledPin, HIGH);
opóźnienie (100);
digitalWrite (ledPin, LOW);
opóźnienie (200);
}
void loop () {
jeśli (k == 0) {
blinktwice (); // monit o kod
}
jeśli (k == 8) {
digitalWrite (ledPin, HIGH);
opóźnienie (3000);
k oznacza 0;
}
a = digitalRead (ina); // odczyt poziomów sygnałów z przycisków - wciśnięty / nie wciśnięty
b = digitalRead (inb);
c = digitalRead (inc);
opóźnienie (100); // next if - ochrona przed fałszywymi alarmami, których nie można użyć
if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
if (a == keya [k]) {
if (b == keyb [k]) {
if (c == keyc [k]) {
k ++;
}
}
}
}
jeśli (k == 1) {
jeśli (d == 0) {
czas = millis ();
d ++;
}
}
temp = millis ();
temp = temp - czas;
jeśli (temp> 10000) {
k oznacza 0;
d oznacza 0;
czas = millis ();
}
}
Aby uniknąć niepotrzebnych pytań dotyczących kodu, należy wyjaśnić niektóre punkty. Funkcja konfiguracji służy do przypisywania portów. Następną funkcją jest Input_Pullup, który jest niezbędny do zwiększenia napięcia pinu o 5 V. Odbywa się to za pomocą rezystora. Z tego powodu nie wystąpią różne zwarcia. Dla wygody zaleca się korzystanie z funkcji blinktwice. Ogólnie rzecz biorąc, tworząc różne programy, musisz wypróbować inne funkcje.
Po przypisaniu funkcji sygnał jest odczytywany z portów. Jeśli przycisk zostanie naciśnięty, będzie oznaczony numerem 1, a jeśli nie - 2. Następnie analiza wszystkich wartości. Na przykład istniała taka kombinacja jak 0,1,1. Oznacza to, że pierwszy klawisz jest wciśnięty, a pozostałe dwa nie. Jeśli wszystkie wartości są prawdziwe, wówczas warunek 8 również jest spełniony. Świadczą o tym zapalone diody LED na panelu przednim. Następnie musisz wprowadzić określony kod, który posłuży do otwarcia drzwi.
Ostatnie elementy kodu służą do resetowania wartości liczników. Taka funkcja jest wykonywana, jeśli od ostatniego naciśnięcia klawisza upłynęło więcej niż 10 sekund.Bez tego kodu możesz przejść przez wszystkie możliwe opcje, chociaż jest ich wiele. Po utworzeniu tego urządzenia musisz je przetestować.