Projeto110 -Tranca Eletrônica com Arduino, Teclado Matricial, LCD I2C e LED RGB com Alteração Segura de Senha

Básico - Projeto 110

Simulação de uma Tranca Eletrônica com Arduino, Teclado Matricial, LCD I2C e LED RGB com senha permanente e segura

Objetivo

O objetivo deste tutorial é desenvolver uma simulação de uma tranca eletrônica com Arduino, utilizando um teclado matricial 4x4 para digitação de senha, um display LCD com interface I2C para exibir mensagens ao usuário, e um LED RGB para indicar visualmente o estado da tranca, que permanece vermelha enquanto fechada e verde quando aberta. Além disso, o sistema permite a alteração segura da senha, com armazenamento permanente na EEPROM, garantindo a persistência dos dados mesmo após desligar o equipamento:

O programa simula uma tranca eletrônica digital com senha, utilizando um teclado matricial 4x4 como interface de entrada.

Um LED RGB indica o estado da tranca: vermelho para fechada e verde para aberta.

Um display LCD com I2C exibe mensagens que orientam o usuário durante o uso do sistema.

A senha padrão pode ser modificada de forma segura, exigindo a senha atual antes de permitir a troca.

A senha é armazenada na EEPROM, garantindo que ela seja preservada mesmo após desligar o Arduino.

O sistema garante um controle de acesso simples e seguro, ideal para simulações de fechaduras eletrônicas.

Definições

Teclado Matricial

Teclado Matricial De Membrana 4 X 4: O Teclado Matricial foi desenvolvido para servir como interface de entrada de dados em sistemas eletrônicos. Este teclado possui 16 teclas distribuídos em 4 linhas e 4 colunas, onde 10 delas são números (0 a 9), 4 são letras (A, B, C e D) e 2 são caracteres especiais. Também possui um terminal com 8 vias para a ligação.

Como o teclado matricial de membrana 4 X 4 trabalha:

a. O teclado possui 16 teclas, que estão dispostas em 4 linhas por 4 colunas, e ele possui 8 pinos para ligação. 

b. Abaixo de cada tecla do teclado matricial existe um pequeno interruptor de membrana. Esses interruptores estão organizados em linhas e colunas, formando uma malha de conexões. Todos os interruptores de uma mesma linha estão interligados por uma trilha condutora, e o mesmo acontece com os interruptores de uma mesma coluna. Ou seja, cada tecla está localizada na interseção de uma linha com uma coluna, o que permite identificar exatamente qual botão foi pressionado.

c. Por isso, esse tipo de teclado é chamado de teclado matricial, já que sua estrutura elétrica se baseia em uma matriz de linhas e colunas. Em um teclado 4x4, por exemplo, são utilizadas 4 linhas e 4 colunas, totalizando 8 pinos (vias) de conexão com o Arduino. A imagem abaixo ilustra essa disposição de forma mais clara.

d. O Arduino detecta qual botão foi pressionado detectando o pino de linha (R1, R2, R3 ou R4) e coluna (C1, C2, C3 ou C4) conectado ao botão.

e. Esse método é eficiente porque permite a leitura de múltiplas teclas usando uma quantidade reduzida de pinos, sem a necessidade de um fio separado para cada botão. No caso de um teclado 4x4, por exemplo, são necessários apenas 8 pinos (4 linhas + 4 colunas) para monitorar 16 teclas.

f. A biblioteca Keypad do Arduino automatiza esse processo por meio de uma varredura multiplexada das linhas e colunas. Ela configura dinamicamente os pinos como entrada ou saída e verifica, em alta velocidade, as conexões entre linhas e colunas para identificar qual tecla foi pressionada. Isso elimina a necessidade de escrever manualmente toda a lógica de detecção, tornando o código mais simples, legível e confiável.

Como o Arduino detecta a tecla pressionada:

Se você deseja entender em detalhes como o Arduino detecta uma tecla pressionada em um teclado matricial 4x4 sem utilizar bibliotecas, recomendo a leitura do artigo completo no site da Squids:​

Como usar um Teclado Matricial 4x4 com Arduino (Sem Biblioteca)

