Arduino - Aula 7 - Flags


Flags (bandeira em inglês) são variáveis utilizadas como comando de controle de programa. Isso significa que através dos valores das variáveis Flags controlamos a atuação ou sequência do programa. 

Exemplo 1: 

O exemplo abaixo acende um LED de acordo com o valor da variável flag. Isso permite um controle dos passos do programa.

int ledPin =  13;
int flag = 0;   // variável de controle de programa, valor inicial = 0
 

 void setup() {
  pinMode(ledPin, OUTPUT);     
}


void loop(){
if (flag == 0) {    // condição
     digitalWrite(ledPin, HIGH); // acende o LED 

     flag = 1; // muda o valor para poder habilitar a próxima parte
}
if (flag == 1) {    // condição:
     delay(1000);   // espera 1 segundo 

     flag = 2;    // muda novamente o valor de flag
}
if (flag == 2) {    // condição:
     digitalWrite(ledPin, LOW); // apaga o LED 

     flag = 3;   // muda novamente o valor de flag
}
if (flag == 3) {    // condição:
     delay(1000);   // acende o LED 

     flag = 0;   // retorna o valor a 0 para reiniciar o programa
}
 


Exemplo 2:

Esse sketch envia pela serial uma mensagem que o botão no pino 2 foi apertado ou que foi solto. Ao mesmo tempo acende um LED no pino 13. Ele foi baseado no programa exemplo do Arduino "Button".

O importante aqui é que a mensagem será enviada pela serial uma única vez. Para que isso aconteça, é necessário o uso de uma "flag". 

Se a variável "flag" não for usada, várias mensagens serão enviadas pois o Arduino tem uma velocidade de processamento muito alta.
 
int buttonPin = 2;     

int ledPin =  13;     
int buttonState = 0;        
int flag = 0; // varíavel de controle de programa

void setup() {
  pinMode(ledPin, OUTPUT);     
  pinMode(buttonPin, INPUT);
  Serial.begin(9600); // inicia a comunicação serial
}

void loop(){
  buttonState = digitalRead(buttonPin);

if (buttonState == HIGH && flag == 0) {  // condição para o IF:

                                                          // botão apertado e flag em 0  
    Serial.println (
"botão apertado"); // envia essa mensagem pela serial
    digitalWrite(ledPin, HIGH); // acende o LED
    flag = 1; // muda o valor da variável para que não entre novamente no IF
    }

if (buttonState == LOW && flag == 1) {
// condição para o IF: 
                                                         // botão apertado e flag em 1 
    Serial.println ("botão solto");  // envia essa mensagem pela serial
    digitalWrite(ledPin, LOW); // desliga o LED
    flag = 0;  // volta o valor da variável para 0 para poder entrar na 

                  // primeira parte do programa
   }


 
Imagem

 

Exercícios 

1) Crie um programa que controle 2 LEDs com 1 botão utilizando Flags. Ao apertar o botão uma vez, acende um Led, ao apertar a segunda vez, apaga o primeiro Led e acende o segundo.