Blocare neobișnuită a combinației pe Arduino
Pentru a-l asambla, trebuie să utilizați un dispozitiv special cu impulsuri dreptunghiulare, precum și mai multe contoare și o grămadă. Însă dispozitivul finit ar avea dimensiuni generale mari și ar fi incomod să se folosească. De regulă, astfel de gânduri bântuie. Primul pas în realizarea unui vis a fost crearea unui program pentru Arduino. Acesta va servi drept blocare combinată. Pentru a o deschide, va trebui să apăsați nu o singură tastă, ci mai multe, și să o faceți simultan. Schema finalizată arată astfel:
Calitatea imaginii nu este cea mai bună, dar conexiunea se face la sol, D3, D5, D7, D9 și D11.
Codul este prezentat mai jos:
const int ina = 3;
const int inb = 5;
const int inc = 9;
const int ledPin = 13;
int i = 1000;
octet a = 0;
octet b = 0;
octetul c = 0;
octet d = 0;
timp nesemnat = 0; // nu uitați tot ce are o valoare millis ()
nesemnat timp lung = 0; // magazin în lung nesemnat
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // coduri de fapt
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
octetul k = 0;
void setup () {
pinMode (ina, INPUT_PULLUP); // 3 intrări conectate la butoane
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // LED încorporat pe al 13-lea ac
pinMode (7, OUTPUT);
pinMode (11, OUTPUT);
digitalWrite (7, LOW); // înlocuiește pământul
digitalWrite (11, LOW);
timp = millis (); // trebuia să numeri timpul
}
void blinktwice () {// LED dublu intermitent
digitalWrite (ledPin, HIGH);
întârziere (100);
digitalWrite (ledPin, LOW);
întârziere (100);
digitalWrite (ledPin, HIGH);
întârziere (100);
digitalWrite (ledPin, LOW);
întârziere (200);
}
void loop () {
if (k == 0) {
blinktwice (); // prompt pentru cod
}
if (k == 8) {
digitalWrite (ledPin, HIGH);
întârziere (3000);
k este 0;
}
a = digitalRead (ina); // citeste nivelurile semnalului de la butoane - apăsat / nu apăsat
b = digitalRead (inb);
c = digitalRead (inc);
întârziere (100); // următorul dacă - protecție împotriva falselor pozitive, nu puteți folosi
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) {
timp = millis ();
d ++;
}
}
temp = millis ();
temp = temp - timp;
if (temp> 10000) {
k este 0;
d este 0;
timp = millis ();
}
}
Pentru a evita întrebări inutile despre cod, anumite puncte ar trebui clarificate. Funcția de configurare este utilizată pentru a atribui porturi. Următoarea funcție este Input_Pullup, care este necesară pentru a crește tensiunea pinului cu 5 V. Aceasta se face folosind un rezistor. Din această cauză, nu vor apărea diverse scurtcircuite. Pentru comoditate, vă recomandăm să utilizați funcția blinktwice. În general, atunci când creați diverse programe, trebuie să încercați alte funcții.
După atribuirea funcțiilor, semnalul este citit din porturi. Dacă este apăsat butonul, atunci va fi indicat cu numărul 1, iar dacă nu - 2. Apoi, o analiză a tuturor valorilor. De exemplu, a existat o combinație de 0,1,1. Aceasta înseamnă că prima tastă este apăsată, iar celelalte două nu. Dacă toate valorile sunt adevărate, atunci condiția 8 este de asemenea adevărată. Acest lucru este demonstrat de un LED aprins pe panoul frontal. În continuare, trebuie să introduceți un cod specific care va servi pentru a deschide ușa.
Ultimele elemente de cod sunt utilizate pentru a reseta valorile contorului. O astfel de funcție este îndeplinită dacă au trecut mai mult de 10 secunde de la ultima apăsare a tastei.Fără acest cod, ai putea parcurge toate opțiunile posibile, deși există multe dintre ele. După crearea acestui dispozitiv, trebuie să îl testați.