Lógica e sentido comum são usados diariamente, seja por sistemas eletrônicos ou pessoas. Neste artigo, lógica e, lógico OR, XOR lógico, lógica sequencial e saber como podemos executar estas instruções sobre a placa Arduino Uno, sem ser um programador, precisamos conhecer os elementos que influenciam a lógica binária, ele tem muito a ver com as escolhas que fazemos em nossas vidas diárias. Quase todos os equipamentos eletrônicos usa a lógica digital para tomar decisões e funcionar, daí a importância de conhecer esse assunto.

 

MIC039S

A eletrônica moderna e os seus resultados como: telefones celulares, computadores, televisores, equipamentos industriais, médicos, etc., não seria possível sem o uso de circuitos lógicos digitais e lógica aplicada a eles. Lógica e bom senso têm muito a ver, porque com eles é que os aparelhos funcionam de modo aceitável.

As principais instruções lógicas são:

OU

AND

XOR

NÃO

Na Figura 1 podemos ver a placa Arduino Uno e na Figura 2 um projeto de desenvolvimento de software, que pode ser baixado a partir do site Arduino. A Figura 3 mostra a semelhança entre a placa Arduino Uno e da mente humana, para 2 permitem operações lógicas.

 

 Figura 1. Uma placa Arduino Uno
Figura 1. Uma placa Arduino Uno

 

 

 Figura 2. IDE dp Arduino Uno
Figura 2. IDE dp Arduino Uno

 

 

 Figura 3. Arduino Uno e lógica
Figura 3. Arduino Uno e lógica

 

 

As operações lógicas é que fazem com que o cérebro possa ser consciente ou inconsciente. Quando consciente, percebemos a operação, ação ou decisão que estamos fazendo. Quando no subconsciente, nós não percebemos, mas executamos. Lógica e o bom senso ou maneira de pensar de cada pessoa, têm muitas semelhanças. Assim, existe uma semelhança entre uma placa como Arduino e a mente humana no modo como os processos lógicos são executados.

Em eletrônica muitas operações lógicas são realizadas, pois todos os sistemas eletrônicos modernos as utilizam. Neste artigo, vamos estudar essas operações ou instruções.

Operações OR, AND, XOR e NOT, são operações de bit a bit. Isso significa que essas operações lógicas são realizadas em bits individuais dos operandos.

 

A INSTRUÇÃO LOGICA OR (||).

A lógica OU ou OR segue o princípio da operação do circuito mostrado na Figura 4.

 

 Figura 4. Circuito elétrico para a lógica OR
Figura 4. Circuito elétrico para a lógica OR

 

Notamos que fechar o circuito com qualquer um dos 2 interruptores, a lâmpada acende. Mesmo se os dois interruptores estejam fechados, a lâmpada acende-se. Esse é o OR ou OU lógico. A única maneira que nenhuma lâmpada acenda é que os 2 interruptores estejam abertos. Assim, criamos tabelas verdade para cada instrução lógica. Na Figura 5 podemos ver a tabela verdade para a lógica ou instrução OR.

 

 Figura 5. Tabela verdade Logica OU
Figura 5. Tabela verdade Logica OU

 

Esta tabela simpifica o que foi dito anteriormente. A Figura 6 mostra o diagrama esquemático utilizado para a lógica OU.

 

 Figura 6. Diagrama esquemático para a lógica OU
Figura 6. Diagrama esquemático para a lógica OU

 

 

Da vida prática podemos citar um exemplo onde usamos a lógica OR. Por exemplo, quando vamos de nosso trabalho para nossa. Temos várias alternativas, tais como:

- Você pode ir caminhando.

- Você pode andar de bicicleta.

- Você pode ir de moto.

- Você pode ir de ônibus ou perua.

- Você pode ir de metro.

- Você pode ir de táxi.

- Você pode ir de carro.

 

Qualquer das alternativas acima pode nos levar para casa e atingir o objetivo desejado. Para cada possibilidade que você pode fazer uma entrada em um OR lógico. A Figura 7 mostra uma lógica OU 7 entradas.

 

 Lógica OR para ir para casa do trabalho
Lógica OR para ir para casa do trabalho

 

 

Você pode criar portas lógicas OR com o número de entradas que precisar. O cérebro este tipo de lógica quase que diariamente e embora nós não percebamos ou estamos cientes disso. Tente analisar os atos ou decisões que tomamos e vemos que nós sempre usamos esse tipo de lógica.

O símbolo usado em linguagem C / C ++ para a lógica OR, é a barra vertical (||). Na placa Arduino Uno, normalmente funciona no nível de byte, que ou seja, 8 bits. A Figura 8 mostra um byte.

 

Figura 8. Um Byte
Figura 8. Um Byte

 

