Epätavallinen yhdistelmälukko Arduinossa
Sen kokoamiseksi sinun on käytettävä erityistä suorakulmaisten pulssien laitetta, useita laskuria ja kasa. Mutta valmiilla laitteella olisi suuret kokonaismitat ja sen käyttö olisi hankalaa. Sellaiset ajatukset kummittelevat yleensä. Ensimmäinen askel unen toteutumisessa oli ohjelman luominen Arduinolle. Se toimii yhdistelmälukkona. Avataksesi sen, sinun ei tarvitse painaa yhtä näppäintä, vaan useita ja tehdä se samanaikaisesti. Valmis järjestelmä näyttää tältä:
Kuvanlaatu ei ole paras, mutta yhteys on tehty maahan, D3, D5, D7, D9 ja D11.
Koodi esitetään alla:
const int ina = 3;
const int inb = 5;
const int inc = 9;
const int ledPin = 13;
int i = 1000;
tavu a = 0;
tavu b = 0;
tavu c = 0;
tavu d = 0;
allekirjoittamaton pitkä aika = 0; // älä unohda kaikkea mitä tarvitaan millis () arvoon
allekirjoittamaton pitkä temp = 0; // säilytä allekirjoittamatta pitkään
tavukeya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // koodit todella
tavukeyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
tavun keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
tavu k = 0;
tyhjä asennus () {
pinMode (ina, INPUT_PULLUP); // 3 tuloa kytketty painikkeisiin
pinMode (inb, INPUT_PULLUP);
pinMode (sis. INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // sisäänrakennettu LED 13. nastaan
pinMode (7, OUTPUT);
pinMode (11, OUTPUT);
digitalWrite (7, LOW); // korvaa maa
digitalWrite (11, LOW);
aika = millis (); // tarvitaan laskea aikaa
}
tyhjä blinktwice () {// kaksinkertainen vilkkuva LED
digitalWrite (ledPin, HIGH);
viive (100);
digitalWrite (ledPin, LOW);
viive (100);
digitalWrite (ledPin, HIGH);
viive (100);
digitalWrite (ledPin, LOW);
viive (200);
}
tyhjä silmukka () {
if (k == 0) {
blinktwice (); // kysymys koodista
}
if (k == 8) {
digitalWrite (ledPin, HIGH);
viive (3000);
k on 0;
}
a = digitalRead (ina); // lue signaalitasot painikkeista - painetaan / ei painettu
b = digitalRead (inb);
c = digitalRead (inc);
viive (100); // seuraavaksi jos - suoja vääriä positiivisia vastaan, et voi käyttää
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) {
aika = millis ();
d ++;
}
}
temp = millis ();
temp = temp - aika;
if (lämpötila> 10000) {
k on 0;
d on 0;
aika = millis ();
}
}
Jotkut kohdat olisi selkeytettävä, jotta vältetään tarpeettomat koodikysymykset. Asetustoimintoa käytetään porttien määrittämiseen. Seuraava toiminto on Input_Pullup, joka on tarpeen nostaaksesi tapin jännitettä 5 V. Tämä tehdään vastuksella. Tästä syystä erilaisia oikosulkuja ei tapahdu. Mukavuuden lisäämiseksi on suositeltavaa käyttää blinktwice-toimintoa. Yleensä, kun luot erilaisia ohjelmia, sinun on kokeiltava muita toimintoja.
Kun toiminnot on määritetty, signaali luetaan porteista. Jos painiketta painetaan, se merkitään numerolla 1, ja jos ei - 2. Seuraavaksi analyysi kaikista arvoista. Esimerkiksi oli sellainen yhdistelmä kuin 0,1,1. Tämä tarkoittaa, että ensimmäistä näppäintä painetaan ja kahta muuta ei. Jos kaikki arvot ovat totta, niin myös ehto 8 on totta. Tätä todistaa etupaneelin palava LED. Seuraavaksi sinun on annettava erityinen koodi, joka toimii oven avaamiseksi.
Koodin viimeisiä osia käytetään laskuriarvojen nollaamiseen. Tällainen toiminto suoritetaan, jos viimeisestä näppäinpainalluksesta on kulunut yli 10 sekuntia.Ilman tätä koodia voit käydä läpi kaikki mahdolliset vaihtoehdot, vaikka niitä onkin paljon. Tämän laitteen luomisen jälkeen sinun on testattava se.