Ongebruikelijk combinatieslot op Arduino
Om het te monteren, moet je een speciaal apparaat met rechthoekige pulsen gebruiken, evenals verschillende tellers en een hoop. Maar het voltooide apparaat zou grote totale afmetingen hebben en het zou lastig zijn om te gebruiken. Dergelijke gedachten blijven in de regel achtervolgen. De eerste stap in het realiseren van een droom was het maken van een programma voor Arduino. Het zal dienen als cijferslot. Om het te openen, hoeft u niet op één toets maar op meerdere toetsen te drukken en dit tegelijkertijd te doen. Het afgewerkte schema ziet er als volgt uit:
De beeldkwaliteit is niet de beste, maar de verbinding wordt gemaakt met de grond, D3, D5, D7, D9 en D11.
De code wordt hieronder weergegeven:
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;
ongetekende lange tijd = 0; // vergeet niet alles waarvoor een millis () waarde nodig is
ongetekende lange temp = 0; // opslaan in ongetekende lang
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // codes eigenlijk
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
byte k = 0;
ongeldige setup () {
pinMode (ina, INPUT_PULLUP); // 3 ingangen aangesloten op knoppen
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // ingebouwde LED op de 13e pin
pinMode (7, OUTPUT);
pinMode (11, OUTPUT);
digitalWrite (7, LOW); // vervang de aarde
digitalWrite (11, LOW);
tijd = millis (); // nodig om tijd te tellen
}
void blinktwice () {// dubbel knipperende LED
digitalWrite (ledPin, HIGH);
vertraging (100);
digitalWrite (ledPin, LOW);
vertraging (100);
digitalWrite (ledPin, HIGH);
vertraging (100);
digitalWrite (ledPin, LOW);
vertraging (200);
}
leegte lus () {
als (k == 0) {
blinktwice (); // vraag om code
}
als (k == 8) {
digitalWrite (ledPin, HIGH);
vertraging (3000);
k is 0;
}
a = digitalRead (ina); // lees signaalniveaus van knoppen - ingedrukt / niet ingedrukt
b = digitalRead (inb);
c = digitalRead (inc);
vertraging (100); // volgende als - bescherming tegen false positives, kunt u niet gebruiken
if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
if (a == keya [k]) {
if (b == keyb [k]) {
if (c == keyc [k]) {
k ++;
}
}
}
}
als (k == 1) {
if (d == 0) {
tijd = millis ();
d ++;
}
}
temp = millis ();
temp = temp - tijd;
if (temp> 10000) {
k is 0;
d is 0;
tijd = millis ();
}
}
Om onnodige vragen over de code te voorkomen, moeten enkele punten worden verduidelijkt. De setup-functie wordt gebruikt om poorten toe te wijzen. De volgende functie is Input_Pullup, wat nodig is om de pinspanning met 5 V te verhogen. Dit wordt gedaan met behulp van een weerstand. Hierdoor zullen verschillende kortsluitingen niet optreden. Voor meer gemak wordt aanbevolen om de blinktwice-functie te gebruiken. Over het algemeen moet u bij het maken van verschillende programma's andere functies proberen.
Nadat de functies zijn toegewezen, wordt het signaal gelezen uit de poorten. Als de knop wordt ingedrukt, wordt deze aangegeven met het cijfer 1, en zo niet - 2. Vervolgens een analyse van alle waarden. Er was bijvoorbeeld zo'n combinatie als 0,1,1. Dit betekent dat de eerste toets wordt ingedrukt en de andere twee niet. Als alle waarden waar zijn, dan is voorwaarde 8 ook waar. Dit blijkt uit een verlichte LED op het voorpaneel. Vervolgens moet u een specifieke code invoeren die dient om de deur te openen.
De laatste code-elementen worden gebruikt om de tellerwaarden te resetten. Een dergelijke functie wordt uitgevoerd als er meer dan 10 seconden zijn verstreken sinds de laatste toetsaanslag.Zonder deze code zou je alle mogelijke opties kunnen doorlopen, hoewel er veel zijn. Nadat je dit apparaat hebt gemaakt, moet je het testen.