Rodar uma programação com timer

Boa noite!

Preciso de uma ajuda, estou tentando fazer uma programação de Fastled funcione por x tempo, acionado pelo botão.
O ultimo código, consigo fazer a acender, porem não roda a programação e fica estático.

#include <FastLED.h>
#define NUM_LEDS 60
#define DATA_PIN 4
#define COLOR_ORDER RGB
#define FRAMES_PER_SECOND 244
#define MIN_BRIGHTNESS 5                 // watch the power!
#define MAX_BRIGHTNESS 80
#define botao 2
int bstate = 0;
boolean estado = false;
unsigned long int tempo = 0;


CRGB leds[NUM_LEDS];

void setup() { 
     FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);  
     FastLED.setMaxPowerInVoltsAndMilliamps(5,2000);
     FastLED.setBrightness(MAX_BRIGHTNESS);
     FastLED.clear();
     pinMode(botao, INPUT_PULLUP);
     
}

void loop () {
  
  bstate = digitalRead(botao);
     if(bstate == HIGH){
     tempo = 0;
     estado = true;

     }
     if(millis() - tempo >= 3000){
     tempo = millis();
     if (estado == true){
        programa();
     } else {
        blank();
     }
     estado = false;
   } 
}
   
       

void programa(){
  
   float breath = (exp(sin(millis()/1500.0*PI)) - 0.36787944)*108.0;
   breath = map(breath, 0, 255, MIN_BRIGHTNESS, MAX_BRIGHTNESS);
     FastLED.setBrightness(breath);
     fill_solid(leds, NUM_LEDS,CRGB(0,255,0));
     FastLED.show();
     delay(15);
}

void blank(){
  fill_solid(leds, NUM_LEDS,CRGB(0,0,0));
  FastLED.show();
}

Precisa sacar o tempo fora do if (trocar tempo=1 por tempo=millis()) e pasar tempo a programa:
float breath = (exp(sin((millis()-tempo)/1500.0*PI)) - 0.36787944)*108.0;

oi amigo!

Obrigado!
Mas, infelizmente não funcionou... esta parte, precisa ser se o -tempo, pois, não roda corretamente a programção.

Preciso, que saia o efeito de "Breath" nos leds, por x tempo, e reset aguardando ser pressionado o botão novamente

Oi Amigo, nao comprendo o seu programa, mas nao faz muito sentido se tempo=1, e depois tempo=millis(), tempo nao pode mudar muito.

Olá,
em primeiro lugar recomendo que você edite seu tópico colocando todo o seu código
entre as tags </> conforme recomendações do fórum.

Em segundo informo que não consegui compilar o seu código porque não encontrei a definição desta variável.

Fiz a modificações no código, estava errado.

obrigado!
sou novo no fórum, mas já ajeitei!

A variável estava errada, arrumei conforme o correto!

Olá,

mude esta linha : if(bstate == HIGH){
para : if(bstate == LOW){
e teste.

Funcionou!

Porem, fica ligada "permanente"

Olá,
eu simulei seu projeto no site wokwi.com e funcionou corretamente.

vou tentar novamente, tens como me enviar o projeto do wokwi?

Olá,

ColorPalette.zip (1.2 KB)

perfeito, consegui rodar no wokwi, porem esta invertida! se pressionar o botão reseta, e se soltar, ele fica permanentemente armado. preciso que seja ao contrario, quando pressionar uma vez, ele arma a programação por 3 minutos, e depois apaga.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.