Jump to content
Dan Smith

Нужна помощь в скетче к адресной ленте SK6812

Recommended Posts

Всем доброго времени суток. Нуждаюсь в помощи со скетчем к адресной ленте SK6812. Проект был собран на коленке временно, установлен на авто и работает уже несколько месяцев. Есть небольшой баг, который своими силами исправить не могу. На сегодняшний день этот проект перенесен на печатную плату, поправлены аппаратные неточности. А вот со скетчем беда. Проблема в том, что при опросе пинов, нужно установить задержки на исполнение тех или иных циклов программы. Всю необходимую информацию и скетч готов предоставить в личку, с подробным описанием проблемы.. Прошу откликнуться энтузиастов, понимающих и просто хороших людей. Сам не вывезу к сожалению..(

Share this post


Link to post
Share on other sites
45 минут назад, Dan Smith сказал:

в личку

Секретная инфа? Сюда выкладывай.


Я не раздаю удочки. Я продаю рыбу.

Share this post


Link to post
Share on other sites
38 минут назад, солар сказал:

Секретная инфа? Сюда выкладывай.

Да не секретная :)) Просто как показывает опыт, похейтят и дальше пойдут. А помочь никто не поможет)

/===========ИНИЦИАЛИЗИРУЕМ БИБЛИОТЕКИ=========================================================================
#include <Adafruit_NeoPixel.h>
#include <Adafruit_ADXL345_U.h>
//===========НАЗНАЧАЕМ ПИН ВЫХОДА НА ЛЕНТУ=====================================================================
const int PinLS = 12;
//===========НАЗНАЧАЕМ ПИНЫ ВХОДОВ=============================================================================
const int buttonPinD = 2;
const int buttonPinR = 4;
const int buttonPinL = 3;
const int buttonPinS = 5;

int buttonStateS = HIGH;
int buttonStateD = HIGH;
int buttonStateL = HIGH;
int buttonStateR = HIGH;
//===========ЗАДАЕМ ТАЙМИНГИ (НАСТРАИВАЮТСЯ ПО МЕСТУ МЕТОДОМ ПОДБОРА)==========================================
int pause_pov1 = 17;
int pause_pov2 = 175;
int ix;

Adafruit_NeoPixel strip = Adafruit_NeoPixel(44, PinLS, NEO_GRB + NEO_KHZ800);
Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345);

void setup() {
//===========ИНИЦИАЛИЗИРУЕМ ВХОДЫ, ПОДТЯГИВАЕМ К ПЛЮСУ=========================================================
  pinMode(buttonPinS, INPUT_PULLUP);
  pinMode(buttonPinD, INPUT_PULLUP);
  pinMode(buttonPinL, INPUT_PULLUP);
  pinMode(buttonPinR, INPUT_PULLUP);
  strip.begin();
//===========ГАСИМ ЛЕНТУ=======================================================================================
  for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(0,0,0));
  strip.show();
  accel.begin(); 
//===========ОГРАНИЧИВАЕМ ДИАПАЗОН ИЗМЕРЕНИЙ 4G================================================================
  accel.setRange(ADXL345_RANGE_4_G);
  accel.setDataRate(ADXL345_DATARATE_100_HZ);
}

