[Resolvido] Duvida com código como deixar esta parte do codigo eficiente e simples

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

Exibições: 345

Anexos

Responder esta

Respostas a este tópico

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

Anexos

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:

http://pastebin.com/cj9Dge17

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.

RSS

© 2023   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço