Translate

sábado, 24 de agosto de 2013

Comando "for"


Pessoal, recentemente me perguntaram como funciona o comando "for" ... após algum tempo pensando eu percebi que não sabia explicar; por isso, resolvi fazer esta portagem.

Antes de falarmos sobre o comando for, podemos aproveitar a opotunidade para esclarecer mais alguns pontos do sketch apresentado abaixo.

Vamos começar pelo comando "#define start 11"; este comando é a mesma coisa que "int start = 11;".

Ou seja, estamos determinando que o pino 11 do arduino, vai assumir a identificação de "start", assim, não corremos o risco de confundir o numero 11 dentro da programação com o pino 11 do arduino.

No caso da variável flip_flop, ela assumi o valor 1 assim que é chamada no nosso programa.

Observe que não há diferença entre definir se a variável representa um pino ou um valor numérico; isso pode causar dúvidas aos menos experientes na hora de entender um programa que ele não tenha elaborado. Fazer as definições de pinos do arduino utilizando o comando "#define xxxx" pode ajudar a deixar o programa mais claros.

A outra forma de visualizar, é observando dentro do "void setup" as configurações que alternam entre INPUT e OUTPUT, onde INPUT são os pinos de entrada e OUTPUT os pinos de saída.

Os pinos de entrada devem receber um resistor para limitar o pico de tensão no hardware; esse resistor pode ser ativado via programação utilizando o comando :

  pinMode(start,INPUT); // define pino como entrada
  pinMode(start,HIGH);  // ativa resistor de pull up

Mais abixo temos a inicialização da comunicação serial entre o monitor do IDE e as atividades do hardware.

Serial.begin(9600);  // inicia a comunicação serial

Enfim o comando "for". Neste programa, o comando "for" só será inicializado quando o teste lógico do comando "if" for TRUE, ou seja, o pino start tiver um valor lógico alto. Logo após esta confirmação, o pino action será acionado, como próximo passo, chama o comando "for" que permanecerá executando até que os valores definidos sejam alcançados; ou seja, o pino action permanecerá com valor lógico alto enquanto o comando "for" não terminar a execução.

Dentro do comando "for" temos que definir o valor inicial da variável, o valor limite, e o encremento, veja abaixo com fica o comando:

 for(check=0 (valor inicial); check<=10 (valor limite); check++ (encremento))

Enquanto o valor de check não chegar a 10, começando a contagem de 0 o comando "for" ficará executando, enquanto isso nada mais é executado, apenas o "for".

Bom nada é melhor para tirar as dúvidas do que ver o que lemos em execução, para aqueles que farão a montagem e o teste, segue o esquema de ligação:

PINO 11 -->> Este deve ser ligado inicialmente ao zero volt
PINO 13 -->> Não requer ligação, pois na placa do arduino já possui um led no pino 13

Após carrgar o programa inicie o Serial Monitor do IDE (link para baixar o IDE) e acione o start, ligando o PINO 11 (start) no 5 Vcc.

Observe os detalhes que devem ser configurados para o funcionamento do Monitor Serial:

numero da COMM e BAUD RATE (link's para entender o que é baud rate: 1 e 2

O video abaixo o video apresenta o que deve ser apresentado no Monitor Serial.



Logo abaixo o sketch que executa este programa.

/*

ELABORADO POR: TONI
DATA         : 24/08/13

*/

// INICIO DO PROGRAMA
#define start 11    // definindo a variavel como pino 11 do arduino
#define action 13
int check;          // declarando uma variavel
int flip_flop = 1;  // declarando uma variavel com valor definido inicialmente
int z = 1000;
int w = 332;

void setup()
{
  pinMode(start,INPUT); // define pino como entrada
  pinMode(start,HIGH);  // ativa resistor de pull up

  pinMode(action,OUTPUT); // define pino como saída

 Serial.begin(9600);  // inicia a comunicação serial

}

void loop()
{
  if(digitalRead(start) == 1) // testa o pino
  {
    digitalWrite(action,flip_flop); //ativa o pino com valor na variável
    for(check=0; check<=10; check++) // faz uma contagem de 0 a 10
    {
      Serial.print("wait ");
      delay(w);
      Serial.print(". ");
      delay(w);
      Serial.print(". ");
      delay(w);
      Serial.print(". ");
      delay(z);
      Serial.println(check);
      delay(z);
    }
    digitalWrite(action,!flip_flop);  // submete ao pino o valor inverso da variável
 
  }

}

//////////////FIM DO PROGRAMA/////////////////////////