void loop() {
  buttonStateS = digitalRead(buttonPinS);
  buttonStateL = digitalRead(buttonPinL);
  buttonStateR = digitalRead(buttonPinR);
  buttonStateD = digitalRead(buttonPinD);
//===========ЭКСТРЕННОЕ ТОРМОЖЕНИЕ=============================================================================
sensors_event_t event;
  accel.getEvent(&event);
  ix = event.acceleration.x;
if (buttonStateS == LOW && ix < 6){ //значение от 1 до 9 (чем выше цифра тем чувствительней датчик)
for (int is=0; is<15; is++ ) {
      for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(240,0,0));
      strip.show();
      delay(10 + is*10);
      for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(0,0,0));
      strip.show();
      delay(10 + is*3);
}}
//===========ОБЫЧНОЕ ТОРМОЖЕНИЕ================================================================================
else if (buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == HIGH){
for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(200,0,0));
    strip.show();
}
//===========ТОРМОЗ+ЗАДНИЙ ХОД=================================================================================
else if (buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == LOW){
delay(50);
for (int i=0; i<10; i++ ) strip.setPixelColor(i, strip.Color(250,250,250));
for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0));
for (int i=34; i<44; i++ ) strip.setPixelColor(i, strip.Color(250,250,250));
    strip.show();
    while(buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == LOW){
        buttonStateS = digitalRead(buttonPinS);
        buttonStateL = digitalRead(buttonPinL);
        buttonStateR = digitalRead(buttonPinR);
        buttonStateD = digitalRead(buttonPinD);
      delay(50);}
}
//===========ТОРМОЗ+АВАРИЙКА+ЗАДНИЙ ХОД========================================================================
else if (buttonStateS == LOW && buttonStateL == LOW && buttonStateR == LOW && buttonStateD == LOW){
for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0));
for (int il=0; il<10;  il++ ) {
       strip.setPixelColor(9-il, strip.Color(250,80,0));
       strip.setPixelColor(il+34, strip.Color(250,80,0));
       strip.show();
       delay(pause_pov1);
      }
      for (int il=0; il<11; il++ ) {
       strip.setPixelColor(9-il, strip.Color(0,0,0));
       strip.setPixelColor(il+34, strip.Color(0,0,0));
       strip.show();
       delay(pause_pov1);
      }
    delay(pause_pov2);
}
//===========ТОРМОЗ+ПРАВЫЙ+ЗАДНИЙ ХОД==========================================================================
else if (buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == LOW && buttonStateD == LOW){
for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0));
for (int i=34; i<44; i++ ) strip.setPixelColor(i, strip.Color(250,250,250));
for (int il=0; il<10; il++ ) {
        strip.setPixelColor(9-il, strip.Color(250,80,0));
        strip.show();
        delay(pause_pov1);
      }
     for (int il=0; il<11; il++ ) {
       strip.setPixelColor(9-il, strip.Color(0,0,0));
       strip.show();
       delay(pause_pov1);
     }
     delay(pause_pov2);
}
//===========ТОРМОЗ+ЛЕВЫЙ+ЗАДНИЙ ХОД===========================================================================
else if (buttonStateS == LOW && buttonStateL == LOW && buttonStateR == HIGH && buttonStateD == LOW){
for (int i=0; i<10; i++ ) strip.setPixelColor(i, strip.Color(250,250,250));
for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0));
for (int il=0; il<10; il++ ) {
        strip.setPixelColor(il+34, strip.Color(250,80,0));
        strip.show();
        delay(pause_pov1);
       }
       for (int il=0; il<11; il++ ) {
        strip.setPixelColor(il+34, strip.Color(0,0,0));
        strip.show();
        delay(pause_pov1);
      }
      delay(pause_pov2);
}
//===========ЗАДНИЙ ХОД========================================================================================
else if (buttonStateS == HIGH && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == LOW){  
for (int i=0; i<10; i++ ) strip.setPixelColor(i, strip.Color(250,250,250));
for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0));
for (int i=34; i<44; i++ ) strip.setPixelColor(i, strip.Color(250,250,250));
    strip.show();
    while(buttonStateS == HIGH && buttonStateL == HIGH && buttonStateR == HIGH && buttonStateD == LOW){
        buttonStateS = digitalRead(buttonPinS);
        buttonStateL = digitalRead(buttonPinL);
        buttonStateR = digitalRead(buttonPinR);
        buttonStateD = digitalRead(buttonPinD);
      delay(50);}
}
//===========ТОРМОЗ+ЛЕВЫЙ======================================================================================
else if (buttonStateS == LOW && buttonStateL == LOW && buttonStateR == HIGH){
for (int i=0; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0));
for (int il=0; il<11; il++ ) {
        strip.setPixelColor(il+34, strip.Color(250,80,0));
        strip.show();
        delay(pause_pov1);
       }
       for (int il=0; il<11; il++ ) {
        strip.setPixelColor(il+34, strip.Color(0,0,0));
        strip.show();
        delay(pause_pov1);
      }
      delay(pause_pov2);
}
//===========ТОРМОЗ+ПРАВЫЙ=====================================================================================
else if (buttonStateS == LOW && buttonStateL == HIGH && buttonStateR == LOW){
for (int i=11; i<44; i++ ) strip.setPixelColor(i, strip.Color(200,0,0));
for (int il=0; il<11; il++ ) {
        strip.setPixelColor(9-il, strip.Color(250,80,0));
        strip.show();
        delay(pause_pov1);
      }
     for (int il=0; il<11; il++ ) {
       strip.setPixelColor(9-il, strip.Color(0,0,0));
       strip.show();
       delay(pause_pov1);
     }
     delay(pause_pov2);
}
//===========ПРАВЫЙ============================================================================================
else if (buttonStateS == HIGH && buttonStateL == HIGH && buttonStateR == LOW && buttonStateD == HIGH){
for (int i=11; i<44; i++ ) strip.setPixelColor(i, strip.Color(0,0,0));
for (int il=0; il<11; il++ ) {
        strip.setPixelColor(9-il, strip.Color(250,80,0));
        strip.show();
        delay(pause_pov1);
      }
     for (int il=0; il<11; il++ ) {
       strip.setPixelColor(9-il, strip.Color(0,0,0));
       strip.show();
       delay(pause_pov1);
     }
     delay(pause_pov2);
}
//===========ЛЕВЫЙ=============================================================================================
else if (buttonStateS == HIGH && buttonStateL == LOW && buttonStateR == HIGH && buttonStateD == HIGH){
for (int i=0; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0));
for (int il=0; il<11; il++ ) {
        strip.setPixelColor(il+34, strip.Color(250,80,0));
        strip.show();
        delay(pause_pov1);
       }
       for (int il=0; il<11; il++ ) {
        strip.setPixelColor(il+34, strip.Color(0,0,0));
        strip.show();
        delay(pause_pov1);
      }
      delay(pause_pov2);
}
//===========ЛЕВЫЙ+ЗАДНИЙ ХОД==================================================================================
else if (buttonStateS == HIGH && buttonStateL == HIGH && buttonStateR == LOW && buttonStateD == LOW){
for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0));
for (int i=34; i<44; i++ ) strip.setPixelColor(i, strip.Color(250,250,250));
for (int il=0; il<11; il++ ) {
        strip.setPixelColor(9-il, strip.Color(250,80,0));
        strip.show();
        delay(pause_pov1);
       }
       for (int il=0; il<10; il++ ) {
        strip.setPixelColor(9-il, strip.Color(0,0,0));
        strip.show();
        delay(pause_pov1);
      }
      delay(pause_pov2);
}
//===========ПРАВЫЙ+ЗАДНИЙ ХОД=================================================================================
else if (buttonStateS == HIGH && buttonStateL == LOW && buttonStateR == HIGH && buttonStateD == LOW){
for (int i=0; i<10; i++ ) strip.setPixelColor(i, strip.Color(250,250,250));
for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0));
for (int il=0; il<10; il++ ) {
        strip.setPixelColor(il+34, strip.Color(250,80,0));
        strip.show();
        delay(pause_pov1);
      }
     for (int il=0; il<11; il++ ) {
       strip.setPixelColor(il+34, strip.Color(0,0,0));
       strip.show();
       delay(pause_pov1);
     }
     delay(pause_pov2);
}
//===========АВАРИЙКА==========================================================================================
else if (buttonStateS == HIGH && buttonStateL == LOW && buttonStateR == LOW){
for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(0,0,0));
for (int il=0; il<10;  il++ ) {
       strip.setPixelColor(9-il, strip.Color(250,80,0));
       strip.setPixelColor(il+34, strip.Color(250,80,0));
       strip.show();
       delay(pause_pov1);
      }
      for (int il=0; il<11; il++ ) {
       strip.setPixelColor(9-il, strip.Color(0,0,0));
       strip.setPixelColor(il+34, strip.Color(0,0,0));
       strip.show();
       delay(pause_pov1);
      }
    delay(pause_pov2);
}
//===========АВАРИЙКА+ТОРМОЗ================+==================================================================
else if (buttonStateS == LOW && buttonStateL == LOW && buttonStateR == LOW){
for (int i=10; i<34; i++ ) strip.setPixelColor(i, strip.Color(200,0,0));
for (int il=0; il<10;  il++ ) {
       strip.setPixelColor(9-il, strip.Color(250,80,0));
       strip.setPixelColor(il+34, strip.Color(250,80,0));
       strip.show();
       delay(pause_pov1);
      }
      for (int il=0; il<11; il++ ) {
       strip.setPixelColor(9-il, strip.Color(0,0,0));
       strip.setPixelColor(il+34, strip.Color(0,0,0));
       strip.show();
       delay(pause_pov1);
      }
    delay(pause_pov2);
}
//===========ГАСИМ ЛЕНТУ=======================================================================================
else
{
    for (int i=0; i<44; i++ ) strip.setPixelColor(i, strip.Color(0,0,0));
    strip.show();
    delay(10);
}
}

