Ir ao conteúdo

Arduino Como isolar Função "else" para executa-la 1 vez dentro do Void loop?


Posts recomendados

Postado

olá é eu quero fazer com que a função "else" quando o botão estiver desligado seja executada uma vez apenas sem deixar o sistema pausado;

 

o codigo::thumbsup:



const int ledAmarelo = 8;
const int ledVerde = 9;
const int ledVermelho = 10;
const int ledAzul = 11;
const int botao = 2;
int estadoBotao = 0;
 
void setup() {
  pinMode(ledAmarelo,OUTPUT);  //Definindo pino 8 como saída.
  pinMode(ledVerde,OUTPUT);    //Definindo pino 9 como saída.
  pinMode(ledVermelho,OUTPUT); //Definindo pino 10 como saída.
  pinMode(ledAzul,OUTPUT);     //Definindo pino 11 como saída.
  
  pinMode(botao,INPUT);        //Definindo pino 2 como entrada.
}
 
void loop() {
  estadoBotao = digitalRead(botao);
  
  if (estadoBotao == HIGH) {
    
    digitalWrite(ledAmarelo,HIGH);
    delay(200);    
    digitalWrite(ledVerde,HIGH);
    delay(200);    
    digitalWrite(ledVermelho,HIGH);
    delay(200);    
    digitalWrite(ledAzul,HIGH);    
    delay(200);
  } else 
   digitalWrite(ledAmarelo,LOW);
    digitalWrite(ledVerde,LOW);
    digitalWrite(ledVermelho,LOW);
    digitalWrite(ledAzul,LOW);
    digitalWrite(ledAmarelo,LOW);
    digitalWrite(ledAmarelo,LOW);
    digitalWrite(ledAmarelo,LOW);  
    digitalWrite(ledVerde,LOW);
    digitalWrite(ledVerde,LOW);
    digitalWrite(ledVermelho,LOW);
    digitalWrite(ledVermelho,LOW);
    digitalWrite(ledAzul,LOW);
    digitalWrite(ledAzul,LOW);
     } 


  o Objetivo é criar o mesmo efeito dos LEds acesos 1 por 1 quando soltar o botão os leds se desligam 1 por 1...

obrigado
   arduino UNO 
  
 

Postado

O else só funciona no primeiro digitalWrite(ledAmarelo,LOW); Ou seja, o que você está fazendo no código é enquanto você aperta o botão ele faz a sequencia de acendimento dos leds quando você solta ele vai executar digitalWrite(ledAmarelo,LOW); e depois disso ele vai para o loop infinito desligando todo o tempo dos leds

 

digitalWrite(ledVerde,LOW);
    digitalWrite(ledVermelho,LOW);
    digitalWrite(ledAzul,LOW);
    digitalWrite(ledAmarelo,LOW);
    digitalWrite(ledAmarelo,LOW);
    digitalWrite(ledAmarelo,LOW);  
    digitalWrite(ledVerde,LOW);
    digitalWrite(ledVerde,LOW);
    digitalWrite(ledVermelho,LOW);
    digitalWrite(ledVermelho,LOW);
    digitalWrite(ledAzul,LOW);
    digitalWrite(ledAzul,LOW);

 

Se você quer modificar isso coloca os "{" do else corretamente para abraçar o resto do código assim como você fez no if...

  • Membro VIP
Postado

Não gosto do estilo de programação do arduino e tal mas percebo duas coisas:

-como observou o amigo @Bommu Perneta também estou achando falta do "}" aperto do "abraço" (gostei disso) do loop. -outra você desliga imediatamente sem delay. Por isso não desligam 1 a 1

 

{       } // abraço

Postado
2 horas atrás, Isadora Ferraz disse:

Não gosto do estilo de programação do arduino e tal mas percebo duas coisas:

-como observou o amigo @Bommu Perneta também estou achando falta do "}" aperto do "abraço" (gostei disso) do loop. -outra você desliga imediatamente sem delay. Por isso não desligam 1 a 1

 

{       } // abraço

Mas o que eu quero fazer é exucutar esse low somente uma vez. Depois passar para outro código.

  • Membro VIP
Postado

Deixa entender... você que um efeito nos leds a cada apertada do botão? Fácil... coloca um...


 

while (estadoBotao==1) estadoBotao = digitalRead(botao); //espera apertar
while (estadoBotao==0) estadoBotao = digitalRead(botao);//espera soltar

 

...entre cada efeito.

Meio doidinho isso mas é só pra você entender o conceito

Postado

 coloca um if para esperar pelo button , dentro do if coloca o while para executar a tarefa de ligar os leds e fora desse while e ainda dentro do if coloca para apagar os leds. Ai ele só vai apagar o led no final se você apertar o button no final. Sem else.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!