Good night,
I'm having trouble making the following program:
unsigned long interval=1500; // the time we need to wait
unsigned long interval2=2800; // the time we need to wait
unsigned long waitUntil=interval; // millis() returns an unsigned long.
unsigned long waitUntil2=interval2; // millis() returns an unsigned long.
void playDRL(){
val_1 = digitalRead (PRESENCA); //variável para armazenar o valor lido da luz de presença da matrícula
val_2 = digitalRead (PISCAD); //variável para armazenar o valor lido do pisca direito
val_3 = digitalRead (PISCAE); //variável para armazenar o valor lido do pisca direito
//A lógica é quando ligo a luz de presença ele conta 1,5 segundos para executar as linhas seguintes
if (val_1 == HIGH || val_2 == HIGH && val_3 == HIGH && (unsigned long)(millis() - waitUntil) >= interval){
waitUntil =+ interval; // Incrementa mais 1,5 segundos e depois passa à ordem...
digitalWrite(FAROLD,LOW);
digitalWrite(FAROLE,LOW);
}else{
if (val_1 == LOW && val_2 == HIGH && val_3 == LOW && (unsigned long)(millis() - waitUntil) >= interval){
waitUntil =+ interval; // Incrementa mais 1,5 segundos e depois passa à ordem...
digitalWrite(FAROLD,LOW);
digitalWrite(FAROLE,HIGH);
}else{
if (val_1 == LOW && val_2 == LOW && val_3 == HIGH && (unsigned long)(millis() - waitUntil) >= interval){
waitUntil =+ interval; // Incrementa mais 1,5 segundos e depois passa à ordem...
digitalWrite(FAROLD,HIGH);
digitalWrite(FAROLE,LOW);
}else{
//Como nenhum é verdadeiro quando ligo o carro, ele espera 2,8 segundos para ativar as luzes DRL fortes
if (val_1 == LOW && val_2 == LOW && val_3 == LOW && (unsigned long)(millis() - waitUntil2) >= interval2){
waitUntil2 =+ interval2; // Increase our wait for another 2800ms.
digitalWrite(FAROLD,HIGH);
digitalWrite(FAROLE,HIGH);
}}}}}
Function:
When I have the headlights on, or the TURN SIGNALS on, DRL are off.
When I TURN SIGNALS driver's side on, DRL TURN SIGNALS driver's side off.
When I TURN SIGNALS passenger side on, DRL TURN SIGNALS passenger side off.
I need to wait 500ms before activating, and 1500ms when disables the functions
Sorry for bad english ...
I have also tested this way:
void playDRL(){
val_1 = digitalRead (PRESENCA); //variável para armazenar o valor lido da luz de presença da matrícula
val_2 = digitalRead (PISCAD); //variável para armazenar o valor lido do pisca direito
val_3 = digitalRead (PISCAE); //variável para armazenar o valor lido do pisca direito
/*
//Se a condição for verdadeira ele espera 1,5 segundos para desligar as DRL fortes...
if (val_1 == HIGH || val_2 == HIGH && val_3 == HIGH){
unsigned long tempo = millis(); // * variável tempo, recebe o retorno da função
while(tempo + 50 > millis()); // ** Laço de repetição while, será abordado em um post na sequência.
digitalWrite(FAROLD,LOW);
digitalWrite(FAROLE,LOW);
}
//Se a condição for verdadeira ele espera 1,5 segundos para desligar a DRL DIREITA...
else if (val_1 == LOW && val_2 == HIGH && val_3 == LOW){
unsigned long tempo = millis(); // * variável tempo, recebe o retorno da função
while(tempo + 50 > millis()); // ** Laço de repetição while, será abordado em um post na sequência.
digitalWrite(FAROLD,LOW);
digitalWrite(FAROLE,HIGH);
}
//Se a condição for verdadeira ele espera 1,5 segundos para desligar a DRL ESQUERDA...
else if (val_1 == LOW && val_2 == LOW && val_3 == HIGH){
unsigned long tempo = millis(); // * variável tempo, recebe o retorno da função
while(tempo + 50 > millis()); // ** Laço de repetição while, será abordado em um post na sequência.
digitalWrite(FAROLD,HIGH);
digitalWrite(FAROLE,LOW);
}
//SE NENHUMA CONDIÇÃO ANTERIOR FOR VERDADEIRA ESPERA 2,8 SEGUNDOS PARA ATIVAR AS DRL FORTES
else{
unsigned long tempo = millis(); // * variável tempo, recebe o retorno da função
while(tempo + 500 > millis()); // ** Laço de repetição while, será abordado em um post na sequência.
digitalWrite(FAROLD,HIGH);
digitalWrite(FAROLE,HIGH);
}
}
Thank you.
Marcog
Portugal