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

Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее

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

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

int pause_pov1 = 17;

int pause_pov2 = 175;

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

Share this post


Link to post
Share on other sites

Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

Подробнее

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

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

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

Edited by Dan Smith

Share this post


Link to post
Share on other sites

Материалы вебинара Практическое использование TrustZone в STM32L5

Материалы вебинара, посвященного экосистеме безопасности и возможностях, которые дает новая технология TrustZone в МК STM32L5, содержат две подробные практические работы: создание простого приложения с изоляцией в TrustZone, и пример отладки и тестирования TFM-SBSFU. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

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

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...

  • Сообщения

    • Да супер мощность не нужна он выступает в роли усилителя для двух колонок, я на али нашел пары вариантов плат и макетных плат. Посоветуйте усилитель класса D супер мощный не нужно главное качественный но бюджетный посмотрев канал v-mire-net мне понравился UPC2581V хороший но греется радиатор нужен добротный, поэтому задумался о d классе.
    • Какой чертеж совпадает? Первый или второй?
    • Могут иметь, а могут не иметь - сейчас маркируют как хотят, особенно СМД компоненты.
    • Ну я ж тебе писал про генератор Ван дер Графа - почитай в Вики, что это, и как работает. Элементарно изготовить из металлического ведра, метра капроновой веревки, пластмассового гребешка и меха - , или стеклянной палочки и шелкового платочка. Вам на уроке физики показывали опыты с электризацией материалов?  Да, еще, из того же учебника физики за 8-й класс - внутри проводящих материалов поля нет, если пустую консервную банку на изоляционной подставке зарядить до 100 000 вольт, напряженность поля внутри банки будет равна 0. А снаружи, около поверхности банки, примерно 20 000 В/см.
    • Всем спасибо с решением проблемы. Всё-таки собрался с мыслями и решил по новой проверит высоковольтную часть и вот в обрыве R5 и R11 10 Ом Как я их вначале не заметил не пойму. Аппарат запустился светодиод погас так как напряжение на выходе появилось. (80в) Нагрузил нагрузкой лампа на 60w есть неприятный визг. Возможно это из-за феррита трансформатора так как он болтается. Осциллографа у меня нет для выяснения. Что смог сделать то и сделал. Просто боюсь вдруг спалю транзисторы  С этим уже не буду разбирается, отдам профильному ремонтнику на диагностику и пусть проверят под более мощной нагрузкой.
    • это полностью зависит от кол-ва остатков на складе, разница на оптовой закупке не велика, а зависшие на складе парусот тысяч кредитов в виде накуй сейчас не нужных   сердечников на 1кВт может быть весомым поводом поставить их в тр-р на 200Вт.
×
×
  • Create New...