Bloqueio de combinação incomum no Arduino
Para montá-lo, você precisa usar um dispositivo especial de pulsos retangulares, além de vários contadores e um monte. Mas o dispositivo acabado teria grandes dimensões gerais e seria inconveniente de usar. Como regra, esses pensamentos assombram. O primeiro passo na realização de um sonho foi a criação de um programa para o Arduino. Servirá como uma fechadura de combinação. Para abri-lo, você precisará pressionar não uma tecla, mas várias, e fazê-lo simultaneamente. O esquema final é assim:
A qualidade da imagem não é a melhor, mas a conexão é feita no solo, D3, D5, D7, D9 e D11.
O código é apresentado abaixo:
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;
muito tempo sem sinal = 0; // não esqueça tudo o que leva um valor millis ()
temperatura longa não assinada = 0; // armazenar por muito tempo não assinado
byte keya [] = {0, 0, 0, 0, 0, 0, 0, 0}; // códigos realmente
byte keyb [] = {1, 1, 1, 1, 0, 1, 0, 0};
byte keyc [] = {1, 0, 1, 0, 1, 1, 1, 0};
byte k = 0;
configuração nula () {
pinMode (ina, INPUT_PULLUP); // 3 entradas conectadas aos botões
pinMode (inb, INPUT_PULLUP);
pinMode (inc, INPUT_PULLUP);
pinMode (ledPin, OUTPUT); // LED embutido no 13º pino
pinMode (7, SAÍDA);
pinMode (11, SAÍDA);
digitalWrite (7, BAIXO); // substitua a terra
digitalWrite (11, BAIXO);
tempo = milis (); // necessário para contar o tempo
}
void blinktwice () {// LED piscando duas vezes
digitalWrite (ledPin, HIGH);
atraso (100);
digitalWrite (ledPin, LOW);
atraso (100);
digitalWrite (ledPin, HIGH);
atraso (100);
digitalWrite (ledPin, LOW);
atraso (200);
}
loop vazio () {
se (k == 0) {
blinktwice (); // solicitação de código
}
se (k == 8) {
digitalWrite (ledPin, HIGH);
atraso (3000);
k é 0;
}
a = leitura digital (ina); // lê os níveis de sinal dos botões - pressionado / não pressionado
b = leitura digital (inb);
c = leitura digital (inc);
atraso (100); // next if - proteção contra falsos positivos, você não pode usar
if ((digitalRead (ina) == a) && (digitalRead (inb) == b) && (digitalRead (inc) == c)) {
if (a == keya [k]) {
if (b == chaveb [k]) {
if (c == keyc [k]) {
k ++;
}
}
}
}
se (k == 1) {
if (d == 0) {
tempo = milis ();
d ++;
}
}
temp = milis ();
temp = temp - tempo;
if (temp> 10000) {
k é 0;
d é 0;
tempo = milis ();
}
}
Para evitar perguntas desnecessárias sobre o código, alguns pontos devem ser esclarecidos. A função de configuração é usada para atribuir portas. A próxima função é Input_Pullup, necessária para aumentar a tensão do pino em 5 V. Isso é feito usando um resistor. Devido a isso, vários curtos-circuitos não ocorrerão. Para maior comodidade, é recomendável usar a função blinktwice. Em geral, ao criar vários programas, você precisa tentar outras funções.
Depois que as funções são atribuídas, o sinal é lido pelas portas. Se o botão for pressionado, será indicado pelo número 1 e, se não for - 2. Em seguida, uma análise de todos os valores. Por exemplo, houve uma combinação de 0,1,1. Isso significa que a primeira tecla é pressionada e as outras duas não. Se todos os valores forem verdadeiros, a condição 8 também será verdadeira. Isso é evidenciado por um LED aceso no painel frontal. Em seguida, você precisa inserir um código específico que servirá para abrir a porta.
Os últimos elementos de código são usados para redefinir os valores do contador. Essa função é executada se mais de 10 segundos se passaram desde o último pressionamento de tecla.Sem esse código, você poderia passar por todas as opções possíveis, embora existam muitas. Depois de criar este dispositivo, você precisa testá-lo.