Introdução às portas lógicas para microcontroladores 7

Muitas vezes quando estamos fazendo algum programa, precisamos juntar condições para o nosso algoritmo e queremos que duas condições sejam satisfeitas para fazer algo. Nesses casos podemos utilizar as portas lógicas, que serão apresentadas nesse post.

O que são portas lógicas?

É de conhecimento geral que os computadores operam utilizando bits. Os conhecidos 0’s e 1’s representam estados (verdadeiro ou falso) dentro dos circuitos dos computadores e, utilizando esses valores, podem significar desde imagens até programas mais complexos.

Muito antes de existir a computação como conhecemos hoje, já se estudavam formas de realizar operações com verdadeiro ou falso. Ainda no século XIX , o matemático e filósofo George Boole estruturou um sistema algébrico que trabalha com essas proposições. Até hoje a álgebra booleana é amplamente utilizada em sistemas digitais, lógica proposicional e posteriormente em linguagens de programação.

Quando falamos de sistemas digitais, o termo “porta lógica” é bastante utilizado. Na parte de programação, fala-se bastante em “operações lógicas”. No fim das contas o significado é o mesmo e, entendendo o conceito, é possível utilizá-lo em diversos ramos da tecnologia.

Toda linguagem de programação tem condicionais como Se (if) ou Enquanto (while) onde checam se um valor é verdadeiro (true) ou falso (false) e, de acordo com a resposta, fazem determinada coisa. Nesses casos, também pode ser usado como condição o resultado de uma operação lógica.

Existem diversas portas lógicas, mas nesse post vamos falar mais especificamente de três: NÃO (NOT), E (AND) e OU (OR).

Para ilustrar esse post e tornar o aprendizado mais prático, vamos montar um circuito com o Arduino Uno e aplicar as portas lógicas na prática.

As operações lógicas são especialmente importantes em projetos com Arduino por poder misturar diversos sensores para apresentar um comportamento mais complexo. Como exemplo, temos um post onde misturamos o sensor de presença PIR com detector de luminosidade.

Montagem do circuito para portas lógicas

Para ilustrar as três portas lógicas que vamos apresentar, utilizaremos apenas um circuito (imagem abaixo). É um circuito bem simples: vamos trabalhar com três variáveis, dois botões e um LED.

portas lógicas_1

O resistor utilizado no LED foi de 330 Ω , mas qualquer valor nessa faixa vai funcionar. Entre os botões e o GND é necessário um valor de resistor mais alto que o do LED. Nesse caso, foi escolhido um resistor de 1 kΩ .

Se você encontrar dificuldades nesse circuito, sugiro dar uma olhada nesse post sobre como acender um LED.

Porta NÃO (NOT)

A porta lógica NÃO é a mais simples de todas. Quando um valor é verdadeiro, ele passa para falso e quando é falso, passa para verdadeiro.

No nosso exemplo, fizemos que a saída do LED é a operação NÃO aplicada ao Botão A, ou seja, acende quando o botão não for pressionado. A tabela a seguir apresenta o resultado obtido com essa operação.

Botão LED
falso verdadeiro
verdadeiro falso

Neste caso, o botão pressionado significa verdadeiro e solto significa falso. O LED é aceso apenas quando seu valor for verdadeiro.

portas lógicas_2

Programa (Porta NÃO)

Na linguagem de programação utilizada no Arduino, a operação NÃO é representada por ‘!’.

// Programa: Introdução aos operadores lógicos
// Autor: MakerHero

// Aqui, definimos os pinos que serão utilizados no programa
int pinoLED = 2;
int BotaoA = 3;
int BotaoB = 4;


void setup() {
pinMode(pinoLED, OUTPUT); // Define o pino do LED como saída
pinMode(BotaoA, INPUT); // Define os botões como entrada
pinMode(BotaoB, INPUT);
}


void loop() {
    // Passa o valor dos botões para as variáveis
    boolean A = digitalRead(BotaoA); // Foi escolhido boolean que só assume o valor 0 ou 1
    boolean B = digitalRead(BotaoB); // Também poderia ser um 'int' ou um 'char' 

    if(!A) // Se NÃO A, acende o LED
      {
        digitalWrite(pinoLED, HIGH);
      }
      else // Se a condição não for satisfeita, apaga o LED
      {
        digitalWrite(pinoLED, LOW); 
      }

    delay(200);
    
}

Procure entender esse código, ele é bem simples e ilustra a aplicação da operação NÃO.

Porta E (AND)

A porta lógica E é feita com duas entradas, ou seja, vamos utilizar os dois botões. A saída vai ser verdadeiro apenas quando as duas entradas forem verdadeiro.

No exemplo que montamos, o LED só irá acender quando o Botão A E o Botão B forem pressionados. A tabela a seguir apresenta o resultado obtido com essa operação.

Botão A Botão B LED
falso falso falso
falso verdadeiro falso
verdadeiro falso falso
verdadeiro verdadeiro verdadeiro

Neste caso, o botão pressionado significa verdadeiro e solto significa falso. O LED é aceso apenas quando seu valor for verdadeiro.

portas lógicas_3

Programa (Porta E)

Na linguagem de programação utilizada no Arduino, a operação é representada por ‘&&’.

// Programa: Introdução aos operadores lógicos
// Autor: MakerHero

// Aqui, definimos os pinos que serão utilizados no programa
int pinoLED = 2;
int BotaoA = 3;
int BotaoB = 4;

void setup() {
pinMode(pinoLED, OUTPUT); // Define o pino do LED como saída
pinMode(BotaoA, INPUT); // Define os botões como entrada
pinMode(BotaoB, INPUT);
}

void loop() {
// Passa o valor dos botões para as variáveis
boolean A = digitalRead(BotaoA); // Foi escolhido boolean que só assume o valor 0 ou 1
boolean B = digitalRead(BotaoB); // Também poderia ser um ‘int’ ou um ‘char’

if(A&&B) // LED acende se A E B
{
digitalWrite(pinoLED, HIGH);
}
else // Se a condição não for satisfeita, apaga o LED
{
digitalWrite(pinoLED, LOW);
}

delay(200);

}

Procure entender esse código, ele é bem simples e ilustra a aplicação da operação E.


Porta OU (OR)

A porta lógica OU também é feita com duas entradas. A saída vai ser verdadeiro quando pelo menos uma das duas entradas for verdadeiro.

No exemplo que montamos, o LED só irá acender quando o Botão A OU o Botão B forem pressionados. A tabela a seguir apresenta o resultado obtido com essa operação.

Botão A Botão B LED
falso falso falso
falso verdadeiro verdadeiro
verdadeiro falso verdadeiro
verdadeiro verdadeiro verdadeiro

Neste caso, o botão pressionado significa verdadeiro e solto significa falso. O LED é aceso apenas quando seu valor for verdadeiro.

portas lógicas_4

Programa (Porta OU)

Na linguagem de programação utilizada no Arduino, a operação OU é representada por ‘||’.

// Programa: Introdução aos operadores lógicos
// Autor: MakerHero

// Aqui, definimos os pinos que serão utilizados no programa
int pinoLED = 2;
int BotaoA = 3;
int BotaoB = 4;


void setup() {
pinMode(pinoLED, OUTPUT); // Define o pino do LED como saída
pinMode(BotaoA, INPUT); // Define os botões como entrada
pinMode(BotaoB, INPUT);
}


void loop() {
    // Passa o valor dos botões para as variáveis
    boolean A = digitalRead(BotaoA); // Foi escolhido boolean que só assume o valor 0 ou 1
    boolean B = digitalRead(BotaoB); // Também poderia ser um 'int' ou um 'char' 
    
    if(A||B) // LED acende se A OU B
      {
        digitalWrite(pinoLED, HIGH);
      }
      else // Se a condição não for satisfeita, apaga o LED
      {
        digitalWrite(pinoLED, LOW); 
      }

    delay(200);
    
}

Procure entender esse código, ele é bem simples e ilustra a aplicação da operação OU.

A utilização de operadores lógicos na programação facilita muito na hora de implementar uma lógica de programação. Existem outras portas lógicas mais complexas, mas eles não foram abordados nesse post.

Gostou de aprender sobre portas lógicas? Ajude-nos a melhorar o blog comentando abaixo sobre este tutorial. 

Faça seu comentário

Acesse sua conta e participe

7 Comentários

  1. Bom dia, muito boa as informações.
    Obrigado.

    1. Antonio,

      Que bom que curtiu o trabalho!

      Abraços!
      Diogo – Equipe MakerHero

  2. INTERESSANTE A MATÉRIA. MUITO DIFÍCIL ENCONTRAR ESSE TIPO DE EXEMPLO. PRINCIPALMENTE QDO SE TEM UMA MÃO FEMININA DEMONSTRANDO, POIS É MAIS OS HOMENS QUE SE INTERESSAM POR ESSA DISCIPLINA, PARABÉNS. EU VEJO QUE PRA SOLUÇÕES MUITA MAIS RÁPIDA E EFICIENTE É USANDO AS PORTAS LÓGICAS.

    QUE DICA VOCÊ DARIA PARA UM EXEMPLO DO BOTÃO COM LIGA/DESLIGA, MAS COMO INTERRUPTOR, NAS SEGUINTES SITUAÇÕES:

    O BOTÃO(s) AO SER PRESSIONADO, O LED ACENDE. E ASSIM PERMANECE ATÉ SER PRESSIONADO NOVAMENTE E APAGAr:

    1) COM ÚNICO BOTÃO;
    2) COM DOIS BOTÕES(simultâneo): Esse é muito usado em dispositivos industriais, onde os funcionários são obrigados a usar as duas mãos, como forma de segurança, no acionamento de equipamentos/máquinas.

  3. Olá tenho um smartwatch com o microcontrolador MediaTek 6261, queria saber o que preciso saber pra iniciar a programar nele!

  4. ual tão simples!!!!! essa explicação ficou muito compelta e muito simples mas extremamente direta ao ponto, depois desta explicação as portas logicas ficaram muito mais simples parabéns pela explicação obrigado

    1. Olá Davidson!

      Parte do meu trabalho aqui na MakerHero é produzir conteúdo. (Não comenta com ninguém, mas é a parte que mais gosto :p)

      Tento sempre ser o mais didático possível, principalmente explicando conceitos, que temas tão abrangentes.

      Fico bastante feliz quando descubro que meu trabalho ajuda as pessoas, muito obrigado!

      Abraços!

  5. https://youtu.be/9EvktOO0di0

    Vídeo sobre portas lógicas aplicadas na prática