delay x milli

Alguem poderia trocar todos os delays por millis pfv? Eu não manjo muito de milli, se alguem puder ajudar eu agradeço
Não são muitos…
Pelos mesmos valores…
obg!

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 1
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.

char st[20];

volatile int passouCartao = 0;
int carRed = 7; // estabelece o semáforo para carros
int carYellow = 6;
int carGreen = 5;
int pedRed = 4; // estabelece o semáforo para pedestres
int pedGreen = 3;
int button = 2; // pino do botão
int ok = 9; // está tudo OK para atravesar
int rfidGDS = 8;
int crossTime = 5000; //(5 segundos)
unsigned long changeTime; // tempo desde que o botão foi pressionado

//wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

void interrupcao(){
digitalWrite (rfidGDS, HIGH);
passouCartao = 1;
}

void setup() {

pinMode(ok, OUTPUT);
pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
pinMode(carGreen, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(rfidGDS, OUTPUT);
pinMode(button, INPUT_PULLUP); // botão no pino 2

digitalWrite(ok, LOW);

// acende a luz verde (carros) e vermelha (pedestre)
attachInterrupt(0,interrupcao,CHANGE); //Configurando a interrupção, 0 é pino 2 do UNO

Serial.begin(9600); // Inicia a serial
SPI.begin(); // Inicia SPI bus
mfrc522.PCD_Init(); // Inicia MFRC522
Serial.println(“Aproxime o seu cartao do leitor…”);
Serial.println();

}

//wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww

void loop() {
digitalWrite(ok, LOW);
digitalWrite(carGreen, HIGH);
digitalWrite(pedRed, HIGH);
delay(5000);
digitalWrite(carGreen, LOW);
digitalWrite(carYellow, HIGH);
delay(3000);
digitalWrite(carYellow, LOW);
digitalWrite(carRed, HIGH);
delay(2000);
digitalWrite(pedRed, LOW); // apaga o vermelho dos pedestres
digitalWrite(pedGreen, HIGH); // acende o verde dos pedestres
delay(crossTime); // espera por um intervalo de tempo predefinido (variável = 5seg)
// pisca o verde dos pedestres
digitalWrite(pedGreen, LOW);
for (int x=0; x<10; x++) {
digitalWrite(pedRed, HIGH);
delay(250);
digitalWrite(pedRed, LOW);
delay(250);
digitalWrite(pedGreen, LOW);
}
// acende o vermelho dos pedestres

digitalWrite(pedRed, HIGH);
delay(1000);
digitalWrite(carRed, LOW);

if (passouCartao == 1){
dezSeg();
}
}

void dezSeg() {

digitalWrite(ok, HIGH);
digitalWrite(carGreen, HIGH);
digitalWrite(pedRed, HIGH);
delay(5000);
digitalWrite(carGreen, LOW);
digitalWrite(carYellow, HIGH);
delay(3000);
digitalWrite(carYellow, LOW);
digitalWrite(carRed, HIGH);
delay(2000);
digitalWrite(pedRed, LOW); // apaga o vermelho dos pedestres
digitalWrite(pedGreen, HIGH); // acende o verde dos pedestres
delay(15000); // espera por um intervalo de tempo predefinido (variável = 5seg)
// pisca o verde dos pedestres
digitalWrite(pedGreen, LOW);
for (int x=0; x<10; x++) {
digitalWrite(pedRed, HIGH);
delay(250);
digitalWrite(pedRed, LOW);
delay(250);
digitalWrite(pedGreen, LOW);
}
// acende o vermelho dos pedestres

digitalWrite(pedRed, HIGH);
delay(1000);

digitalWrite(ok, LOW);
digitalWrite(rfidGDS, LOW);
delay(250);
digitalWrite(rfidGDS, HIGH);
delay(250);
digitalWrite(rfidGDS, LOW);
delay(250);
digitalWrite(rfidGDS, HIGH);
delay(250);
digitalWrite(rfidGDS, LOW);

digitalWrite(carRed, LOW);

// registra o tempo desde a última alteração no semáforo
changeTime = millis();
// depois retorna para o loop principal do programa
passouCartao = 0;
}

Cara abre o arquivo .ino com o notepad++ e aperta Ctrl+f e depois pede para procurar e substituir todos, mas você quer substituir por millis() ou delayMicroseconds()?

tecdiego:
Cara abre o arquivo .ino com o notepad++ e aperta Ctrl+f e depois pede para procurar e substituir todos, mas você quer substituir por millis() ou delayMicroseconds()?

por millis

Você declarou que vai usar RFID em seu programa, mas não emprega as demais funções pertinentes ao uso do RFID.

#define SS_PIN 10
#define RST_PIN 1

MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.

mfrc522.PCD_Init(); // Inicia MFRC522

Isso ai diz que quer usar, mas as demais funções de leitura propriamente estão ausentes.

Outra coisa, você uma interrupção CHANGE, que gera a interrupção ao passar de 0v para 5v, ou de 5v para 0v. Não seria o caso de RISING que é mudança de estado de 0v para 5v com o devido resistor de pull down conectado?

Você estaria simulando um RFID com essa interrupção?

Você quer usar millis() para poder não bloquear o programa, o que é uma boa ideia. Mas antes de ir adiante, veja essa questão do RFID e explique como esse botão da interrupção está conectado...

Jeff_85:
Você declarou que vai usar RFID em seu programa, mas não emprega as demais funções pertinentes ao uso do RFID.

Isso ai diz que quer usar, mas as demais funções de leitura propriamente estão ausentes.

Outra coisa, você uma interrupção CHANGE, que gera a interrupção ao passar de 0v para 5v, ou de 5v para 0v. Não seria o caso de RISING que é mudança de estado de 0v para 5v com o devido resistor de pull down conectado?

Você estaria simulando um RFID com essa interrupção?

Você quer usar millis() para poder não bloquear o programa, o que é uma boa ideia. Mas antes de ir adiante, veja essa questão do RFID e explique como esse botão da interrupção está conectado…

o botao nao tem nada a ver com o RFID, eu uso ele para teste, (void interrupção)
essa parte da programação do RFID vou mexer depois… primeiro preciso resolver o caso dos delays e urgente asduhaduas consegue colocar millis no lugar do delay??

para colocar millis, precisa de uma programaçao certa, e eu nao sei mexer com isso, mas preciso do milli para tirar os delays

Tudo bem que não saiba mexer com RFID, isso não é um problema. Depois então precisa retirar essas referências de seu código para torná-lo mais limpo e fácil de entender.

Vou dar uma sugestão para você. Seu programa está sendo bloqueado por delay, isso até você já entendeu. Entre na IDE do Arduino e veja o exemplo 02. Digital / BlinkWhithoutDelay. Nela um piscar de led é feita com millis.

Se entender como o millis trabalha, vai entender que essa interrupção em seu programa é desnecessária.

Embora talvez seja possível substituir os delays pela função milis() como exemplificado nos exemplos do Arduino, isso seria um trabalho "horrível" de fazer além de não ser muito fácil de manter ou expandir no futuro.

Pelo nome das variáveis estás a fazer um semáforo e se fosse a ti pesquisaria por máquinas de estados e tentaria fazer algo dessa maneira. Começa por definir quais os estados que vão existir e que condições são necessárias para passar entre estados e tudo se torna mais simples. Não penses em programar, faz uma espécie de fluxograma com estados e condições sendo setas.