Lucchetto a combinazione insolito su Arduino
Per assemblarlo è necessario utilizzare un dispositivo speciale di impulsi rettangolari, nonché diversi contatori e un heap. Ma il dispositivo finito avrebbe grandi dimensioni complessive e sarebbe scomodo da usare. Di norma, tali pensieri perseguitano. Il primo passo nella realizzazione di un sogno è stata la creazione di un programma per Arduino. Funzionerà come un lucchetto a combinazione. Per aprirlo, dovrai premere non un tasto, ma diversi, e farlo contemporaneamente. Lo schema finito è simile al seguente:
La qualità dell'immagine non è la migliore, ma la connessione viene effettuata a terra, D3, D5, D7, D9 e D11.
Il codice è presentato di seguito:
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;
lungo tempo non firmato = 0; // non dimenticare tutto ciò che richiede un valore in millis ()
temp lungo senza segno = 0; // memorizza in unsigned long
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // codici effettivamente
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
byte k = 0;
void setup () {
pinMode (ina, INPUT_PULLUP); // 3 ingressi collegati ai pulsanti
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // LED incorporato sul 13 ° pin
pinMode (7, OUTPUT);
pinMode (11, OUTPUT);
digitalWrite (7, LOW); // sostituisce la terra
digitalWrite (11, LOW);
time = millis (); // doveva contare il tempo
}
void blinktwice () {// doppio LED lampeggiante
digitalWrite (ledPin, HIGH);
ritardo (100);
digitalWrite (ledPin, LOW);
ritardo (100);
digitalWrite (ledPin, HIGH);
ritardo (100);
digitalWrite (ledPin, LOW);
ritardo (200);
}
void loop () {
if (k == 0) {
blinktwice (); // richiede il codice
}
if (k == 8) {
digitalWrite (ledPin, HIGH);
ritardo (3000);
k è 0;
}
a = digitalRead (ina); // legge i livelli del segnale dai pulsanti - premuto / non premuto
b = digitalRead (inb);
c = digitalRead (inc);
ritardo (100); // avanti se - protezione da falsi positivi, non è possibile utilizzare
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) {
time = millis ();
d ++;
}
}
temp = millis ();
temp = temp - time;
if (temp> 10000) {
k è 0;
d è 0;
time = millis ();
}
}
Per evitare domande inutili sul codice, è necessario chiarire alcuni punti. La funzione di configurazione viene utilizzata per assegnare le porte. La funzione successiva è Input_Pullup, che è necessario per aumentare la tensione del pin di 5 V. Questo viene fatto usando un resistore. Per questo motivo, non si verificano vari cortocircuiti. Per comodità, si consiglia di utilizzare la funzione blinktwice. In generale, quando si creano vari programmi, è necessario provare altre funzioni.
Dopo l'assegnazione delle funzioni, il segnale viene letto dalle porte. Se si preme il pulsante, verrà indicato dal numero 1, e in caso contrario - 2. Successivamente, un'analisi di tutti i valori. Ad esempio, c'era una combinazione come 0,1,1. Ciò significa che viene premuto il primo tasto e gli altri due no. Se tutti i valori sono veri, anche la condizione 8 è vera. Ciò è evidenziato da un LED acceso sul pannello frontale. Successivamente, è necessario inserire un codice specifico che servirà per aprire la porta.
Gli ultimi elementi del codice vengono utilizzati per ripristinare i valori del contatore. Tale funzione viene eseguita se sono trascorsi più di 10 secondi dall'ultima pressione del tasto.Senza questo codice, potresti passare attraverso tutte le opzioni possibili, anche se ce ne sono molte. Dopo aver creato questo dispositivo, è necessario testarlo.