Note que existem 8 bits. Quando você executa um nível de instrução byte OR, todos os 8 bits dão o resultado, ao mesmo tempo, mas a individualidade de cada bit é mantida; ou seja, o bit 0 do byte 0 com o bit 0 do byte um, e assim por diante.

 

 Figura 9. lógica ou um byte
Figura 9. lógica ou um byte

 

 

O programa da Figura 9, seria o seguinte:

 

byte operando1 = B01011000;

byte operand2 = B11011011;

resultado de byte = 0;

void setup () {

}

 

void loop () {

   Resultado = operand1 | operand2;

}

 

Depois de executar o programa, o resultado aparecerá com o valor binário B11011011. Experimente valores diferentes e observe os resultados.

A Figura 10 mostra outro exemplo de lógica OR, mas neste caso os valores são inteiros (unsigned int).

 

 Figura 10. OU lógico em um inteiro sem sinal
Figura 10. OU lógico em um inteiro sem sinal

 

No Arduino Uno, os tipos de dados int são formados por 2 bytes. O programa seria o seguinte:

 

Unsigned int operando1 = B0000000001011100;

Unsigned int operando2 = B0000000001100101;

unsigned int = 0;

 

void setup () {

}

 

void loop () {

   Resultado = operando 1 | operando 2;

}

 

Depois de executar o programa o resultados aparecerá com o valor binário B0000000001111101. Experimente valores diferentes e observe os resultados.

A lógica OR pode ser usada em um alarme em casa. Podemos conectar portas e janelas às entradas lógicas da placa de um microcontrolador e testar se alguma delas foi ativada. Veja a Figura 11.

 

 Figura 11. Lógica OU para Alarme
Figura 11. Lógica OU para Alarme

 

 

A INSTRUÇÃO LÓGICA E (&).

A figura 12 mostra o circuito elétrico que representa a instrução lógica AND. Vamos observar que somente quando os 2 interruptores estiverem fechados, a lâmpada acenderá.

 

 Figura 12. Circuito elétrico para lógica AND
Figura 12. Circuito elétrico para lógica AND

 

Casos contrários a lâmpada não acende. É como se disséssemos: "A lâmpada está ligada, somente se o interruptor A e o interruptor B estiverem fechados". A Figura 13 mostra a tabela de verdade para a lógica AND.

 

 Figura 13. Tabela Lógica e Lógica
Figura 13. Tabela Lógica e Lógica

 

A Figura 14 mostra o símbolo AND lógico e a Figura 15 mostra alguns exemplos dessa lógica.

 

 Figura 14. Diagrama esquemático da lógica AND
Figura 14. Diagrama esquemático da lógica AND

 

 

 Figura 15. Exemplo de lógica AND
Figura 15. Exemplo de lógica AND

 

Na vida cotidiana, também usamos muito essa lógica AND. Por exemplo, quando vamos retirar dinheiro de um caixa eletrônico, é necessário ter o cartão ou cartão que permite debitar a conta e também ter a senha. Se um desses dois itens estiver faltando, não podemos tirar o dinheiro.

Outro exemplo, onde é necessário ter vários itens para atingir nosso objetivo, pode ser quando queremos preparar um bolo ou “pudim" por exemplo. Você precisa ter todos os ingredientes, um recipiente onde colocá-los e um forno. A Figura 16 mostra este exemplo.

 

 Figura 16. Exemplo de lógica AND
Figura 16. Exemplo de lógica AND

 

Na eletrônica, essa lógica é amplamente usada. Por exemplo, no alarme de uma casa, quando queremos desativar o alarme. Veja a Figura 17.

 

 

 Figura 17. Logica E para alarme
Figura 17. Logica E para alarme

 

Mesmo que os sensores são acionados, o alarme não soa porque um dos pinos de entrada da lógica AND está em nível baixo (0 volts)

O símbolo usado na linguagem C / C ++ para a lógica AND é o símbolo &. Vamos ver o seguinte programa:

 

byte operando1 = B01011000;

byte operand2 = B11011011;

resultado de byte = 0;

 

void setup () {

}

 

void loop () {

    result = operand1 & operand2;

}

 

Depois de executar o programa, a variável de resultado será com o valor B01011000. Veja a Figura 18.

 

 Figura 18. Lógica E em um Byte.
Figura 18. Lógica E em um Byte.

 

 

O programa a seguir usa números inteiros sem sinal para executar a instrução AND:

 

Unsigned int operando1 = B0000000001011100;

Unsigned int operando2 = B0000000001100101;

unsigned int = 0;

 

void setup () {

}

 

void loop () {

   result = operand1 & operand2;

}

 

