bOA TARDE!

Criei o seguinte programa.
em um botão ``botAzul`` faço o led piscar 10x no ``botVermelho`` o led vermelho pisca 10x também e com o verde mesma coisa, o único problema é que tenho que esperar por exemplo a sequencia de 10x do led azul para poder acionar a do vermelho por exemplo, gostaria de que o led verde estivesse piscando e já acionasse o vermelho ou verde, alguém pode ajudar?
o programa é este:
‪#‎define‬ ledAzul 2
#define ledVermelho 3
#define ledVerde 4
#define ativAzul 5
#define ativVermelho 6
#define ativVerde 7
#define camp 8
void setup() {
pinMode(ledAzul, OUTPUT);
pinMode(ledVermelho, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ativAzul, INPUT_PULLUP);
pinMode(ativVermelho, INPUT_PULLUP);
pinMode(ativVerde, INPUT_PULLUP);
pinMode(camp, OUTPUT);
digitalWrite(ledAzul, LOW);
digitalWrite(ledVermelho, LOW);
digitalWrite(ledVerde, LOW);
}
void loop() {
if(digitalRead(ativAzul) == 0)
{atendimento1();}
if(digitalRead(ativVermelho) ==0)
{atendimento2();}
if(digitalRead(ativVerde) == 0)
{atendimento3();}
}
void atendimento1() {
for(int x=0; x<10; x++)
{digitalWrite(ledAzul, HIGH);
delay(500);
digitalWrite(ledAzul, LOW);
delay(500);
}}
void atendimento2() {
for(int x=0; x<10; x++)
{digitalWrite(ledVermelho, HIGH);
delay(500);
digitalWrite(ledVermelho, LOW);
delay(500);
}}
void atendimento3() {
for(int x=0; x<10; x++)
{digitalWrite(ledVerde, HIGH);
delay(500);
digitalWrite(ledVerde, LOW);
delay(500);
}
}

Exibições: 3069

Responder esta

Respostas a este tópico

Cara, tenta trigger. Faça uma busca por "Arduino trigger" no google que encontrará muito conteúdo a respeito.

Isso acontece pq o seus procedimentos de piscar um led ficam dentro de um loop, e somente depois do fim do loop que o programa estará apto a ler o estado dos botoes. Voce pode usar interrupção do timerOne, ou fazer uma programação de um ajeito que mesmo dentro do loop o estado possa ser lido e o comando executado

O que o Gabriel Zanetti disse está corrente, você precisa fazer o programa de tal forma que ele não se mantenha preso em um loop.

Vendo esse problema resolvi tentar criar uma solução e vou contar a forma que encontrei. Primeiro declare duas array de 3 elementos, uma irá contar quantas vezes ocorreu a alteração de estado do led e a outra irá guardar o ultimo momento em que ocorreu essa alteração, vamos chamar de Leds e Last. Precisa ser array porque cada posição será correspondente a um led nas duas array.

No inicio do loop faça a verificação de cada botão normalmente, mas dentro do IF coloque led[X] = 1; substituindo X pelo numero correspondente ao botão

if(digitalRead(ativAzul)==LOW) led[0] = 1;
if(digitalRead(ativVermelho)==LOW) led[1] = 1;
if(digitalRead(ativVerde)==LOW) led[2] = 1;

Agora utilize uma FOR para percorrer as 3 posições da array buscando por alterações no tempo e verificando se a variável led[i] é diferente de 0 (simbolizando que pode iniciar o processo de piscar o led).

for(int i=0; i<3; i++){
    if(millis()-last[i]>500 && led[i]>0){
        led[i]++;
        digitalWrite(2+i, !digitalRead(2+i));
        last[i] = millis();
    }
}

Observe que utilize millid()-last[i]>500, isso significa que o led terá seu estado alterado a cada meio segundo. Para intervalos de tempo diferente basta alterar esse valor 500.

Por ultimo use outro FOR, mas dessa vez para verificar se o led ja piscou as 10 vezes (ou seja, 20 alterações)

for(int i=0; i<3; i++){
      if(led[i]>=20) led[i]=0;
}

Sou iniciante em arduino, tem como me enviar seu programa completo, para mim entender melhor?

desde já agradeço pela ajuda de todos!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço