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 : 5021
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Tópicos Abordados na Aula IF/ELSE Empty Tópicos Abordados na Aula IF/ELSE

Sáb maio 04, 2019 5:52 pm
Salve Pessoal,

Na aula de hoje iniciamos o capítulo 2 após cerimonia de entrega das condecorações e premiação do kit do arduino, que podem ser vistas com mais detalhes nos tópicos anteriores.

No capítulo 2 vamos aprender vários comandos de controle do fluxo do programa, e trabalhar mais com a lógica da programação. Esse conteúdo deveria ser diluído em mais aulas, mas diante da nossa realidade tenho que apresentar tudo de uma vez, e lá foi IF, IF ELSE e IF ELSE IF, abaixo vou tentar simplificar melhor para facilitar o entendimento.

O conteúdo desse tópico está na apostila nos ítens 2.1.1 , 2.1.2 e 2.1.3.

Item 2.1.1 a função IF. Veja os raciocínios abaixo que vai facilitar o entendimento.
2.1.1.1 - Basicamente essa função analisa SE a CONDIÇÃO for VERDADEIRA, executa o BLOCO DE  INSTRUÇÕES,  se a condição for falsa pula todos os comandos do bloco.
2.1.1.2 - Quando chamar a função IF a condição deverá estar entre parenteses ( )  e o bloco de instruções entre chaves { }
2.1.1.3 - Cada instrução no bloco deverá terminar com ; (ponto e virgula) assim como no  controle dos pinos.
2.1.1.4 - Formato da função:
IF (condição) {              // Chamada da função e entre parenteses a condição, que na verdade é um teste lógico, se verdadeiro executa o bloco que vem após as chaves
bloco de instruções ;   // Instruções que serão processadas se o teste der verdadeiro
}                                      //Chaves encerrando o bloco,
2.1.1.5 - Na condição pode seu usado testes lógicos simples como o estado de um pino, o nível de sinal de um sensor, resultado de uma conta, valor de uma variável. Também pode ser composto por uma condição de varíos testes usando os operadores lógicos &&, || , ^ conforme necessidade. O que deixa o comando muito poderoso para tomadas de decisão.
Na sala usamos o programa abaixo para ler uma tecla e acender um led, acompanhe:
Código:

#define led 10   //led ligado no pino 10
#define tecla 9  //tecla ligada no pino 9

void setup(){
  pinMode(led, OUTPUT); //Configura o pino do led como saída
  pinMode(tecla, INPUT_PULLUP); //Configura o pino da tecla como entrada pullup
}
void loop(){                          //Programa principal
  if(!digitalRead(tecla)){     //Testa se a tecla foi pressionada, sem apertar TRUE, com o operador ! (NOT) fica em FALSE
    digitalWrite(led, HIGH); //Se a tecla for pressionada dá TRUE esse comando é executado, e acendendo o led.
  }                                          // Fim do bloco, no caso de um comando
  digitalWrite(led,LOW);     // Se a condição deixar de ser verdadeira, vai apagar o led
}

Se pararmos para analisar esse programa, lembrando que a função loop() vai executá-lo infinitamente, ele funciona assim:
10. testa se a tecla foi pressionada:
a) Se não foi, vai direto para o   digitalWrite(led,LOW); e reafirma que o led deverá permanecer apagado. Para o observador o led mantém-se apagado
b) Se a tecla foi pressionada a condição é TRUE e vai rodar o comando  digitalWrite(led, HIGH); e  led vai acender o led,
c) Quando sair do bloco  roda o comando digitalWrite(led,LOW);  que vai apagar o led novamente, para o observador o led fica aceso com meio brilho, pois na real está piscando muito rápido.

Muitas situações podem ser resolvidas usando somente o IF, mas pode haver uma situação como essa em que se deseja manter o led aceso sem intermitências, então para isso serve o super IF/ELSE, veja como fica o mesmo programa escrito de outra forma:

2.1.2  - A função IF / ELSE ,  abaixo os comentários:

2.1.2.1 - O programa funciona de forma similar ao IF, testa se a condição entre parenteses é TRUE, se for executa  as instruções que estiverem no bloco entre as chaves { }
2.1.2.2 - Caso a condição seja FALSE, vai executar o bloco que estiver após a instrução ELSE, dentro das chaves que a sucedem. Veja o código abaixo:

Código:

#define led 10   //led ligado no pino 10
#define tecla 9  //tecla ligada no pino 9

void setup(){
  pinMode(led, OUTPUT); //Configura o pino do led como saída
  pinMode(tecla, INPUT_PULLUP);     //Configura o pino da tecla como entrada pullup
}
void loop(){                      //Programa principal
  if(!digitalRead(tecla)){      //Testa se a tecla foi pressionada, sem pressionar é TRUE, com o operador ! (NOT) fica em FALSE
    digitalWrite(led, HIGH);  //Se a tecla for pressionada fica TRUE o comando é executado, acendendo o led.
  } else {                                 // Fim do bloco if, e inicia o else quando a condição inicial nao e atendida
  digitalWrite(led,LOW);      // Caso a tecla não está pressionada executa esse comado apagando o led
}                                  // Fim do bloco else
}                                  // Fim da função loop()

Vamos analisar o programa acima,
1o. Testa se a tecla foi pressionada, a condição testada é   if(!digitalRead(tecla))
a) se der TRUE vai executar  digitalWrite(led, HIGH); e o led vai acender,
b) se der FALSE vai executar os comando após o ELSE , ou seja, nesse caso,  digitalWrite(led,LOW);  e o led vai apagar
c) coma aplicação da função IF/ELSE as condições possíveis são TRUE e led fica aceso ou FALSE e o led fica apagado.
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos