Estou tentando fazer um projeto com Arduino mega e dois sensores reflexivo infravermelho E18-d80nk para Acionar, 8 Saídas Digitais que estão ligadas a um modulo relé com 8 reles, o seguinte projeto gostaria que as saídas fossem acionadas temporizadas uma seguida da outra e depois fossem desligadas da mesma maneira temporizadas, tentei usar a função delay mais não está funcionando direito,quando passo perto de um dos sensores ele demora para começar a acionar as saídas.Depois tentei procurar na internet outras alternativas encontrei um biblioteca que segundo o autor era parecida com um temporizador TON muito utilizado na logica ladder que é um temporizador de retardo na energização não deu certo também se alguém puder me ajudar agradeço.
Essa código foi feito com a função delay.
int rele_1=30;
int rele_2=23;
int rele_3=24;
int rele_4=25;
int rele_5=26;
int rele_6=27;
int rele_7=28;
int rele_8=31;
int pino_sensor=2;
int pino_sensor2=3;
unsigned long time;
void setup() {
pinMode (rele_1,OUTPUT);
pinMode (rele_2,OUTPUT);
pinMode (rele_3,OUTPUT);
pinMode (rele_4,OUTPUT);
pinMode (rele_5,OUTPUT);
pinMode (rele_6,OUTPUT);
pinMode (rele_7,OUTPUT);
pinMode (rele_8,OUTPUT);
pinMode(pino_sensor,INPUT);
pinMode(pino_sensor2,INPUT);
}
void loop() {
if (digitalRead(pino_sensor) == HIGH )
{
digitalWrite(rele_8,HIGH);
delay(280);
digitalWrite(rele_7,HIGH);
delay(280);
digitalWrite(rele_6,HIGH);
delay(280);
digitalWrite(rele_5,HIGH);
delay(280);
digitalWrite(rele_4,HIGH);
delay(280);
digitalWrite(rele_3,HIGH);
delay(280);
digitalWrite(rele_2,HIGH);
delay(280);
digitalWrite(rele_1,HIGH);
delay(280);
if(digitalRead(pino_sensor) == LOW)
{
digitalWrite(rele_1,LOW);
digitalWrite(rele_2,LOW);
digitalWrite(rele_3,LOW);
digitalWrite(rele_4,LOW);
digitalWrite(rele_5,LOW);
digitalWrite(rele_6,LOW);
digitalWrite(rele_7,LOW);
digitalWrite(rele_8,LOW);
}
}
if (digitalRead(pino_sensor2) == HIGH )
{
digitalWrite(rele_1,HIGH);
delay(280);
digitalWrite(rele_2,HIGH);
delay(280);
digitalWrite(rele_3,HIGH);
delay(280);
digitalWrite(rele_4,HIGH);
delay(280);
digitalWrite(rele_5,HIGH);
delay(280);
digitalWrite(rele_6,HIGH);
delay(280);
digitalWrite(rele_7,HIGH);
delay(280);
digitalWrite(rele_8,HIGH);
delay(280);
if(digitalRead(pino_sensor2) == LOW)
{
digitalWrite(rele_1,LOW);
digitalWrite(rele_2,LOW);
digitalWrite(rele_3,LOW);
digitalWrite(rele_4,LOW);
digitalWrite(rele_5,LOW);
digitalWrite(rele_6,LOW);
digitalWrite(rele_7,LOW);
digitalWrite(rele_8,LOW);
}
}
}
Esse é o outro codigo utilizando a biblioteca que encontrei na internet. Link da Biblioteca Temporizador
int sensorPin = 31;
int rele1 = 30;
int rele2 = 23;
int rele3 = 24;
int rele4 = 25;
int rele5 = 26;
unsigned long tempo = 0; // variável para receber valores do millis()
unsigned long temp1 = 0;
unsigned long temp2 = 0;
unsigned long temp3 = 0;
unsigned long temp4 = 0;
int temporizador = 0;// variável para indicar quando o temporizador está operando
int tempor1 = 0;
int tempor2 = 0;
int tempor3 = 0;
int tempor4 = 0;
int sensorState = 0;
void setup() {
pinMode(rele1, OUTPUT);
pinMode(rele2, OUTPUT);
pinMode(rele3, OUTPUT);
pinMode(rele4, OUTPUT);
pinMode(rele5, OUTPUT);
pinMode(sensorPin, INPUT);
}
void loop(){
sensorState = digitalRead(sensorPin); // lê o estado do botão
if (sensorState == HIGH && temporizador == 0) { // se botão acionado
temporizador = 1; // inicia o temporizador
tempo = millis(); // passa à variável o valor de millis()
}
if (sensorState == HIGH && tempor1 == 0) { // se botão acionado
tempor1 = 1; // inicia o temporizador
temp1 = millis(); // passa à variável o valor de millis()
}
if (sensorState == HIGH && tempor2 == 0) { // se botão acionado
tempor2 = 1; // inicia o temporizador
temp2 = millis(); // passa à variável o valor de millis()
}
if (sensorState == HIGH && tempor3 == 0) { // se botão acionado
tempor3 = 1; // inicia o temporizador
temp3 = millis(); // passa à variável o valor de millis()
}
if (sensorState == HIGH && tempor4 == 0) { // se botão acionado
tempor4 = 1; // inicia o temporizador
temp4 = millis(); // passa à variável o valor de millis()
}
if (millis() - tempo >= 1000 && temporizador == 1){ // após 1 segundo e temporizador
// ligado
digitalWrite(rele1, HIGH); // aciona o LED
}
if (millis() - temp1 >= 1200 && tempor1 == 1){ // após 1 segundo e temporizador
// ligado
digitalWrite(rele2, HIGH); // aciona o LED
}
if (millis() - temp2 >= 1400 && tempor2 == 1){ // após 1 segundo e temporizador
// ligado
digitalWrite(rele3, HIGH); // aciona o LED
}
if (millis() - temp3 >= 1600 && tempor3 == 1){ // após 1 segundo e temporizador
// ligado
digitalWrite(rele4, HIGH); // aciona o LED
}
if (millis() - temp4 >= 1800 && tempor4 == 1){ // após 1 segundo e temporizador
// ligado
digitalWrite(rele5, HIGH); // aciona o LED
}
if (millis() - tempo >= 2000 && temporizador == 1){ // após 2 seg. e temporizador
//desligado
digitalWrite(rele1, LOW); // apaga o LED
temporizador = 0; // desliga o temporizador
}
if (millis() - temp1 >= 2200 && tempor1 == 1){ // após 2 seg. e temporizador
//desligado
digitalWrite(rele2, LOW); // apaga o LED
tempor1 = 0; // desliga o temporizador
}
if (millis() - temp2 >= 2400 && tempor2 == 1){ // após 2 seg. e temporizador
//desligado
digitalWrite(rele3, LOW); // apaga o LED
tempor2 = 0; // desliga o temporizador
}
if (millis() - temp3 >= 2600 && tempor3 == 1){ // após 2 seg. e temporizador
//desligado
digitalWrite(rele4, LOW); // apaga o LED
tempor3 = 0; // desliga o temporizador
}
if (millis() - temp4 >= 2800 && tempor4 == 1){ // após 2 seg. e temporizador
//desligado
digitalWrite(rele5, LOW); // apaga o LED
tempor4 = 0; // desliga o temporizador
}
}