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
}
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
}
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:
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.