Depois de executar o programa de resultados, ele aparecerá com o valor binário B0000000001000100. Veja a Figura 19. Tente valores diferentes e observe os resultados.

 

 Figura 19. Lógicas E em um inteiro sem sinal
Figura 19. Lógicas E em um inteiro sem sinal

 

 

A INSTRUÇÃO LÓGICA XOR (^).

A lógica XOR também é conhecida como ESCLUSIVE OR (OU Exclusivo), ou seja, somente quando uma das entradas está em um nível alto (5 Volts), a saída também estará em um nível alto. Veja a tabela de verdade na Figura 20.

 

 Figura 20. Tabela Verdade XOR
Figura 20. Tabela Verdade XOR

 

Se as duas entradas estiverem em alto nível, a saída será em nível baixo. Além disso, se as duas entradas estiverem em nível baixo, a saída estará em nível baixo. O diagrama esquemático da lógica XOR pode ser visto na Figura 21.

 

 Figura 21. Diagrama esquemático da lógica XOR
Figura 21. Diagrama esquemático da lógica XOR

 

 

O símbolo usado para representar a instrução XOR é o símbolo de cursor (^).

Um exemplo de XOR pode ser dado quando uma pessoa quer se casar ou formar uma família, mas têm duas namoradas. Sendo esse o caso, você pode se casar, se você escolher um das namoradas, mas você não pode se casar, com as duas. Assim, em muitas coisas ou atitudes humanas, é possível ver o uso da lógica XOR.

Na Figura 22 podemos ver um exemplo de XOR no nível de byte.

 

 Figura 22. Log do XOR em um byte
Figura 22. Log do XOR em um byte

 

 

Vamos ver o seguinte programa:

 

byte operando1 = B01011000;

byte operando2 = B11011011;

byte resultado = 0;

 

void setup () {

}

 

void loop () {

   resultado = operando1 ^ operando2;

}

 

Depois de executar o programa, a variável de resultado será o valor B10000011.

O programa a seguir usa números inteiros sem sinal para executar a instrução XOR:

 

Unsigned int operando1 = B0000 0000 0101 1100;

Unsigned int operando2 = B0000 0000 0110 0101;

unsigned int = 0;

 

void setup () {

}

 

void loop () {

   resultado = operando1 ^ operando2;

}

 

Depois de executar o programa, o resultado aparecerá com o valor binário B0000000000111001. Veja a Figura 23. Tente valores diferentes e observe os resultados.

 

 Figura 23. XOR Logic em um inteiro não assinado
Figura 23. XOR Logic em um inteiro não assinado

 

 

A INSTRUÇÃO LÓGICA NÃO (~).

A instrução lógica NÃO inverte os bits de um byte, isto é, se o bit tem um nível baixo (0 volts) é passado para o nível alto (1 volt) e se o bit tem um nível alto, o bit é alterado para o nível baixo. A figura 24 mostra o diagrama esquemático da lógica NOT.

 

 Figura 24. Diagrama esquemático da lógica NOT
Figura 24. Diagrama esquemático da lógica NOT

 

 

A Figura 25 mostra a tabela verdade para a lógica NOT. Esta operação é do tipo unitário, isto é que se aplica sobre uma variável.

 

 Figura 25. Tabela de verdade Logica NOT ou NÃO
Figura 25. Tabela de verdade Logica NOT ou NÃO

 

 

O símbolo usado na linguagem C / C ++ para a lógica NOT é o símbolo ~. Vemos o seguinte programa:

 

byte operando1 = B01011000;

resultado de byte = 0;

 

void setup () {

}

 

void loop () {

   resultado = ~ operando1;

}

 

Depois de executar o programa, a variável de resultado será B10100111. Veja a Figura 26.

 

 Figura 26. Logica NÃO em um byte
Figura 26. Logica NÃO em um byte

 

O programa a seguir usa números inteiros sem sinal para executar a instrução NOT:

 

Unsigned int operando1 = B00000000 01011100;

unsigned int = 0;

 

void setup () {

}

 

void loop () {

   resultado = ~ operando1;

}

 

Depois de executar o programa de resultados, ele aparecerá com o valor binário B1111111110100011. Veja a Figura 27. Teste com valores diferentes e observe os resultados.

 

 Figura 27. Lógico NÃO em um Inteiro sem sinal
Figura 27. Lógico NÃO em um Inteiro sem sinal

 

 

LÓGICA COMBINACIONAL.

A lógica combinacional nasce quando combinamos as lógicas vistas anteriormente, isto é, as saídas são o resultado da lógica dispostas em um circuito. A palavra combinacional já diz tudo: combinar, misturar ou juntar várias das lógicas OR, AND, XOR, NOT, para chegar algum resultado.

No exemplo a seguir, a lógica AND e OR são combinadas.

 

 Figura 28. Circuito lógico de combinação
Figura 28. Circuito lógico de combinação

 

 

Veja a Figura 28 e vamos ver o seguinte programa:

 

byte operando1 = B0101 1000;

byte operando2 = B1101 1011;

byte operando3 = B0011 0011;

byre resultado = 0;

 

void setup () {

}

 

void loop () {

   resultado = operando1 & operando2;

   resultado = resultado | operando3;

}

 

Depois de executar o programa, a variável de resultado terá o valor B01111011.

O programa a seguir usa números inteiros sem sinal para executar a instrução lógica combinacional:

 

Unsigned int operando1 = B0000 0000 0101 1100;

Unsigned int operando2 = B0000 0000 0110 0101;

Unsigned int operando3 = B1111 0000 1100 1100;

 

unsigned int = 0;

 

void setup () {

}

 

void loop () {

   resultado = operando1 & operando2;

   resultado = resultado | operando3;

}

 

Depois de executar o programa, o resultado aparecerá com o valor binário B1111000011001100. Experimente valores diferentes e observe os resultados.

Vamos dar outro exemplo de lógica combinacional. Neste exemplo, as lógicas OR, AND e NOT são combinadas.

 

 Figura 29. Circuito lógico de combinação
Figura 29. Circuito lógico de combinação

 

 

Veja a Figura 29 e veja o seguinte programa:

 

byte operando1 = B0101 1000;

byte operando2 = B1101 1011;

byte operando3 = B0011 0011;

byte operando4 = B1111 0000;

byte resultado = 0;

 

void setup () {

}

 

void loop () {

   resultado = operando1 | operando2;

   resultado = resultado & operando3;

   resultado = resultado | operando4;

   resultado = ~ resultado;

}

 

Depois de executar o programa, a variável de resultado terá o valor B00001100.

O programa a seguir usa números inteiros sem sinal para executar a instrução lógica combinacional:

 

Unsigned int operando1 = B0000 0000 1011 1000;

Unsigned int operando2 = B0000 0000 0110 0101;

Unsigned int operando3 = B1111 0000 1100 1100;

Unsigned int operando4 = B1010 1010 1010 1010;

 

unsigned int = 0;

 

void setup () {

}

 

void loop () {

   resultado = operando1 | operando2;

   resultado = resultado & operando3;

   resultado = resultado | operando4;

   resultado = ~ resultado;

}

 

Depois de executar o programa de resultados, ele aparecerá com o valor binário B0101010100010001. Experimente valores diferentes e observe os resultados.

 

OPERAÇÕES BOOLEAS.

Operações booleanas podem ser usadas para verificar se duas ou mais expressões são verdadeiras ou falsas e são normalmente usadas em declarações condicionais, como if ou while. Devemos ter cuidado para não confundir as instruções no nível de byte ou inteiro (int), com as operações booleanas. Instruções booleanas usam dois caracteres como este:

AND &&

OR ||

 

OPERAÇÃO BOOLEANA E (&&).

A operação booleana AND é verdadeira (true), somente se suas duas expressões forem verdadeiras. Normalmente, a operação AND booleana é usada em uma instrução condicional if (). Vamos ver o seguinte exemplo:

 

if (digitalRead (2) == HIGH && digitalRead (3) == HIGH) // verifique se ambas as entradas são altas.

{

   // Instruções.

}

 

No código anterior, eles estão verificando se a entrada digital 2 e a entrada digital 3 estão no nível lógico alto. Se as duas entradas forem altas, as instruções entre os colchetes ({}) serão executadas. Caso contrário, o programa irá pular e as instruções não serão executadas.

 

OPERAÇÃO BOOLEANA OU ou OR (||).

A operação booleana OU será verdadeira, se alguma das duas expressões for verdadeira. Vamos ver o seguinte exemplo:

 

if (x> 0 || y> 0) // sim, any, x ou y é maior que zero (0).

{

   // instruções.

}

 

Na linha de código anterior, estamos testando se qualquer variável de x ou y é maior que zero (0). Se alguma das variáveis ??x ou y for maior que zero, então elas serão executadas, caso contrário, essas instruções não serão executadas.

 

CONCLUSÃO

Como podemos concluir, a lógica é muito simples porque segue o senso comum. A lógica OR diz que a meta é atingida por qualquer uma de suas entradas e a lógica AND diz que o objetivo é atingido, se todos os requisitos forem atendidos. A lógica XOR diz que apenas uma entrada pode ser ativada para atingir ou atingir a meta. A prática é a mãe do conhecimento, para que você possa testar e observar os resultados. Você também pode usar essa lógica para testar ou avaliar expressões aritméticas, através da operação booleana OR (||) e da operação booleana ADD (&&).