EStou desenvolvendo um projeto que funciona da seguinte forma:

Tenho 1 botão e 1 led.

EX: quando o botão for acionado o led, ascende por 1 minuto, apaga por 1 minutos, ascende por 1 minutos, e apaga... 

Tentei  com o comando delay mas não ele irá atrapalhar o funcionamento do resto do programa.Me falaram que poderia usar outras funções como por exemplo a "millis", porem sou muito LEIGO ainda com arduino e programação 

Obrigado!

Exibições: 266

As respostas para este tópico estão encerradas.

Respostas a este tópico

Olá Anderson !

Realmente a instrução delay tem esse inconveniente. Para contornar, existem diversos modos. O mais simples seria você criar um contador para cada botão. Quando um botão é pressionado você passa a incrementar 1 ao contador desse botão até que ele chegue a um limite pré definido ou quando outro botão for pressionado.

Charles

Veja o exemplo de código (não cheguei a testar, mas compilou):

int bot1=9,bot2=10,est_bot1,est_bot2;  //define botões e estado dos botões

int bot1_cont,bot2_cont;   //contadores dos botões

int led1=8,led2=7;       

 

void setup() {

  pinMode(bot1,INPUT);

  pinMode(bot2,INPUT);

  pinMode(led1,OUTPUT);

  pinMode(led2,OUTPUT);

}

 

void loop() {

  est_bot1=digitalRead(bot1);

  if (est_bot1 == HIGH){             //Se o botão 1 for pressionado...

    bot2_cont = 0;                   //zera o contador do botão 2

    digitalWrite(led2,LOW);          //apaga o led 2

    digitalWrite(led1,HIGH);         //acende o led 1

    bot1_cont = bot1_cont + 1;       //e soma um ao contador 1

   

    if (bot1_cont >= 5000){           //quando chegar o limite

      digitalWrite(led1,LOW);         //desliga o led

      bot1_cont = 0;                  //e zera o contador

    }

  }

 

  est_bot2=digitalRead(bot2);

  if (est_bot2 == HIGH){

    bot1_cont = 0;

    digitalWrite(led1,LOW);

    digitalWrite(led2,HIGH);

    bot2_cont = bot2_cont + 1;

   

    if (bot2_cont >= 10000){

      digitalWrite(led2,LOW);

      bot2_cont = 0;

    }

  }

 

}

Obrigado Charles ! Irei fazer os teste e qualquer e depois compartilho aqui o resultados..

Oi Mr. A, boa noite.

A função mlillis() e a função micros(), são realmente boas opções para o seu caso.

Existe também a opção de usar o conceito de threads.

O que posso dizer da sua dificuldade ao usar a função millis(0. e que talvez a sua base de conhecimento da

"linguagem C" do arduino não esteja ainda sólida.

Recomendo estudar mais a linguagem.

Mas se quiser poste seu code  aqui "como arquivo anexado "   e daremos uma olhada nele, para sugerir melhorias.

Rui

Olá Rui , Obrigado pela atenção

Então como disse tenho pouquíssima experiencia com arduino... estou fazer essa programação mas não estou tendo resultados .-

Esse é um código que tentei elaborar..

Se puder ajudar sugerir agradeço desde já

////////////////////////////////////////////////////////////////////////////////////////////////

const int ledPin = 53; // o número do pino em que o LED está

int var2=0; // valor guardado
int estado=0; // guarda o valor 0 ou 1 (HIGH ou LOW)

int ledState = LOW; // ledState usado para o estado do LED
long previousMillis = 0;

long interval = 2000; // intervalo de mudança (milissegundos)
long interval2 = 1000;

void setup() {
pinMode(ledPin, OUTPUT);
}
void loop()
{
// aqui fica o código que deve estar rodando todo o tempo.
unsigned long currentMillis = millis();

if(currentMillis - previousMillis > interval) {
// salva a última vez que você piscou o LED
previousMillis = currentMillis; // ler o valor enviado pelo botão: "HIGH" ou "LOW"

// se o LED está ligado, ele sera desligado, e vice versa:
if (ledState == LOW)
ledState = HIGH;

if(currentMillis - previousMillis > interval2){ // TENTEI AQUI FAZER COM QUE O LED DESLIGA-SE POR UM INTERVALO DE TEMPO DIFERENTE DE "long interval2"//

previousMillis = currentMillis;

if ( ledState ==HIGH);
ledState = LOW;

// envia o estado (alto ou baixo) para o LED:

digitalWrite(ledPin, ledState);
}
}
}

 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço