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

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ãoLED
falsoverdadeiro
verdadeirofalso

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: FILIPEFLOP

// 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 o valor 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ãoBotão BLED
falsofalsofalso
falsoverdadeirofalso
verdadeirofalsofalso
verdadeiroverdadeiroverdadeiro

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: FILIPEFLOP

// 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 o valor 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ãoBotão BLED
falsofalsofalso
falsoverdadeiroverdadeiro
verdadeirofalsoverdadeiro
verdadeiroverdadeiroverdadeiro

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: FILIPEFLOP

// 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 o valor 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. Não se esqueça de visitar o fórum da FILIPEFLOP!

Posts Relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Um Comentário

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

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