Robótica Livre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5039
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Tópicos Abordados na Aula - Exercícios 2.12 , 13, 14 Empty Tópicos Abordados na Aula - Exercícios 2.12 , 13, 14

Dom Ago 04, 2019 10:46 pm
Os exercícios 2.12, 2.13 e 2.14 usam o teclado da placa de desenvolvimento para gerar umvalor que vai ser usado na estrutura switch/case para tomar decisões sobre qual código será executado e a lógica usada foi a seguinte:
Código:

byte teclas; //inicializa a variável

teclas = (!digitalRead(tecla4)<<3)|(!digitalRead(tecla3)<<2)|(!digitalRead(tecla2)<<1)|(!digitalRead(tecla1)); //Desloca o bit testado e realiza operação OU

aqui usamos os operadores de deslocamento e lógicos OU para gerar um número que indique qual tecla foi pressionada, a explicação é:
1 - Quando nenhuma tecla é pressionada o comando !digitalRead(tecla) retorna em binário 0b00000000
2 - Quando a tecla for pressionada o comando !digitalRead(tecla) fica em binário 0b00000001
3 - Exemplo pressionando a tecla e usando o operador de deslocamento o resultado fica !digitalRead(tecla)<<5, o resultado é 0b00100000
4 - Por fim é feito a operação OU entre todas as teclas, abaixo um exemplo:
Supondo que aperta a tecla 2

ANTES DE APERTAR:----PRESSIONANDO ANTES DO <<--DEPOIS DO <<
tecla1 = 00000000--------00000000-----------------------------------00000000
tecla2 = 00000000--------00000001-----------------------------------00000010
tecla3 = 00000000--------00000000-----------------------------------00000000
tecla4 = 00000000--------00000000-----------------------------------00000000
result. = 00000000--------00000001-----------------------------------00000010

No switch case o codigo fica:
Código:

  switch(teclas){                //Inicialização da função com a variavel teclas
    case(0b00000100):            //Testa se a tecla3 foi pressionada
    bloco de instruções;
      break;                      //Fim da função
    case(0b00000010):            //Testa se a tecla2 foi pressionada
      bloco de instruções;
      break;                      //Fim da função
    case(0b00000001):            //Testa se a tecla1 foi pressionada
      bloco de instruções;
      break;                      //Fim da função
    case(0b00001000):            //Testa se a tecla4 foi pressionada
      bloco de instruções;
      break;                      //Fim da função
  }
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos