бегущий поворотник на ленте ws2812
- Войдите на сайт для отправки комментариев
Здравствуйте, может кто знает как сменить направление загорания светодиодов и их плавное тушение в библиотеке neopixel? Есть часть скетча с работой поворотника, что здесь необходимо изменить?if (digitalRead(5) == LOW and digitalRead(6) == HIGH)
{
// включается один поворотник
for(int k = 0; k < 3; k++)
{
// цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,
for(int i = 0; i < count+1; 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)); // R=255, G=0, B=0 — цвет светодиода
}
delay(60);
strip.show();
}
for(int i = 0; i < count+3; i++)
{
for(int j = 0; j < i; j++)
{
// в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
}
delay(60);
strip.show();
}
}
}
Пока Вы не сделаете вот это, вероятность того, что в теме будет что-нибудь, кроме глума и флуда, конечно, не нулевая, но крайне мала.
if (digitalRead(5) == LOW and digitalRead(6) == HIGH) { // включается один поворотник for(int k = 0; k < 3; k++) { // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза, for(int i = 0; i < count+1; 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)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip.show(); } for(int i = 0; i < count+3; i++) { for(int j = 0; j < i; j++) { // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip.show(); } } }Тысяча слов прощения!!! С смартфона по другому-не отправляется.
if (digitalRead(5) == HIGH and digitalRead(6) == LOW) // исправление 1 : если это контакты поворота { // включается один поворотник for(int k = 0; k < 3; k++) { // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза, for(int i = 0; i < count+1; i++) { for(int j = i; j > 0 ; j--) // исправление 3 : нисходящий цикл { if ((digitalRead(5) == HIGH) and (digitalRead(6) == LOW)) // исправление 2 : если это контакты поворота { k = 0; } strip.setPixelColor(j, strip.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip.show(); } for(int i = 0; i < count+3; i++) //исправление 4 : нисходящий цикл { for(int j = i; j > 0; j--) { // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip.show(); } } }всего скетча не видно ,поэтому гарантировать ничего не буду .
да и схему подключения тоже вы не выложили
Спасибо большое, попробую таким образом.
#include <Adafruit_NeoPixel.h> // подключаем библиотеку int count=72; // количество диодов на одной фаре Adafruit_NeoPixel strip = Adafruit_NeoPixel(count, 7, NEO_GRB + NEO_KHZ800); //Инициализируем первый поворотник на 7 цифровом выходе Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(count, 8, NEO_GRB + NEO_KHZ800);//Инициализируем второй поворотник на 8 цифровом выходе void setup() { pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); strip.begin(); strip.show(); strip2.begin(); strip2.show(); } void loop() { { if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH)) { //Режим аварийной сигнализации, если на 5 и 6 пин приходит плюс for(int k = 0; k < 3; k++) { // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза, for(int i = 0; i < count+1; i++) { for(int j = 0; j < i; j++) { if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH)) { k = 0; // если во время мигания поворотника получаем еще плюcовой сигнал, то обнуяем счетчик, чтобы поворотник мигал еще как минимум 3 раза } strip.setPixelColor(j, strip.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(j, strip2.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip.show(); strip2.show(); } for(int i = 0; i < count+3; i++) { for(int j = 0; j < i; j++) { // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(j-2, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(j-1, strip2.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(j, strip2.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip.show(); strip2.show(); } } } if (digitalRead(5) == LOW and digitalRead(6) == HIGH) { // включается один поворотник for(int k = 0; k < 3; k++) { // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза, for(int i = 0; i < count+1; 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)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip.show(); } for(int i = 0; i < count+3; i++) { for(int j = 0; j < i; j++) { // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip.show(); } } } if (digitalRead(5) == HIGH and digitalRead(6) == LOW) { // включаем второй поворотник for(int k = 0; k < 3; k++) { // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза, for(int i = 0; i < count+1; 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)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip2.show(); } for(int i = 0; i < count+3; i++) { for(int j = 0; j < i; j++) { // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее strip2.setPixelColor(j-2, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(j-1, strip2.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(j, strip2.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода } delay(60); strip2.show(); } } } if (digitalRead(3) == HIGH) { // режим спецсигналов, если на 3 пин подаем плюс for(int j = 0; j < 16; j++) { for(int i = 0; i < count; i++) { strip.setPixelColor(i, strip.Color(255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(i, strip2.Color(0, 0, 255)); // R=255, G=0, B=0 — цвет светодиода } strip.show(); strip2.show(); delay(20); for(int i = 0; i < count; i++) { strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода } strip.show(); strip2.show(); delay(20); } for(int j = 0; j < 16; j++) { for(int i = 0; i < count; i++) { strip.setPixelColor(i, strip.Color(0, 0, 255)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(i, strip2.Color(255, 0, 0)); // R=255, G=0, B=0 — цвет светодиода } strip.show(); strip2.show(); delay(20); for(int i = 0; i < count; i++) { strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода } strip.show(); strip2.show(); delay(20); } } if (digitalRead(4) == HIGH) { // Режим стробоскова, если на 4 пин подаем питание for(int j = 0; j < 24; j++) { for(int i = 0; i < count; i++) { strip.setPixelColor(i, strip.Color(255, 255, 255)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода } strip.show(); strip2.show(); delay(15); for(int i = 0; i < count; i++) { strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода } strip.show(); strip2.show(); delay(15); } for(int j = 0; j < 24; j++) { for(int i = 0; i < count; i++) { strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(i, strip2.Color(255, 255, 255)); // R=255, G=0, B=0 — цвет светодиода } strip.show(); strip2.show(); delay(15); for(int i = 0; i < count; i++) { strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода strip2.setPixelColor(i, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода } strip.show(); strip2.show(); delay(15); } } if( digitalRead(3) == LOW and digitalRead(5) == LOW and digitalRead(6) == LOW and digitalRead(9) == LOW) { for(int i = 0; i < count+1; i++) { // Зажигаем ходовые огни, если нетниодного сигнала strip.setPixelColor(i, strip.Color(255, 255, 255)); strip2.setPixelColor(i, strip2.Color(255, 255, 255)); } strip.show(); strip2.show(); } } }К сожалению, направление зажигания светодиодов не изменилось, выкладываю полный исходный скетч.
Ну, пустите в строке #111 итератор не от нуля до максимума, например, а от максимума до нуля.
Добрый день. Прошу не судить строго за мой вопрос. У меня собраны поворотники по точно такой же схеме, как у автора, с теми же номиналами сопротивлений. При подключении от блока питания в 12в, всё работает отлично. При подключении в цепь автомобиля сгорает ардуинка. Питание ардуино через понижающий DC-DC до 5В, питание лент отдельно от таких же понижаек. В чем может быть подвох? Может сопротивления не справляются и нужно добавить стабилитроны в цепи входящих +12в?
В чем может быть подвох? Может сопротивления не справляются и нужно добавить стабилитроны в цепи входящих +12в?
Резисторы 47 К и 100К на схеме перепутаны местами.
Вы считать-то умееете? Не пробовали прикинуть, какое напряжение приходит на пины ардуино, например, с кнопки стробоскопа по такой схеме?
А еще лучше - переделать схему, чтобы кнопки замыкались не на +12в, а на массу.
По резисторам наоборот тоже пробовал, все-равно ардуинка мрет и все тут, уже 3 платы умерли. Кнопок у меня вообще нет, 2 плюса входящих от поворотов и 1 плюс от замка зажигания на управление включением ходовых огней.
По резисторам наоборот тоже пробовал
вместо того чтоб тупо "пробывать" - посчитать не судьба?
значит надо делать развязку на оптопарах, в бортовой сети авто могут гулять импульсы в десятки вольт
мрет и все тут
Думаю, что вот это поможет - https://techno-mind.ru/elektronika-i-soft/pitanie-chuvstvitelnoj-elektroniki-ot-bortovoj-seti-legkovogo-avtomobilya.html
Извиняйте, если что не так, просто я не очень силен в электронике, поэтому и решил спросить у специалистов. Спасибо большое всем за советы, обязательно ими воспользуюсь)
5В по схеме подаете на Vin ардуины. Тоже неверно. Это нужно подавать на контакт 5V ардуины.
Может сопротивления не справляются и нужно добавить стабилитроны в цепи входящих +12в?
Не в цепи 12в, а вместо резисторов на 100к. На 3.9 вольта должно хватить.