Neste tutorial, você encontrará uma explicação detalhada sobre o funcionamento de teclados matriciais, incluindo a estrutura de linhas e colunas, o processo de varredura multiplexada e como implementar a leitura das teclas diretamente no código do Arduino, sem depender de bibliotecas externas. O artigo também aborda conceitos fundamentais de controle de hardware em baixo nível e gerenciamento de entradas digitais, proporcionando uma compreensão aprofundada do tema.

Memória EEPROM no Arduino

EEPROM no Arduino: A EEPROM (Electrically Erasable Programmable Read-Only Memory) é uma memória não volátil presente em muitos modelos de Arduino (como o Uno, Nano, Mega), usada para armazenar dados que permanecem mesmo após desligar o dispositivo.

No Arduino Uno, por exemplo, a EEPROM possui 1.024 bytes de capacidade.

Utilização no Arduino: A EEPROM é acessada pela biblioteca EEPROM.h e permite gravar e ler dados byte a byte (valores de 0 a 255). Pode ser usada para armazenar:

  • Senhas de sistemas de segurança

  • Configurações de usuário

  • Último estado de dispositivos

Lógica de leitura e gravação

  • A lógica de gravação na EEPROM do Arduino é baseada em endereçamento direto (byte a byte de 0 a 1023).

  • Cada byte pode guardar um valor de 0 a 255.

Cuidados ao usar a EEPROM:

  • Ciclo de gravação limitado:
    A EEPROM suporta cerca de 100.000 ciclos de escrita por célula. Evite gravar repetidamente o mesmo endereço em intervalos curtos (ex.: dentro do loop()), pois isso pode desgastar a memória.

  • Verificação antes de gravar:
    Sempre verifique se o valor a ser gravado já está presente antes de escrever, para evitar escritas desnecessárias:

    if (EEPROM.read(addr) != valor) {
      EEPROM.write(addr, valor);
    }
  • Ou de forma mais simples, mais limpa e segura:
    EEPROM.update(addr, valor);
  • Gerenciamento de espaço:
    Organize os dados na EEPROM com cuidado para não sobrescrever informações importantes.

  • Salvar somente quando necessário:
    Por exemplo, ao confirmar a alteração de uma senha, e não a cada digitação.

  • Não usar como RAM:
    A EEPROM é lenta e não apropriada para leitura e gravação em tempo real contínuas.

Referências

Projeto108 - Como usar um Teclado Matricial 4x4 com Arduino (Com Biblioteca Keypad)

Projeto107 - Como usar um Teclado Matricial 4x4 com Arduino (Sem Biblioteca)

Projeto 48a - Como controlar um display LCD com o módulo I2C (LiquidCrystal_I2C)

Projeto 38 - Controlando um display LCD (instalação e comandos básicos) (Caso não possua um módulo I2C e queira adaptar o projeto para usar o display LCD sem adaptador)

Projeto 23 - Criando efeito de cores com um LED RGB

Aplicação

Para fins didáticos e em projetos reais de controle de acesso, como fechaduras eletrônicas para portas, cofres ou gavetas (quando acoplado a solenóides ou motores para acionamento físico da tranca). Também é aplicável em sistemas de restrição de uso de equipamentos, como impressoras, bancadas de laboratório e painéis elétricos ou eletrônicos, além de poder integrar soluções de segurança em ambientes residenciais ou comerciais.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

Teclado Matricial de Membrana Teclado Matricial de Membrana 4 X 4 (16 teclas) 1

Teclas: 16

Conector: 8 pinos (2,54mm)

Montagem: Auto-Adesivo

Limites de Operação: 35VDC, 100mA

Isolação: 100MΩ, 100V

Tempo de contato: 5ms

Durabilidade: 1 milhão de ciclos por tecla

Temperatura de Funcionamento: 0-70°C

Jumpers Kit cabos ligação macho / macho 1  
Display LCD Display LCD 16 X 2 com pinos soldados 1

LCD que utilize o controlador HD44780 (veja na descrição ou datasheet do componente)

O display poderá ser de qualquer cor (fundo verde, azul ou vermelho)

Módulo I2C

Módulo I2C com CI PCF8574

1 Módulo I2C display LCD Arduino

O módulo I2C poderá vir separado ou já soldado no display LCD

(datasheet)

Led RGB Led RGB 5mm 1

Você poderá utilizar um LED RGB ânodo ou cátodo.

Você poderá utilizar também um LED RGB difuso ou de alto brilho.

Arduino UNO R3 Arduino UNO 1

Você poderá utilizar uma placa Arduino UNO original ou similar

Montagem do Circuito

Conecte os componentes como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito.

Atenção

1. Verifique abaixo como devem ser as conexões do Teclado Matricial no Arduino:

Pinos de conexão do Teclado Matricial

1.1. Tabela de conexão com o Arduino (de acordo com o nosso exemplo)

Pinos do Teclado Matricial Pinos Digitais do Arduino
L1 9
L2 8
L3 7
L4 6
C1 5
C2 4
C3 3
C4 2

2. No projeto, vamos utilizar também um display LCD 16x2 com controlador HD44780, que se adapta aos mais diversos projetos com vários modelos de placas e microcontroladores. Este display possui 16 colunas por 2 linhas com backlight (luz de fundo) verde, azul ou vermelha e tem 16 pinos para a conexão.

3. Para a montagem do display com adaptador I2C, entenda a estrutura do módulo I2C para display LCD 16x2 / 20X4:

Módulo I2C - Detalhes

3.1. Na lateral do adaptador encontramos 4 pinos, sendo: 2 pinos para alimentação (Vcc e GND) e 2 pinos para conexão com a interface I2C (SDA e SCL) que deverão estar conectados nos pinos analógicos A4 (SDA) e A5 (SCL) do Arduino Uno ou nos pinos A20 (SDA) e A21 (SCL) do Arduino Mega 2560. Veja a tabela abaixo com onde temos as principais placas Arduino e suas conexões com o I2C.

3.2. Para controlar o contraste do display, utilize o potenciômetro de ajuste de contraste. O jumper lateral, quando utilizado, permite que a luz do fundo (backlight) seja controlada pelo programa ou permaneça apagada.

3.3. O módulo I2C pode ser separado ou já vir soldado no próprio display LCD. Para saber todos os detalhes sobre a montagem e utilização de display LCD com módulo I2C leia: Projeto 48a - Como controlar um display LCD com o módulo I2C (LiquidCrystal_I2C) .

3.4. Caso não possua um módulo I2C e queira adaptar o projeto para usar o display LCD sem adaptador leia: Projeto 38 - Controlando um display LCD (instalação e comandos básicos). Depois você terá que adaptar o projeto aproveitando os 8 pinos restantes para a montagem do Teclado Matricial. Também terá que ajustar o código para essas alterações.

4. Lembre-se que existem 2 tipos de LED RGB, o ânodo comum e o cátodo comum. Observe que para cada uma das cores existe um terminal, e além disso o quarto terminal (maior) deverá ser conectado ao polo positivo (ânodo comum) e ao polo negativo (cátodo comum).

4.1. No projeto usamos um LED RGB ânodo comum, portanto conectamos o terminal mais longo no 5Vcc (polo positivo do Arduino).

4.2. ATENÇÃO: Caso tenha um LED RGB cátodo comum, conecte o terminal mais longo no GND (polo negativo do Arduino).

4.3. Para saber mais sobre LED RGB leia: Projeto 23 - Criando efeito de cores com um LED RGB

4.2. Leia também: Led RGB anodo comum ou o Led RGB catodo comum? Como identificar e usar com Arduino (circuito e programação).

5. A montagem do nosso exemplo foi realizada com um display LCD com comunicação via protocolo I2C.

Incluindo a biblioteca LiquidCrystal_I2C

Atenção 1: Caso você opte pela utilização do display de LCD sem o módulo I2C, siga os procedimentos do Projeto 38 - Controlando um display LCD (instalação e comandos básicos) e não instale a biblioteca abaixo.

Atenção 2: Se estiver utilizando uma biblioteca diferente para o controle do módulo I2C, lembre-se de ajustar o código do projeto de acordo com os comandos específicos dessa biblioteca.

Para que o módulo I2C funcione corretamente é necessário adicionarmos a biblioteca LiquidCrystal_I2C  no IDE do Arduino. Uma das grandes vantagens das placas Arduino é a diversidade de bibliotecas disponíveis que podem ser utilizadas em seus programas. Estas bibliotecas podem ser criadas para a linguagem "C" ou especificamente para o Arduino, reduzindo drasticamente o tempo gasto com programação.

Instalação da biblioteca

1. No IDE do Arduino, acesse a aba Sketch (Rascunho), selecione [Incluir Biblioteca] e depois [Gerenciar Bibliotecas...]. 

