Dificuldade com as bibliotecas para a fita LED WS2812B

Projetos de arduino
Rodrigo RDA
Membro
Mensagens: 3
Registrado em: 30/Jul/2018, 02:16

Dificuldade com as bibliotecas para a fita LED WS2812B

Mensagem por Rodrigo RDA » 20/Jan/2019, 05:53

Sou novato tanto em programação quanto em Arduíno mas mesmo assim estou desenvolvendo (para uso pessoal e por hobby) um relógio despertador que conta com diversos recursos como sensores, fita Led RGB WS2812B de 5V, gravação de voz, entre outros. Estou quase terminando o meu código no Arduíno Pro Mini Atmega 328P 16MHz e só agora no final decidi usar a fita de LEDs endereçáveis mas estou com muita dificuldade em usar os efeitos presentes nos exemplos da biblioteca NeoPixel da Adafruit (Adafruit_NeoPixel-master), pois como eles usam "For" e "delay()", quando eu chamo as funções dos LEDs só a fita funciona, o restante do código deixa de funcionar.


Não sei se alguém aqui já usou essa fita mas eu gostaria muito de um exemplo de como fazer os mesmos efeitos sem usar "For" e "delay()". Eu mesmo tentei por alguns dias substituir essas funções por "if" e "millis()" porém não tive sucesso.


Eu uso o exemplo "strandtest.ino" como referência.

Onde era:

Código: Selecionar todos

void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<RGB.numPixels(); i++) {
    RGB.setPixelColor(i, c);
    RGB.show();
    delay(wait);
  }
}

Eu tentei mudar para:

Código: Selecionar todos

void colorWipe ( uint32_t c, uint8_t wait ) 
{
  static uint16_t i = 0;

  if ( i == 0 ) {
    RGB.setPixelColor(i, c);  
    RGB.show();  
    delayInverte_Led_RGB = millis();  
    i++;  
  }                
  if ( ((millis() - delayInverte_Led_RGB) >= wait)  &&  i < RGB.numPixels() ) {  
    RGB.setPixelColor(i, c);  
    RGB.show(); 
    delayInverte_Led_RGB = millis(); 
    i++;    
  }    
}
Mas não funcionou (acende apenas um único LED e não faz mais nada).

Se alguém puder me ajudar. Um exemplo novo na biblioteca seria muito bem vindo também! Creio que os exemplos atuais não visam a multitarefa mas sim consideram que o usuário usará apenas a fita LED no seu projeto e nada mais...

Gostaria muito de conseguir usar todos os efeitos do exemplo "strandtest.ino" no meu código sem que isso trave tudo. Meu código atual já tem mais de 2300 linhas de código e eu jamais uso "for" ou "delay()" pois sei que isso trava o processador em um único processo (como eu tenho relógio no display e a informação da leitura de alguns sensores, isso jamais pode acontecer). Faço tudo com millis() e micros(), porém dessa vez não estou conseguindo...

Ajuda!!!

Responder