Programação em linguagem C - Parte 2
Anderson M. Amaral
Agosto - 2017
A "solução" proposta considerando apenas o que foi discutido até agora não é totalmente satisfatória:
void setup() {
Serial.begin(9600); // Inicia o envio de dados via comunicacao serial
pinMode(2, INPUT); // Configura o pino 2 como entrada
}
void loop() {
int buttonState = DigitalRead(2); // Le a tensao no pino 2
Serial.print("O estado do botao e "); //Envia o valor da variavel via serial
Serial.println(buttonState); // Envia o valor do estado do botao
delay(100);
}Serial.print("O estado do botao e "); //Envia o valor da variavelPodemos refrasear as ideias acima como (pseudo-código):
SE o botão estiver pressionado,
ENTÃO deve-se escrever "pressionado" na serial.
CASO CONTRÁRIO o botão não estará pressionado,
ENTÃO deve-se escrever "não pressionado" na serial.Do ponto de vista prático, as ideias acima podem ser implementadas usando if ou if-else.
Estrutura geral
if(condição){
\* então executa este bloco *\
}condição for verdadeira o código imediatamente abaixo será executado.0.Podemos também estar interessados em descrever o que o programa realiza quando a condição não é verdadeira.
if(condição){
\* então executa este bloco *\
} else {
\* caso contrario, então executa este bloco *\
}if pode ser satisfeita quando a condição é um número para retornar o estado do botão quando ele está pressionado ou não . Não utilizem relações lógicas como ==.Lembrando que para imprimir um texto: Serial.print(text);
void setup() {
Serial.begin(9600); // Inicia o envio de dados via comunicacao serial
pinMode(2, INPUT); // Configura o pino 2 como entrada
}
void loop() {
int buttonState = DigitalRead(2); // Le a tensao no pino 2
/* Inserir cod aqui */
delay(100);
}Há alguns tipos de comparação que podem ser realizadas.
| Operador | Significado |
|---|---|
== |
é igual a |
!= |
não é igual a |
<= |
menor ou igual |
>= |
maior ou igual |
< |
menor que |
> |
maior que |
1+1==2 é true, enquanto -3>5 é falseExercício: modifiquem a condição no if do programa anterior para obter o mesmo resultado de antes porém usando uma comparação. Faça de mais de uma maneira.
Exemplo:
SE tenho sede E tem água,
ENTÃO beber água.
SE tenho sede E não tem água,
ENTÃO comprar água. Beber a água.Note que as ações acima só serão executadas quando tenho sede for true.
A e B duas afirmações lógicas (ex.: A representa o resultado da expressão x>15), podemos construir condições lógicas para controlar a execução de partes do programa.!), e (&&), ou (||)Negação (!A)
A |
!A |
|---|---|
true |
false |
false |
true |
E (A&&B)
A |
B |
A&&B |
|---|---|---|
false |
false |
false |
true |
false |
false |
false |
true |
false |
true |
true |
true |
OU (A||B)
A |
B |
A||B |
|---|---|---|
false |
false |
false |
true |
false |
true |
false |
true |
true |
true |
true |
true |
switch-caseUma outra possibilidade de controlar as ações do programa por meio de uma expressão é no ambiente case. No exemplo abaixo, o programa reage diferentemente quando var assume os valores 1 ou 2. Caso var seja outro valor, segue-se para o caso default
switch (var) {
case 1:
//do something when var equals 1
break;
case 2:
//do something when var equals 2
break;
default:
// if nothing else matches, do the default
// default is optional
break;
}case X:, e cada caso finaliza quando se chega a linha break;gotogoto. Não é necessário e a compreensão do programa pode ficar terrível! Não falarei sobre ele aqui. Para alguns detalhes, ver arduino.cc/en/Reference/GotoforUma forma de mandar o sinal de controle é montar uma sequência de valores indicando qual a cara do sinal
int delays[9] = {100, 100, 100, 200, 200, 200, 100, 100, 100};array, ou uma sequência de dados numéricos.delays[0]==100, delays[2]==100, delays[3]==200.Podemos acessar sequencialmente os dados acima usando um loop for.
int i;
for(i=0; i<9; i++){
Serial.println(delays[i]);
}for:i=0i<9i++i++ corresponde ao código i=i+1;for e estão mais suscetíveis a problemas.Ex.: while
while(condição){
/*Executa código*/
}Verifica se a condição é válida no início do loop
Ex.: do-while
do
{
/*Executa código*/
} while (condição);Tais abordagens costumam ser piores por não se ter um conhecimento exato do que está sendo realizado em cada loop. No caso do for, sabe-se exatamente quando o loop inicia e quando termina.
Reimplementem o aviso de SOS usando while e do-while.