2.  No campo de pesquisa digite LiquidCrystal_I2C. Localizada a biblioteca LiquidCrystal_I2C (por Frank de Brabander) clique no botão [Instalar].

3. Após a instalação, observe que aparecerá a informação que a biblioteca foi instalada.

Para saber detalhes desta biblioteca clique aqui.

Biblioteca Wire

1. Para realizar a comunicação via protocolo I2C (comunicação com 2 fios: clock (SCL) e dado (SDA) podemos utilizar a biblioteca Wire.h que já vem instalada por padrão no IDE do Arduino.

2. A biblioteca Wire.h é responsável por conter as funções necessárias para gerenciar a comunicação entre os dispositivos através do protocolo I2C.

3. Muitas bibliotecas específicas para módulos e sensores com comunicação I2C já tem incluído a biblioteca Wire no seu escopo. Entretanto, é recomendável utilizar sempre essa biblioteca quando utilizarmos a comunicação via protocolo I2C, afim de evitarmos possíveis erros de comunicação.

Incluindo a biblioteca Keypad

Para facilitar o uso do Teclado Matricial de Membrana 4x4, utilizaremos a biblioteca Keypad, que automatiza o processo de detecção das teclas pressionadas. Com ela, não é necessário lidar diretamente com os detalhes da varredura multiplexada, pois toda a lógica de leitura da matriz de linhas e colunas é gerenciada internamente pela biblioteca, tornando o desenvolvimento mais simples e eficiente.

Instalação da biblioteca

1. No IDE do Arduino, acesse a aba Sketch (Rascunho), selecione [Incluir Biblioteca] e depois [Gerenciar Bibliotecas...].

2.  No campo de pesquisa digite Keypad. Localizada a biblioteca Keypad (por Mark Stanley, Alexander) clique no botão [Instalar].

3. Após a instalação, observe que aparecerá a informação que a biblioteca foi instalada.

Código do Projeto (Sketch)

1. Faça o download e abra o arquivo projeto110.ino no IDE do Arduino: DOWNLOAD - projeto110.ino

Obs. 1: Nos casos em que módulo I2C estiver configurado com uma faixa de endereços diferente do endereço 0X27 altere a alinha de programação -> LiquidCrystal_I2C lcd(0x27,16,2); com o endereço correto.

Obs. 2: Se estiver utilizando um display de LCD 20 X 4, altere para  LiquidCrystal_I2C lcd(0x27,20,4);

Obs. 3: Se estiver utilizando uma biblioteca diferente para o controle do módulo I2C, ajuste o código do projeto de acordo com os comandos específicos dessa biblioteca.

Obs. 4: Se não possuir o módulo I2C utilize apenas o display LCD conforme Projeto 38 - Controlando um display LCD (instalação e comandos básicos) e ajuste o sketch para esta configuação. Lembrando que você terá que alterar a montagem do Teclado Matricial conectando-o nos pinos digitais que restarem.

2. Se preferir, copie e cole o código abaixo no IDE do Arduino:

/*******************************************************************************
*
*          Projeto 110: Tranca eletrônica com Arduino e teclado matricial
                http://squids.com.br/arduino
*               Autor: Angelo Luis Ferreira
*
*******************************************************************************/

#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>

// --- LCD via I2C ---
LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço 0x27 é o mais comum

// --- Teclado ---
const byte linhas = 4, colunas = 4;
char keys[linhas][colunas] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[linhas] = {9, 8, 7, 6};
byte colPins[colunas] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, linhas, colunas);

// --- LED RGB ---
const int redPin = A0;
const int greenPin = A1;
const int bluePin = A2;

// --- Controle de senha ---
const int MAX_SENHA = 6;
int senhaEnd = 0;

String senhaAtual = "";
bool modoConfig = false;
String buffer = "";

// --- Funções EEPROM ---
String lerSenhaEEPROM() {
  byte len = EEPROM.read(senhaEnd);
  String s = "";
  for (int i = 1; i <= len; i++) {
    s += char(EEPROM.read(senhaEnd + i));
  }
  return s;
}

void salvarSenhaEEPROM(const String &s) {
  byte len = s.length();
  EEPROM.update(senhaEnd, len); // Usa update para gravar apenas se necessário
  for (int i = 0; i < len; i++) {
    EEPROM.update(senhaEnd + 1 + i, s[i]);
  }
}

