Estou chaveando uma carga na saída de um relê, estou usando o sketch abaixo. Eu gostaria inserir botões para incrementar e decrementar os tempos de delay, no caso seriam 4 botões.
Botão 1: Incrementar Tempo do delay de TRUE (em milisegundos)
Botão 2: Diminuir o tempo de delay de TRUE
Botão 3: Aumentar Tempo do delay de FALSE
Botão 4: Diminuir Tempo do delay de FALSE
Qual função posso utilizar para controlar os tempos usando esses botões?
/*
---- ACIONAMENTO DE CARGAS COM RELÉ E ARDUINO -- -
*/
#define Relay1 5 //Definição do pino de controle do Rele 1
//Condições iniciais de execução
void alteraStatus(int porta, bool ativado); //Declarando a função alteraStatus
void setup() {
pinMode(Relay1, OUTPUT); //Pino declarado como saída
digitalWrite(Relay1, LOW); //Pino setado para nível lógico baixo
}
void loop() {
alteraStatus(Relay1, true); //Chama a função alteraStatus e passa como parâmetro o relé e o status desejado (true - ligado | false - desligado)
delay(60000); //aguarda 60 segundos
alteraStatus(Relay1, false); //Chama a função alteraStatus e passa como parâmetro o relé e o status desejado (true - ligado | false - desligado)
delay(10000); //aguarda 10 segundos
}
//Função responsável por alterar o status da carga de acordo com o relé selecionado. Ligado = true | Desligado = false
void alteraStatus(int porta, bool ativado) {
if (ativado == true) digitalWrite(porta, HIGH); //Se a função alteraStatus recebe true como parâmetro, envia nível lógico alto para o pino de controle do relé que aciona a carga.
else digitalWrite(porta, LOW); //caso contrário, envia nível lógico baixo para desativar a carga.
}
Existem diferentes maneiras de fazer o que você descreveu. A alteração do tempo de delay precisa ser feita durante a execução do loop?
Se não precisa, a minha sugestão é que você faça seu projeto no formato "state machine" onde num momento você configura o delay em outro o loop roda com os delays que você definiu. Nesse caso, escreva uma função para gerenciar os 4 botões, de forma que ela altere duas variáveis globais p.ex "tempodelaytrue" e "tempodelayfalse". Depois é só usar:
delay(tempodelaytrue); // e
delay(tempodelayfalse);
Um detalhe: você tem certeza que quer incrementar o valor de 1 em 1 milissegundo? (para alterar 1 segundo você teria que apertar o botão 1000 vezes...)