Плавный розжиг 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го.