Pany de combinació inusual a Arduino
Per muntar-lo cal utilitzar un dispositiu especial de polsos rectangulars, així com diversos comptadors i un munt. Però el dispositiu acabat tindria grans dimensions generals i seria inconvenient el seu ús. Per regla general, aquests pensaments assalten. El primer pas per a la realització d’un somni va ser la creació d’un programa per a Arduino. Servirà com a pany de combinació. Per obrir-lo, haureu de prémer no una tecla, sinó diverses, i fer-ho simultàniament. L’esquema finalitzat s’assembla així:
La qualitat de la imatge no és la millor, però la connexió es fa a terra, D3, D5, D7, D9 i D11.
A continuació es presenta el codi:
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;
temps no signat = 0; // No oblideu tot el que pren un valor millis ()
temporal sense signar = 0; // emmagatzemar en temps sense signar
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // codis de fet
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 entrades connectades als botons
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // LED incorporat al 13è pin
pinMode (7, OUTPUT);
pinMode (11, SORTIDA);
digitalWrite (7, BAIX); // substituir la terra
digitalWrite (11, BAIX);
temps = millis (); // necessitava comptar el temps
}
void blinktwice () {// LED intermitent doble
digitalWrite (ledPin, HIGH);
retard (100);
digitalWrite (ledPin, LOW);
retard (100);
digitalWrite (ledPin, HIGH);
retard (100);
digitalWrite (ledPin, LOW);
retard (200);
}
void loop () {
if (k == 0) {
blinktwice (); // sol·licitud de codi
}
if (k == 8) {
digitalWrite (ledPin, HIGH);
retard (3000);
k és 0;
}
a = digitalRead (ina); // llegir els nivells de senyal dels botons: prement / no premut
b = digitalRead (inb);
c = digitalRead (inc);
retard (100); // següent si: protecció contra falsos positius, no podeu utilitzar
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) {
temps = millis ();
d ++;
}
}
temp = millis ();
temp = temp - temps;
if (temp> 10000) {
k és 0;
d és 0;
temps = millis ();
}
}
Per evitar preguntes innecessàries sobre el codi, s’han d’aclarir alguns punts. La funció de configuració s'utilitza per assignar ports. La següent funció és Input_Pullup, que és necessària per augmentar la tensió del pin en 5 V. Això es fa mitjançant una resistència. A causa d'això, no es produiran diversos circuits curts. Per comoditat, es recomana fer servir la funció de parpelleig. En general, quan creeu diversos programes, heu de provar altres funcions.
Un cop assignades les funcions, el senyal es llegeix des dels ports. Si es prem el botó, s'indicarà amb el número 1, i si no - 2. A continuació, es farà una anàlisi de tots els valors. Per exemple, hi va haver una combinació de 0,1,1. Això vol dir que es prem la primera tecla i les altres dues no. Si tots els valors són certs, la condició 8 també és certa. Així ho demostra un LED il·luminat al panell frontal. A continuació, heu d’introduir un codi específic que serveixi per obrir la porta.
Els últims elements de codi s'utilitzen per restablir els valors del comptador. Aquesta funció es realitza si han passat més de 10 segons des de la darrera premsa de tecla.Sense aquest codi, podríeu passar per totes les opcions possibles, tot i que n’hi ha moltes. Després de crear aquest dispositiu, heu de provar-lo.