Ovanligt kombinationslås på Arduino
För att montera det måste du använda en speciell enhet med rektangulära pulser, såväl som flera räknare och en hög. Men den färdiga enheten skulle ha stora övergripande dimensioner och det skulle vara olämpligt att använda. Som regel följer sådana tankar. Det första steget i förverkligandet av en dröm var att skapa ett program för Arduino. Det kommer att fungera som ett kombinationslås. För att öppna den, måste du trycka på inte en knapp, utan flera, och göra det samtidigt. Det färdiga schemat ser ut så här:
Bildkvaliteten är inte den bästa, men anslutningen görs till marken, D3, D5, D7, D9 och D11.
Koden presenteras nedan:
const int ina = 3;
const int inb = 5;
const int ink = 9;
const int ledPin = 13;
int i = 1000;
byte a = 0;
byte b = 0;
byte c = 0;
byte d = 0;
osignerad lång tid = 0; // glöm inte allt som tar ett millis () värde
osignerad lång temp = 0; // lagra i osignerad länge
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // koder faktiskt
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
byte k = 0;
ogiltig installation () {
pinMode (ina, INPUT_PULLUP); // 3 ingångar anslutna till knappar
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // inbyggd LED på den 13: e stiftet
pinMode (7, OUTPUT);
pinMode (11, OUTPUT);
digitalWrite (7, LÅG); // ersätt jorden
digitalWrite (11, LÅG);
tid = millis (); // behövde räkna tid
}
void blinktwice () {// dubbel blinkande LED
digitalWrite (ledPin, HIGH);
fördröjning (100);
digitalWrite (ledPin, LOW);
fördröjning (100);
digitalWrite (ledPin, HIGH);
fördröjning (100);
digitalWrite (ledPin, LOW);
fördröjning (200);
}
void loop () {
if (k == 0) {
blinktwice (); // fråga om kod
}
if (k == 8) {
digitalWrite (ledPin, HIGH);
fördröjning (3000);
k är 0;
}
a = digitalRead (ina); // läs signalnivåer från knappar - tryckt / inte tryckt
b = digitalRead (inb);
c = digitalRead (inc);
fördröjning (100); // nästa if - skydd mot falska positiver, du kan inte använda
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) {
tid = millis ();
d ++;
}
}
temp = millis ();
temp = temp - tid;
if (temp> 10000) {
k är 0;
d är 0;
tid = millis ();
}
}
För att undvika onödiga frågor om koden bör vissa punkter klargöras. Inställningsfunktionen används för att tilldela portar. Nästa funktion är Input_Pullup, vilket är nödvändigt för att öka stiftspänningen med 5 V. Detta görs med ett motstånd. På grund av detta inträffar inte olika kortslutningar. För större bekvämlighet rekommenderas det att använda blinktwice-funktionen. Generellt sett måste du prova andra funktioner när du skapar olika program.
Efter tilldelning av funktioner läses signalen från portarna. Om knappen trycks in, kommer den att visas med siffran 1, och om inte - 2. Därefter en analys av alla värden. Till exempel fanns en sådan kombination som 0,1,1. Detta innebär att man trycker på den första knappen och de andra två inte. Om alla värden är sanna, är tillstånd 8 också sant. Detta bevisas av en tänd LED på frontpanelen. Därefter måste du ange en specifik kod som ska fungera för att öppna dörren.
De sista kodelementen används för att återställa räknarvärdena. En sådan funktion utförs om mer än 10 sekunder har gått sedan det senaste tangenttrycket.Utan den här koden kan du gå igenom alla möjliga alternativ, även om det finns många av dem. När du har skapat den här enheten måste du testa den.