Preciso substituir o delay

unsigned long clique_tempo=0;
unsigned long botaopressionado=0;
int estadobotao=1;
int cont=0;

void setup(){

DDRD=1<<DDD7; //pino 7 para led 1
DDRB=1<<DDB0; //pino 8 para led 2
DDRB=1<<DDB1; //pino 9 para led 3
DDRD=DDRD &~(1<<DDD2); //pino 2 entrada para botao
PORTD=PORTD | 1<<PD2; //seta 1 para o pino 2

}

void loop(){

estadobotao=PIND & 1<<PD2; //faz a leitura do botao

bool estadobotao2=estadobotao!=0; //verifica se o botao ta pressionado

if(estadobotao==0 && clique_tempo==0){
clique_tempo=millis();
}

if(estadobotao2){ //verifica se o botão foi solto após ser apertado
clique_tempo=0;
}

if(estadobotao==0){ //verifica se o botão continua pressionado
botaopressionado=(millis()-clique_tempo);

if(botaopressionado>1000){ //verifica se o tempo é maior q 1seg para desligar todos os leds
  PORTD=PORTD & ~(1<<PD7); //desliga o led do pino 7
  PORTB=PORTB & ~(1<<PB1); //desliga o led do pino 8
  PORTB=PORTB & ~(1<<PB0); //desliga o led do pino 9
  cont=0;
  delay(500);
} 

else if(botaopressionado<=1){
  delay(1);
  cont++;

  //ordem de acendimento dos leds
  if(cont==1){
    PORTD=PORTD & ~(1<<PD7); //desliga o led do pino 7
    PORTB=PORTB & ~(1<<PB0); //desliga o led do pino 8
    PORTB=PORTB | 1<<PB1;    //liga o led do pino 9
    delay(200);
  }

  if(cont==2){
    PORTD=PORTD & ~(1<<PD7); //desliga o led do pino 7
    PORTB=PORTB | 1<<PB0;    //liga o led do pino 8
    PORTB=PORTB & ~(1<<PB1); //desliga o led do pino 9
    delay(200);
  }

  if(cont==3){
    PORTD=PORTD | 1<<PD7;    //liga o led do pino 7
    PORTB=PORTB & ~(1<<PB0); //desliga o led do pino 8
    PORTB=PORTB & ~(1<<PB1); //desliga o led do pino 9       
    cont=0;
    delay(200);
  }

}
}
}

substituir por o que ?

1 curtida

minha bola crystal diz que deve ser um non-blocking delay, mas eu comprei ela do aliexpress por 3 reais com frete gratis.

1 curtida

preciso mexer num projeto e não posso usar a função delay(). precisa de algo pra desempenhar o papel dela!

tirar o delay do codigo sem mudar o funcionamento

so preciso tirar o delay do codigo mas sem mudar o funcionamento

olha o exemplo blink without delay , incluso no arduino
ou
usa um sistema como freertos com um st

1 curtida