В общем проблема такая. При работе аварийки, поворотники очень часто "перемаргиваются" (т.е. вместо нормально бегущих огней в разные стороны, начинаются симофоры то влево то вправо ) Это объясняется тем, что сигналы к штатным лампам (с которых берется сигнал на ардуино) во время работы аварийки приходят несинхронно. Следственно скетч выполняет команду от того поворотника, с которого сигнал приходит первым. Не могу понять как в опрос поворотников запилить задержку таким образом, чтобы скетч какое-то время ждал сигнал от "неуспевшего дать импульс" поворотника и выполнял программу аварийки. 

Edited by Falconist

Share this post


Link to post
Share on other sites

Вебинар «Решения Analog Devices для гальванической изоляции. Обзор технологий и новинок» (27.04.2021)

Компания «Компэл» и Analog Devices приглашают всех желающих 27/04/2021 принять участие в вебинаре, посвященном решениям Analog Devices для гальванической изоляции. В программе вебинара: технологии гальванической изоляции iCoupler, цифровые изоляторы, изолированное питание и технология isoPower, гальванически изолированные интерфейсы (RS-485, CAN, USB, I2C, LVDS) и другое.

Подробнее

38 минут назад, Dan Smith сказал:

//===========ЗАДАЕМ ТАЙМИНГИ (НАСТРАИВАЮТСЯ ПО МЕСТУ МЕТОДОМ ПОДБОРА)==========================================

int pause_pov1 = 17;

int pause_pov2 = 175;

Попробуйте изменить эти переменные в сторону увеличения или уменьшения. 

Share this post


Link to post
Share on other sites

Пружинные клеммники Degson - высокое качество соединения по оптимальной цене!

Пружинные клеммные блоки Degson для монтажа на печатную плату – это простое и надежное соединение, которое позволяет легко решать задачи для различных приложений за счет обширного ассортимента. Клеммники Degson доступны в двух конструктивных исполнениях (торцевой контакт и зажимная клеть), имеют различные направления ввода проводника (45°, 90°, 180°) и обладают широким диапазоном поперечных сечений (0,2…2,5 мм2).

Подробнее

4 минуты назад, Виталий Белый сказал:

Попробуйте изменить эти переменные в сторону увеличения или уменьшения.

Пробовал. Эти тайминги проблемы не решают, ими настраивается скорость  и задержка для выполнения очередного цикла для всех режимов

Edited by Dan Smith

Share this post


Link to post
Share on other sites

Новое семейство ИП от MEAN WELL мощностью 150, 300, 600 Вт с повышенной перегрузочной способностью

Компания MEAN WELL разработала семейство источников питания номинальной мощностью 150, 300 и 600 Вт с возможностью кратковременной безопасной работы при мощности в 2,5 раза выше номинальной (до 5 секунд). Данное семейство источников питания востребовано в промышленных установках с использованием электродвигателей или с емкостной нагрузкой. Применяя новые источники питания HRP/N можно получить экономический выигрыш.

Подробнее

По простецки видится так
 

if ( buttonStateR == HIGH || buttonStateL == HIGH ) {
Delay(XXX);
buttonStateL = digitalRead(buttonPinL);  
buttonStateR = digitalRead(buttonPinR);
}

Всавить перед  //===========ЭКСТРЕННОЕ ТОРМОЖЕНИЕ=====
ХХХ подобрать экспериментально от меньшего к большему
Не оптимизировано!!!! Вносит задержку!!!!! Ну и т.д.

Share this post


Link to post
Share on other sites

Пилюлькин, большущее спасибо, выручил. Подправил код, все теперь работает как надо. Сразу не ответил, так как получил банан на сутки))) Теперь внимательнее буду читать правила)

Edited by Dan Smith

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Пока гейропа разлагается, нормальные мужики в Одессе занимаются таки делом:    
    • Вот терь точно снимать не буду) кому я чегот должен доказать? Те что-ли) видео запуска от 12 вольт - уже выложил. 
    • Сделай короб из прозрачного поликарбоната и внутри RGB подсветку. 
    • Да ни будет ни какой войны - чучело решил мстить в отместку что его назвали тем кем он есть) - а за одно и рейтинг поднять за счёт упоротых ура патриотов) - ток если это устроит - это будет его последний номер - во первых в любом случае проиграет, со стороны мира - наш огромный туповатый медведь - а именно такой имидж создал пу на западе - напал на маленькую Украину и никто с ним воевать не будет за неё - но экономику убьют - точно, не мыслят люди 40 выми прошлого века), а терь другой вариант - Украина хлопнет крупное соединение - предположим - вообще позорище на весь мир) - так что в любом случае продует путя. Судя по тому что за свои 20 лет ему просто нечего предложить на выборах - экономику как все понимают - поднять не сможет, цены на бензин опустить тоже), единственный вариант - отвлекать и дарить очередные плюшки, что и зделает скоро на очередном обращении) ну а войнушку к осени прекратит - как выборы пройдут, дураков то не интересует что в холодильнике - до сих пор совком живут - нищеброды.эти выборы очень важны - именно следующая дума будет утверждать его 120 срок правления в 24 году. 
    • @irinas , в Гугле что ли забанили? Вот так не пробовала - https://3dtoday.ru/blogs/lider-3d/top-besplatnyx-programm-dlya-3d-pecati-v-2021-godu ? Если есть бабки, покупай пакет CAD-ов и штампуй своим 3D-принтером всё, что вздумается(ест-но что не запрещено ФЗ РФ)
    • Интересно, а румпелем дрыгать влево/вправо ты тоже будешь дистанционно,  или какую-нибудь мартышку в корытце посадишь?
    • А если бы даже и на продажу - чего в этом плохого?
×
×
  • Create New...