Ola, estou fazendo a automação de um ambiente onde certos leds irao ligar automaticamente em função do horario (com o RTC), Esses leds nao podem ligar derrepente e sim quero que leve 5 minutos para chegarem ao brilho maximo. Porem com o uso de delay todo o meu programa para em funçao dele, o que é inviável. Até agora nao consegui pensar em um modo de incrementar a variavel de 0 a 255 (PWM) por 5 minutos usando millis(). Agradeço desde já.
Tags:
Amigão, tenho a solução exata pro seu problema no meu blog: http://automatobr.blogspot.com.br/search?q=interrup%C3%A7%C3%A3o
Ola mauro, Gostei muito e rodou tranquilo aqui sem travar o meu Loop principal. mas esse seu exemplo é um fade continuo onde acende e apaga. eu mudei alguns sinais e valores para que o led acenda e pare no 255 (que é meu intuito) e ficou desse modo:
volatile byte _i = 0;volatile byte _j = 1;
void chama()
{
analogWrite(gPin,_i);
analogWrite(rPin,_i);
analogWrite(bPin,_i);
_i+=_j;
if (_i == 100)
_j=1;
else
if (_i == 0)
_i=255;
}
Isso aí. A função chama() é vc que define para obter o efeito que quiser. O importante é que vc conseguiu usar o mecanismo que eu sugeri.
Minha sugestão é a seguinte, no evento em que indica o inicio do acionamento dos leds, você 'ativa' uma variavel de controle (por exemplo, x=1) e salva o valor de millis() em outras variavel (por exemplo, t=millis()).
No loop você colocar um IF para verificando a variavel de controle e mapeia o valor do millis() atual indo de t a 300000+t (que representa 5 minutos apos t) para 0 a 255 e salva isso em uma variavel (y por exemplo).
Depois basta usar y como variavel
Exemplo de codigo
if(x==1){
y=maps(millis(), t, 300000+t, 0, 255);
analogWrite(ledPin, y);
}
Não testei mas acredito que a ideia está certa.
Ola João, eu tentei fazer do jeito que você explicou mas os leds nen acenderam. Olha como eu fiz:
if (hora==t1[0] && minuto==t1[1]) {
int x;
int y;
int t =millis();
if(x==1){
y=map(millis(), t, 300000+t, 0, 255);
analogWrite(LED1, y);
analogWrite(LED2, y);
analogWrite(LED3, y);
}
}
O problema de ambas as soluções é que o programa fica
Ops... O problema de ambas as soluções é que o programa fica parado enquanto o led varia o brilho, enquanto que a minha solução (do blog) permite que o programa se dedique a outras funções ao mesmo tempo.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por