Плавный розжиг ws2812b. нужна помощь.

mozanenko
Offline
Зарегистрирован: 26.05.2020

Решил сделать себе дхо. В ардуино полный 0. По примерам чуть разобрался. Что сделал почти устраивает, не могу понять как сделать. Что бы при подачи на Pin7 высокого уровня (включение дхо) они не просто включались а плавно разжигались. Заранее спасибо за ответы.

#include <Adafruit_NeoPixel.h>            
Adafruit_NeoPixel strip = Adafruit_NeoPixel(5, 2, NEO_GRB + NEO_KHZ800); // первый поворотник 5 диодов на 2  выходе
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(5, 3, NEO_GRB + NEO_KHZ800);//второй поворотник 5 диодов на 3  выходе



void setup() 
{
  pinMode(4, INPUT);
  pinMode(5, INPUT); 
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  strip.begin();
  strip.show(); 
  strip2.begin();
  strip2.show();
 


}
void loop() 
{
  
   {
    if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH)) 
    { 
      //Режим аварийной сигнализации
      for(int k = 0; k < 2; k++)
      {  
         for(int i = 0; i < 6; i++)
      {
          for(int j = 0; j < i; j++)
          {
            if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH)) 
            {
              k = 0; 
            } 
            strip.setPixelColor(j, strip.Color(255, 69, 0));
            strip2.setPixelColor(j, strip2.Color(255, 69, 0)); 
          }
          delay(5);
          strip.show();
          strip2.show();
        }
        for(int i = 0; i < 6; i++)
        {
          for(int j = 0; j < i; j++)
          {
            
            strip.setPixelColor(j, strip.Color(0, 0, 0)); 
            strip2.setPixelColor(j, strip2.Color(0, 0, 0)); 
         
          }
          delay(5);
          strip.show();
          strip2.show();
        }
      }
    }
              
    if (digitalRead(5) == LOW and digitalRead(6) == HIGH) 
    { 
      // включается один поворотник 
      for(int k = 0; k < 2; k++)
      {  
        for(int i = 0; i < 6; i++)
        {
          for(int j = 0; j < i; j++)  
          {
            if ((digitalRead(5) == LOW) and (digitalRead(6) == HIGH)) 
              {
                k = 0;
              }
              strip.setPixelColor(j, strip.Color(255, 69, 0)); 
          }
          delay(100);
          strip.show();
        }
        for(int i = 0; i < 6; i++)
        {
          for(int j = 0; j < i; j++)
          { 
            
            strip.setPixelColor(j, strip.Color(0, 0, 0)); 
           
          }
          delay(50);
          strip.show();
        }
          
      }
    }
    if (digitalRead(5) == HIGH and digitalRead(6) == LOW) 
    { // включаем второй поворотник
      for(int k = 0; k < 2; k++)
      {  
         for(int i = 0; i < 6; i++)
        {
          for(int j = 0; j < i; j++)
          {
            if ((digitalRead(5) == HIGH) and (digitalRead(6) == LOW)) 
            {
              k = 0;
            }
            strip2.setPixelColor(j, strip2.Color(255, 69, 0));
          }
          delay(100);
          strip2.show();
        }
        for(int i = 0; i < 6; i++)
        {
          for(int j = 0; j < i; j++)
          { 
           
            strip2.setPixelColor(j, strip2.Color(0, 0, 0)); 
            
          }
          delay(50);
          strip2.show();
        }
      }
    }
   
    if (digitalRead(4) == HIGH and digitalRead(7) == HIGH) 
    {
      for(int i = -1; i < 6; i++)
      { 
        for(int j = -1; j < i; j++) 
        {
        // Зажигаем габариты
        strip.setPixelColor(j, strip.Color(60, 60, 40));
        strip2.setPixelColor(j, strip2.Color(60, 60, 40));
        
      }
      delay(20);
      strip.show();
      strip2.show();
      }
      
    
    }
   if (digitalRead(7) == HIGH and digitalRead(4) == LOW) 
    {
      for(int i = -1; i < 5; i++)
      { 
        for(int j = -1; j < i; j++) 
        {
          
          
        // Зажигаем дхо
        strip.setPixelColor(i, strip.Color(255, 255, 255));
        strip2.setPixelColor(i, strip2.Color(255, 255, 255));
        
      }
      delay(20);
      strip.show();
      strip2.show();
      
      
      }
    }
    if( digitalRead(4) == LOW and digitalRead(5) == LOW and digitalRead(6) == LOW and digitalRead(7) == LOW ) 
    { 
      for(int i = -1; i < 5; i++)
      { 
        for(int j = -1; j < i; j++) 
        {
       
        // выключено все, если нет ниодного сигнала
        strip.setPixelColor(i, strip.Color(0, 0, 0));
        strip2.setPixelColor(i, strip2.Color(0,0, 0));
        
      }
      strip.show();
      strip2.show();
      delay(20);
      }
    }
  }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Во-первых, код категорически не годится для реального использования в авто - он просто-таки опасен для жизни, потому что содержит кучу delay(), то есть поворотники будут включатся не когда надо, а "когда смогут", что может привести к ДТП

Ну и во-вторых, уже с точки зрения программирования - что за чушь у вас в коде начиная со строки 124 ? Какие-то отрицательные индексы в массивах, какие вложенные циклы For. которые ровно ничего не делают... я так понимаю. что именно со строки 124 начинается часть, которую вы "редактировали"?

mozanenko
Offline
Зарегистрирован: 26.05.2020

Все так и есть именно с 124 строки я и начал редактировать. Просто в исходнике где у меня стоит -1 стоял 0 и светодиоды загорались со 2го.