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!
Tags:
As respostas para este tópico estão encerradas.
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);
}
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por