No desenvolvimento de sistemas embarcados e projetos de automação, utilizar o ambiente de linha de comando para editar códigos é uma prática eficiente e muito comum em ambientes Linux. Neste artigo, vamos explorar como utilizar o editor de texto GNU Nano no sistema operacional Linux Mint, apresentar um código em C++ para controle de LED via botão com lógica de alternância (toggle), explicar linha por linha a sua estrutura e demonstrar como simulá-lo na plataforma Tinkercad.
1. Usando o Editor Nano no Linux Mint
O GNU Nano é um editor de texto simples, intuitivo e direto via terminal, muito utilizado no Linux Mint para criar scripts, ajustar configurações de sistema e escrever códigos para microcontroladores.
Passo 1: Abrindo o Terminal no Linux Mint
Abra o terminal utilizando o atalho do teclado: Ctrl + Alt + T.
Passo 2: Criando ou Abrindo um Arquivo no Nano
Digite o comando a seguir no terminal para criar e abrir um arquivo fonte chamado codigo.cpp (ou sketch.ino):
nano codigo.cpp
Passo 3: Editando o Código dentro do Nano
Após executar o comando, o editor Nano abrirá na própria janela do terminal. Você pode digitar ou colar seu código C/C++ diretamente na tela.
Passo 4: Atalhos para Salvar e Sair
- Salvar as alterações: Pressione
Ctrl + O, confirme o nome do arquivo pressionandoEnter. - Sair do Nano: Pressione
Ctrl + X. Se você alterou o arquivo e não salvou, ele perguntará se deseja salvar antes de fechar.
2. Compilando C++ no Linux via Linha de Comando
Se você estiver escrevendo um código em C++ padrão (sem as bibliotecas nativas do framework Arduino), pode compilá-lo no Linux Mint utilizando o compilador g++:
# Instalar o compilador g++ (caso ainda não possua)
sudo apt update && sudo apt install g++ -y
# Compilar o arquivo fonte C++
g++ codigo.cpp -o programa
# Executar o binário compilado
./programa
Nota: Códigos específicos para placas Arduino (como o utilizado a seguir) utilizam a biblioteca nativa do framework C/C++ da plataforma e dependem da ferramenta arduino-cli para compilação via terminal Linux ou da IDE Arduino/Simuladores para execução.
3. Código-Fonte: Controle de LED por Botão (Detecção de Borda de Queda)
Abaixo está o código em C++ para controle de estado de um LED utilizando um botão configurado com resistor de pull-up interno:
// Declaração das variáveis e pinos
const int pinoBotao = 2;
const int pinoLed = 13;
int estadoLed = LOW;
int leituraAnterior = HIGH;
void setup() {
pinMode(pinoBotao, INPUT_PULLUP); // ativa o resistor interno de pull-up
pinMode(pinoLed, OUTPUT); // configura o pino do LED como saída
}
void loop() {
int leituraAtual = digitalRead(pinoBotao);
// Detecção da transição de HIGH para LOW (botão pressionado)
if (leituraAtual == LOW && leituraAnterior == HIGH) {
estadoLed = !estadoLed; // inverte o estado do LED
digitalWrite(pinoLed, estadoLed); // atualiza a saída física
delay(50); // debouncing por software
}
leituraAnterior = leituraAtual; // atualiza a leitura prévia para o próximo ciclo
}
---
4. Explicação Detalhada do Código Passo a Passo
Configurações Iniciais (Bloco setup())
pinMode(pinoBotao, INPUT_PULLUP);
Configura o pino digital conectado ao botão como entrada com o resistor de pull-up interno ativado. Com isso, o pino lerá continuamente nível alto (HIGH/ 5V) quando o botão estiver solto. Ao ser pressionado, o pino é conectado ao pino GND, alterando seu estado para nível baixo (LOW/ 0V). Isso elimina a necessidade de colocar resistores externos no circuito do botão.pinMode(pinoLed, OUTPUT);
Configura o pino do LED como saída digital, permitindo ao microcontrolador enviar sinais elétricos em nívelHIGH(para acender) ouLOW(para apagar).
Laço Principal (Bloco loop())
int leituraAtual = digitalRead(pinoBotao);
Lê o estado lógico atual da porta digital associada ao botão e armazena o valor na variávelleituraAtual.if (leituraAtual == LOW && leituraAnterior == HIGH)
Detecta a borda de descida (falling edge). A condição só é satisfeita no exato instante em que o botão passa do estado solto (HIGH) para o estado pressionado (LOW). Isso evita que o LED fique alternando descontroladamente enquanto o botão permanece pressionado.estadoLed = !estadoLed;
Aplica o operador lógico de negação (!) para inverter o estado da variável booleana. Se estiver desligado (LOW), passa para ligado (HIGH), e vice-versa.digitalWrite(pinoLed, estadoLed);
Aplica no pino físico do LED o novo estado lógico atualizado.delay(50);
Cria uma pausa de 50 milissegundos para realizar o tratamento de debouncing via software, atenuando os ruídos mecânicos e trepidações de contato do botão.leituraAnterior = leituraAtual;
Atualiza a variável de memórialeituraAnteriorcom a leitura atual, preparando o programa para comparar novamente o estado do pino na próxima iteração do cicloloop().
5. Como Montar e Simular no Tinkercad Passo a Passo
Para testar o funcionamento da lógica sem a necessidade de componentes físicos, você pode utilizar a plataforma de simulação online Tinkercad Circuits.
Passo 1: Criar um Projeto
- Acesse tinkercad.com e faça login na sua conta.
- No menu lateral, clique em Criar > Circuito.
Passo 2: Adicionar os Componentes no Espaço de Trabalho
- 1x Placa Arduino Uno R3
- 1x Protoboard (Matriz de contatos)
- 1x Pushbutton (Botão)
- 1x LED (Qualquer cor)
- 1x Resistor de 220 Ω (Para limitação de corrente do LED)
Passo 3: Esquema de Ligação (Conexões)
- Conexão do Botão:
- Ligue um dos terminais do botão ao Pino Digital 2 do Arduino.
- Ligue o terminal oposto na mesma linha de contato ao pino GND do Arduino.
- Conexão do LED:
- Ligue o Anodo (perna mais longa/curvada do LED) ao Pino Digital 13 do Arduino.
- Ligue o Catodo (perna mais curta do LED) a um terminal do resistor de 220 Ω.
- Ligue o outro terminal do resistor ao pino GND do Arduino.
Passo 4: Inserir o Código
- No canto superior direito, clique no botão Código.
- Altere o modo de visualização de Blocos para Texto. Confirmando o aviso da plataforma.
- Apague o código padrão pré-carregado e cole o código-fonte C++ apresentado acima neste artigo.
Passo 5: Iniciar a Simulação
- Clique no botão verde Iniciar Simulação.
- Clique no botão interativo na protoboard: a cada clique completo (pressionar e soltar), o LED alternará entre os estados aceso e apagado de forma estável.