Duvida, quero ligar três "led's" de forma sequencial em um horário especifico, no entanto estou achando o código muito longo,acho que daria para deixa-lo mais compacto, ja estou a um tempinho quebrando a cabeça.
Codigo exemplo abaixo
void loop() {
if ((((now.hour() == horaliga1) || (now.hour() == horaliga2)) && (now.minute() == minlig) && (now.second() <= 2))) { // hora da ação
////1
{ digitalWrite(led1, HIGH);
delay(500);
Serial.println("liga");
digitalWrite(led1, LOW);
Serial.println("deslig");
delay(1000);
}
{ digitalWrite(led2, HIGH);
delay(600);
Serial.println("liga");
digitalWrite(led2, LOW);
Serial.println("deslig");
delay(1000);
}
{ digitalWrite(led3, HIGH);
delay(200);
Serial.println("liga");
digitalWrite(led3, LOW);
Serial.println("deslig");
delay(1000);
}
}
}
}
Deixei o exemplo como led para deixar o entendimento mais fácil, no entanto serão três dosadores que vão ser acionados no mesmo horário, mas por economia de corrente deve haver um intervalo entre eles.
Se alguém puder ajudar agradeceria muito.
em anexo código com a solução
Tags:
Uma forma é definir os pinos em um array e usar um for para realizar as operações. supondo que os pinos sejam 2,3 e 4, teremos:
int pinLed[] = {2,3,4};
int cont;
void loop() {
if ((((now.hour() == horaliga1) || (now.hour() == horaliga2)) && (now.minute() == minlig) && (now.second() <= 2))) {
for (cont = 0; cont < 3; cont++){
digitalWrite(pinLed[cont], HIGH);
delay(500);
Serial.println("liga");
digitalWrite(pinLed[cont], LOW);
Serial.println("deslig");
delay(1000);
}
}
}
José muito obrigado pela resposta.
Cntudo neste caso o codigo é útil quando o intervalo para acionamento é o mesmo a todos os leds, se for para definir intervalos diferentes diferentes para cada led teria como?
Será que conseguiria fazer com case neste caso?
Digo isso pois na pratica quero acionar 3 mini alimentadores que fiz, que terão quantidades diferentes para cada um.
Nesse caso, basta criar mais um array com os tempos em milisegundos para cada led(acionador)
int tempo[] = [1000,500,200];
Dentro do for ficaria:
delay[tempo[cont]);
Se necessário, pode-se definir outros arrays.
só para finalizar, no caso do void setup(), como declaro a saída dos pinos?
ficaria assim?
pinMode(pinLED[], OUTPUT);
Você pode fazer um for também:
for (cont = 0; cont < 3; cont++){
pinMode(pinLED[cont], OUTPUT);
}
muito bom funcionou certinho, meu muito obrigado,
Finalmente aprendi a trabalhar com for hehe.
segue código final para conhecimento
Oi TA, boa tarde,
além da boa sugestão do JAC, eu incluiria uma, a de criar uma função para fazer ações repetitivas.
Segue exemplo:
Rui
Rui, obrigado pela sugestão, vou estuda-la tbm, a sua sugestão é a do Jose Augusto, vão melhorar muito meu código.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2023 Criado por Marcelo Rodrigues.
Ativado por