# Usar millis em vez de delay numa função

**URL:** <https://forum.fazedores.com/t/usar-millis-em-vez-de-delay-numa-funcao/8166>\
**Category:** Arduino\
**Created:** [Maio 4, 2021, 10:47pm UTC](https://forum.fazedores.com/t/usar-millis-em-vez-de-delay-numa-funcao/8166 "2021-05-04T22:47:15Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![anasofia](https://avatars.discourse-cdn.com/v4/letter/a/c6cbf5/32.png) [@anasofia](https://forum.fazedores.com/u/anasofia)\
**Post date:** [Maio 4, 2021, 10:47pm UTC](https://forum.fazedores.com/t/usar-millis-em-vez-de-delay-numa-funcao/8166/1 "2021-05-04T22:47:15Z")

</div>

Boa Noite,  
Me ajudem o meu codigo está quase pronto mas queria que ele ativasse alarme sempre que alguem passasse o vermelho dos peões mesmo quando ele pisca o problema é que nao consegui alterar o codigo do piscar para um sem delay logo não consigo ativar alarme devido á pausa fornecida pelo delay, alguem pode ajudar?

codigo:  
const int buttonPin = 2; // o numero do pino do botão  
const int vermelho = 12; // o numero do pino do LED vermelho  
const int amarelo = 11; // numero do pino led amarelo  
const int verde = 10; // numero do pino led verde para veiculos  
const int vermelho2 = 7; // numero do pino led vermelho para peões  
const int verde2 = 6; // numero do pino led verde para peões  
const int sensorPin = 3; // numero do pino sensor  
const long interval = 3000; // intervalo que permanece o alarme ativado sem qualquer outra intervenção  
const int piezo = 5; // numero do pin do piezo  
int buttonState = 0; // estado do botão inicial  
int sensorState = LOW; // estado do sensor inicial  
int ledRedState = LOW;  
unsigned long previousTime = 0; //tempo inicial  
unsigned char i = 0;  
void setup()  
{  
pinMode(vermelho, OUTPUT); //os leds e o piezo são dispositivos de output  
pinMode(amarelo, OUTPUT); //o botão e o sensor são dispositivos de input  
pinMode(verde, OUTPUT);  
pinMode(vermelho2, OUTPUT);  
pinMode(verde2, OUTPUT);  
pinMode(buttonPin, INPUT);  
pinMode(piezo, OUTPUT);  
pinMode(sensorPin, INPUT\_PULLUP);  
attachInterrupt(digitalPinToInterrupt(sensorPin), blink, RISING); //interrupt para fazer o alarme ligar sempre que o sensor seja ativado enquanto está vermelho para os peões  
}  
void loop()  
{  
digitalWrite(piezo, sensorState); //o alarme funciona consoante o estado do sensor  
buttonState = digitalRead(buttonPin); //lê o estado do botão  
if (buttonState == HIGH) { //condição para quando o botão está ativo  
digitalWrite(verde, LOW); //desliga led verde para os carros  
delay(2000); //permanece 2s desligado até o amarelo ligar  
digitalWrite(amarelo, HIGH); //liga amarelo  
delay(2000); //permanece 2s ligado até o mesmo desligar  
digitalWrite(amarelo, LOW); //desliga amarelo  
digitalWrite(vermelho, HIGH); //liga vermelho para os carros  
delay(2000); //passam-se 2s para o vermelhos para os p~eos ser desativado  
digitalWrite(vermelho2, LOW); //desliga o vermelho para os peões  
digitalWrite(verde2, HIGH); //liga o verde para os peões  
noTone(5); //desliga alarme  
delay(10000); //permanece 10s ligado o verde  
digitalWrite(verde2, LOW); //desliga verde para peões  
piscapisca(); //função para fazer piscar o led vermelho para os peões  
digitalWrite(vermelho, LOW); //desliga vermelho para os carros  
}  
else { // condição para quando o botão está desativado  
digitalWrite(vermelho2, HIGH); //liga vermelho para os peões  
if(digitalRead(sensorPin) == HIGH){ //condição se o sensor for ativado  
tone(5, 300); //ativa o alarme a 300Hz  
previousTime = millis(); //regista o tempo  
}  
}  
unsigned long currentTime = millis(); //declarar a variavel do tempo atual  
if (currentTime - previousTime \>= interval) { //verifica se o tempo está no intervalo  
previousTime = currentTime; //guarda tempo atual

```
noTone(5); //desativa o alarme após 3s (intervalo)

```

}  
delay(10); //passam-se 0,010s  
digitalWrite(verde, HIGH); //liga verde para carros  
}

void blink() { //função do interruptor  
if(digitalRead(vermelho2) == HIGH){ //condição para quando o sinal vermelho para peões estiver ativado  
tone(5,300); //ativa alarme a 300Hz  
}  
}

void piscapisca(){ //função para fazer o led piscar  
for (i=0; i\<6; i++){ //piscar 6 vezes  
digitalWrite(vermelho2, HIGH); //liga led vermelho para peões  
delay(500); //permanece 0,5s ligado  
digitalWrite(vermelho2, LOW); //desliga led vermelho para peões  
delay(500); //permanece 0,5s desligado  
}  
}

---

<div class="post-metadata">

**Author:** ![anasofia](https://avatars.discourse-cdn.com/v4/letter/a/c6cbf5/32.png) [@anasofia](https://forum.fazedores.com/u/anasofia)\
**Post date:** [Maio 6, 2021, 11:10am UTC](https://forum.fazedores.com/t/usar-millis-em-vez-de-delay-numa-funcao/8166/2 "2021-05-06T11:10:35Z")

</div>

resolvido!!!