// --- LED ---
void setColor(int r, int g, int b) {
  digitalWrite(redPin, r);
  digitalWrite(greenPin, g);
  digitalWrite(bluePin, b);
}

// --- Setup ---
void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);

  lcd.init();
  lcd.backlight();

  senhaAtual = lerSenhaEEPROM();
  if (senhaAtual.length() < 1 || senhaAtual.length() > MAX_SENHA) {
    senhaAtual = "1234";
    salvarSenhaEEPROM(senhaAtual);
  }

  setColor(0, 255, 255); // vermelho = trancado
  lcd.clear();
  lcd.print("Tranca fechada");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Digite senha:");
}

// --- Loop ---
void loop() {
  char key = keypad.getKey();
  if (!key) return;

  if (!modoConfig) {
    if (key == '*') {
      modoConfig = true;
      buffer = "";
      lcd.clear();
      lcd.print("Nova senha:");
    }
    else if (key != '#') {
      buffer += key;
      lcd.setCursor(buffer.length(), 1);
      lcd.print('*');
      if (buffer.length() >= senhaAtual.length()) {
        delay(200);
        if (buffer == senhaAtual) {
          abrirTranca();
        } else {
          lcd.clear();
          lcd.print("Senha incorreta");
          delay(1000);
          reiniciar();
        }
      }
    }
  } else {
    if (key == '#') {
      if (buffer.length() >= 4) {
        salvarSenhaEEPROM(buffer);
        senhaAtual = buffer;
        lcd.clear();
        lcd.print("Senha alterada!");
        delay(1000);
      } else {
        lcd.clear();
        lcd.print("Min 4 digitos");
        delay(1000);
      }
      reiniciar();
    } else if (key == '*') {
      reiniciar();
    } else {
      if (buffer.length() < MAX_SENHA) {
        buffer += key;
        lcd.setCursor(buffer.length(), 1);
        lcd.print('*');
      }
    }
  }
}

// --- Funções auxiliares ---
void abrirTranca() {
  setColor(255, 0, 255);
  lcd.clear();
  lcd.print("Acesso liberado");
  delay(2000);
  reiniciar();
}

void reiniciar() {
  modoConfig = false;
  buffer = "";
  setColor(0, 255, 255);
  lcd.clear();
  lcd.print("Tranca fechada");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Digite senha:");
}

Vídeo

Como o projeto deve funcionar

  • Estado inicial

    • O LCD exibe "Tranca fechada" seguido de "Digite senha:".

    • O LED RGB permanece vermelho, indicando que a tranca está bloqueada.

    • O sistema aguarda a digitação da senha pelo teclado matricial.

  • Digitação da senha

    • Cada tecla digitada aparece como * no LCD (para ocultar a senha).

    • Quando a quantidade de dígitos digitada for igual ao tamanho da senha cadastrada, a verificação é feita automaticamente.

  • Senha correta

    • O LED RGB muda para verde, simulando a tranca aberta.

    • O LCD exibe "Acesso liberado".

    • Após alguns segundos, a tranca retorna automaticamente ao estado inicial (fechada).

  • Senha incorreta

    • O LCD mostra a mensagem "Senha incorreta".

    • O LED permanece vermelho.

    • Após alguns segundos, o sistema retorna à tela inicial pedindo a senha novamente.

  • Alteração da senha

    • Ao pressionar a tecla *, o sistema entra no modo de configuração de senha.

    • O LCD exibe "Nova senha:".

    • O usuário deve digitar a nova senha (mínimo 4 dígitos, máximo 6 dígitos).

    • Ao pressionar #, a nova senha é gravada na EEPROM (memória permanente do Arduino).

    • O LCD confirma com a mensagem "Senha alterada!".

    • O sistema retorna automaticamente para o estado inicial (tranca fechada).

  • Cancelamento da alteração de senha

    • Se o usuário pressionar * novamente durante a configuração, o processo é cancelado e o sistema volta ao estado inicial.

  • Memória EEPROM

    • A senha é salva permanentemente na EEPROM.

    • Mesmo desligando o Arduino, a senha personalizada permanece gravada.

    • Se a EEPROM estiver vazia ou com dados inválidos, o sistema define automaticamente a senha padrão: 1234.

5. Teclas de Operação: Cada tecla especial do teclado 4x4 tem uma função definida:

  • Ao pressionar a tecla "*", o sistema entra no modo de configuração de senha.

  • Ao pressionar "#" no modo de configuração de senha, a nova senha é gravada na EEPROM (memória permanente do Arduino).

Explicando o código do projeto

Estrutura geral

Esse projeto implementa uma tranca eletrônica com:

  • Teclado matricial 4x4 → para digitar a senha.

  • LCD 16x2 via I2C → para mostrar mensagens ao usuário.

  • LED RGB → indicando se a tranca está fechada (vermelho) ou aberta (verde).

  • EEPROM → para salvar a senha de forma permanente (mesmo desligando a placa).


1. Inclusão de bibliotecas

#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
  • Keypad → facilita a leitura de teclas no teclado matricial.

  • Wire → usada pela comunicação I2C.

  • LiquidCrystal_I2C → controla o LCD com apenas 2 fios (SDA/SCL). 

  • EEPROM → grava/ler dados permanentes, como a senha.


2. Configuração do hardware

LiquidCrystal_I2C lcd(0x27, 16, 2);
  • Inicializa o LCD com endereço I2C 0x27, comum na maioria dos módulos.
const byte linhas = 4, colunas = 4;
char keys[linhas][colunas] = { ... };
byte rowPins[linhas] = {9, 8, 7, 6};
byte colPins[colunas] = {5, 4, 3, 2};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, linhas, colunas);
const int redPin = A0;
const int greenPin = A1;
const int bluePin = A2;
  • Pinos usados para o LED RGB.

  • Observe que foram utilizados pinos analógicos (A0, A1 e A2) como saídas digitais. Isto é possível quando usamos a função  pinMode(A1, OUTPUT); no setup.
  • Aqui o LED é controlado com liga/desliga simples (não PWM).


3. Controle de senha

const int MAX_SENHA = 6;
int senhaEnd = 0;
String senhaAtual = "";
bool modoConfig = false;
String buffer = "";
  • const int MAX_SENHA → limite de caracteres da senha.

  • int senhaEnd → posição inicial onde a senha será gravada na EEPROM.

  • String senhaAtual → guarda a senha que está salva.

    • No Arduino, "String" (com 'S' maiúsculo) antes de um nome de variável significa que você está declarando uma variável do tipo classe String, usada para armazenar e manipular sequências de texto (cadeias de caracteres) como palavras e frases. Este tipo é uma classe poderosa que oferece funções extras para trabalhar com texto, tornando-o uma maneira mais simples de lidar com texto em comparação com o uso de arrays de caracteres (char). Leia Projeto 46 - Mostrando texto digitado pelo computador no display LCD com scroll e contador de caracteres
  • bool modoConfig → controla se o sistema está no modo normal ou de alterar senha.

  • String buffer → armazena temporariamente os dígitos digitados pelo usuário.

    • O buffer é uma área de memória temporária usada para armazenar dados, principalmente na comunicação serial, antes de serem lidos ou processados pelo microcontrolador. Quando o Arduino recebe dados via comunicação serial (por exemplo, do teclado matricial), esses dados são primeiro armazenados num "buffer", que é como uma fila de espera.

4. Funções EEPROM

  • String lerSenhaEEPROM() → lê a senha armazenada na EEPROM e a retorna como uma String.

  • void salvarSenhaEEPROM() → grava a nova senha na EEPROM, mas só escreve quando há alteração (EEPROM.update).
    ???? Isso preserva a vida útil da EEPROM.

Função lerSenhaEEPROM()

String lerSenhaEEPROM() {
  byte len = EEPROM.read(senhaEnd);
  String s = "";
  for (int i = 1; i <= len; i++) {
    s += char(EEPROM.read(senhaEnd + i));
  }
  return s;
}
  • O primeiro byte da memória (endereço senhaEnd) não guarda parte da senha em si, mas sim o comprimento da senha (quantos caracteres ela tem).

      • Exemplo: se a senha for 1234, len = 4.

  • Cria a String s vazia que será usada para ir montando a senha.

  • Percorre cada posição da EEPROM onde os caracteres da senha estão armazenados.

  • Converte o valor lido (byte) em caractere (char) e acrescenta na String s.

  • O primeiro caractere está em senhaEnd + 1, porque senhaEnd foi usado para salvar o comprimento.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores