Плавный розжиг ws2812b. нужна помощь.
- Войдите на сайт для отправки комментариев
Втр, 26/05/2020 - 15:20
Решил сделать себе дхо. В ардуино полный 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);
}
}
}
}
Во-первых, код категорически не годится для реального использования в авто - он просто-таки опасен для жизни, потому что содержит кучу delay(), то есть поворотники будут включатся не когда надо, а "когда смогут", что может привести к ДТП
Ну и во-вторых, уже с точки зрения программирования - что за чушь у вас в коде начиная со строки 124 ? Какие-то отрицательные индексы в массивах, какие вложенные циклы For. которые ровно ничего не делают... я так понимаю. что именно со строки 124 начинается часть, которую вы "редактировали"?
Все так и есть именно с 124 строки я и начал редактировать. Просто в исходнике где у меня стоит -1 стоял 0 и светодиоды загорались со 2го.