Boa tarde pessoal;

   Sou iniciante em arduino, mas ja estou apaixonado pelo brinquedinho. Estou fazendo uma pequena aplicação em que tenho botoes, leds, buzzer e display de 7 seguimentos. Eu consigo fazer tudo funcionar, mas tem um probleminha: coloquei delay de 1000 milisegundos para o contador do display, porem, quando ele inicia a contagem, eu não posso fazer mais nada até ele acabar de contar, eu fiz algo parecido com isso:

void loop()
{
btestado = digitalRead(btcont);
if (btestado == LOW) {

lcd();
}

void lcd1() {
digitalWrite (41, 0);
digitalWrite (43, 0);
digitalWrite (45, 0);
digitalWrite (47, 1);
digitalWrite (49, 1);
digitalWrite (51, 0);
digitalWrite (53, 0);  //9
delay (1000);
digitalWrite (41, 0);
digitalWrite (43, 0);
digitalWrite (45, 0);
digitalWrite (47, 0);
digitalWrite (49, 0);
digitalWrite (51, 0);
digitalWrite (53, 0);   //8
delay (1000);
digitalWrite (41, 0);
digitalWrite (43, 0);
digitalWrite (45, 0);
digitalWrite (47, 1);
digitalWrite (49, 1);
digitalWrite (51, 1);
digitalWrite (53, 1);  //7
delay (1000);
digitalWrite (41, 1);
digitalWrite (43, 1);
digitalWrite (45, 0);
digitalWrite (47, 0);
digitalWrite (49, 0);
digitalWrite (51, 0);
digitalWrite (53, 0);   //6
delay (1000);
  .....e por aí vai até 0

    O sistema fica parado até que chegue ao zero e finalize o ultimo delay de 1 segundo. Como faço para que isso não aconteça?

Muito obrigado.

Exibições: 407

Responder esta

Respostas a este tópico

No caso, você queria que ele pudesse aguardar algum botão ser pressionado enquanto a cada 1 segundo o display continuasse sendo atualizado certo? Bom, pra isso vai ser preciso um artifício de "multi-tarefação".

A ideia é usar a função millis() que retorna o uptime (tempo corrido) desde que você energizou o arduino em milissegundos e criar uma função de atualizar o display que só seja chamada a cada 1 segundo.

Não sei exatamente o que você quer que o botão faça quando pressionado mas, o que quer que você coloque dentro do loop agora que não tenha delay, não vai interferir no display, que vai ficar em função decrescente eterna a cada 1 segundo.


Mais detalhes aqui: http://arduino.cc/en/Tutorial/BlinkWithoutDelay

int last_digit = 9;

unsigned long atual, anterior1 = 0;

void setup()
{
pinMode(41, OUTPUT);
pinMode(43, OUTPUT);
pinMode(45, OUTPUT);
pinMode(47, OUTPUT);
pinMode(49, OUTPUT);
pinMode(51, OUTPUT);
pinMode(53, OUTPUT);
}

void loop()
{
// btestado = digitalRead(btcont);
// if (btestado == LOW)
// {
atual = millis();
if ((atual - anterior1) > 1000)
{
lcd();
anterior1 = atual;
}
// lcd();
// }

//Qualquer código sem delay aqui
}

void lcd()
{
if(last_digit == 9)
{
digitalWrite (41, 0);
digitalWrite (43, 0);
digitalWrite (45, 0);
digitalWrite (47, 1);
digitalWrite (49, 1);
digitalWrite (51, 0);
digitalWrite (53, 0); //9
}
else if(last_digit == 8)
{
digitalWrite (41, 0);
digitalWrite (43, 0);
digitalWrite (45, 0);
digitalWrite (47, 0);
digitalWrite (49, 0);
digitalWrite (51, 0);
digitalWrite (53, 0); //8
}
else if(last_digit == 7)
{
digitalWrite (41, 0);
digitalWrite (43, 0);
digitalWrite (45, 0);
digitalWrite (47, 1);
digitalWrite (49, 1);
digitalWrite (51, 1);
digitalWrite (53, 1); //7
}
else if(last_digit == 6)
{
digitalWrite (41, 1);
digitalWrite (43, 1);
digitalWrite (45, 0);
digitalWrite (47, 0);
digitalWrite (49, 0);
digitalWrite (51, 0);
digitalWrite (53, 0); //6
}
else if(last_digit == 5)
{
// Digital writes para 5
}
else if(last_digit == 4)
{
// Digital writes para 4
}
else if(last_digit == 3)
{
// Digital writes para 3
}
else if(last_digit == 2)
{
// Digital writes para 2
}
else if(last_digit == 1)
{
// Digital writes para 1
}
else if(last_digit == 0)
{
// Digital writes para 0
}
if(last_digit == 0)
{
last_digit == 9;
}
else
{
last_digit--;
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço