ws2812 как реализовать индикацию...

bambucho
Offline
Зарегистрирован: 30.08.2014

Я в программировании чайник,постепенно впитываю азы.

Возникла необходимость реализовать индикацию на драйверных светодиодах WS2812 (куплены).

На данных момент существуют библиотеки от Адафрута и Фастлэд-ФастИсп.

 

Задача:есть четыре полоски по восемь светодиодов каждая,итого 32 с.д.

Режимы индикации,предположим все с.д. горяд белым,нужно в какой то момент времени (при включеных белых),помаргать крайними диодами другого цвета (на концах полосок),или,только одим (при горящих белых).

 

Как,какими алгоритмами реализуются такие возможности?

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
bambucho
Offline
Зарегистрирован: 30.08.2014

...читал раз пять. Эа статьъя не отвечает на мой вопрос. Управлять этим всем должна 328я мега (без участия ПК),подсвечивающая входящие события.

Меня интересуют приблизительные шаблоны алгоритмов кода...что бы реализовать такую индикацию.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
bambucho
Offline
Зарегистрирован: 30.08.2014

)))))))) спасибо,но это я тоже видел,меня,как это сказать) сама математика интересует,которая базируется на готовых библиотеках,что бы самому заново асм обработки не писать.

Пытался ковырятся в готовой программе от адафрута,без успеха,т.к. мало опыта в написании такой математики.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Тоесть вам очень трудно скачать пример и посмотреть как таам все устроено?

bambucho
Offline
Зарегистрирован: 30.08.2014

Все возможне примеры скачаны. Сложно мозг включить в это направление и недостаток опыта написания алгоритмов)

Поэтому и спрашиваю какие подходы возможны.

bambucho
Offline
Зарегистрирован: 30.08.2014

я тут (прошу прощения за игнор ветки,не всегда инет в кармане),подключил 8 сд временно к 2560,

Забегая дальше,контроллер должен парсить УАРТ (а именно МАВЛИНК-протокол автопилота ЛА),и подсвечивать нужные события. Комбинаций подсветки и эффектов очень много.

моя реализация кода:



#include <Adafruit_NeoPixel.h>

#define PIN 6
//full pixel except blue/green
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);

int potpin = 0; 
int potval = 0;

void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}



void loop() {


  if ( potval <=0 ) {
    
strip.setPixelColor(0, 255, 0, 0);
strip.setPixelColor(1, 0, 0, 0);
strip.setPixelColor(2, 0, 0, 0);
strip.setPixelColor(3, 0, 0, 0);
strip.setPixelColor(4, 0, 0, 0);
strip.setPixelColor(5, 0, 0, 0);
strip.setPixelColor(6, 0, 0, 0);
strip.setPixelColor(7, 0, 0, 0);



strip.show();

}
    


else if ( potval <= 900){ 
  
 rainbowCycle(20);

}

}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

Возникли первые мысли,ведь комбинаций индикации много,если таким образом подходить,то памяти контроллера не хватит,сдесь должна быть математика...+ две скорости моргания

Например:

Четыре ленты по 8 сд.

Подаем питание:

1)две первые ленты (передние) горят - желтым

  две задние горят красным.

2)Наступило событие А (напарсилось но УАРТ)

 

две передние мигают синим с частотой 1Гц

две задние горят краным.

3)Событие Б...

две передние горят синим

две задние горят краным

....как то так)

 

bambucho
Offline
Зарегистрирован: 30.08.2014

Ура уже начальные эффекты стали получатся,но массив очень большой)

SU-27-16 ,подскажите,что бы такие массивы не плодить их можно как то уменьшить,т.е. математически описать?

 

#include <Adafruit_NeoPixel.h>
#define Pin1 4       // назначили пин управления на ленту_1
Adafruit_NeoPixel strip1 = Adafruit_NeoPixel( 8 , Pin1 , NEO_GRB + NEO_KHZ800 );   // создали объект "strip1"
#define Pause 200   // задержка в секундах
void setup( )
{
  strip1.begin();      // инициализировали объект "strip1"
  strip1.show();       // погасили все 8 СД
}
void loop( )
{
  delay( Pause );
  
// strip.setPixelColor( n , red , green , blue ); - устанавливает цвет пикселя в ленте
  strip1.setPixelColor( 0 , 255 , 0 , 0 );   // подожгём 1-ый СД белым
  strip1.setPixelColor( 1 , 255 , 0 , 0 );       // подожгём 2-ой СД красным
  strip1.setPixelColor( 2 , 255 , 0 , 0 );       // подожгём 3-ий СД зелёным
  strip1.setPixelColor( 3 , 255 , 0 , 0 );       // подожгём 4-ый СД синим
  strip1.setPixelColor( 4 , 255 , 0 , 0 );   // подожгём 1-ый СД белым
  strip1.setPixelColor( 5 , 255 , 0 , 0 );       // подожгём 2-ой СД красным
  strip1.setPixelColor( 6 , 255 , 0 , 0 );       // подожгём 3-ий СД зелёным
  strip1.setPixelColor( 7 , 255 , 0 , 0 );       // подожгём 4-ый СД синим
  
  delay ( Pause );
strip1.show();  
// strip.setPixelColor( n , red , green , blue ); - устанавливает цвет пикселя в ленте
  strip1.setPixelColor( 0 , 255 , 255 , 0 );   // подожгём 1-ый СД белым
  strip1.setPixelColor( 1 , 255 , 255 , 0 );       // подожгём 2-ой СД красным
  strip1.setPixelColor( 2 , 255 , 255 , 0 );       // подожгём 3-ий СД зелёным
  strip1.setPixelColor( 3 , 255 , 255 , 0 );       // подожгём 4-ый СД синим
  strip1.setPixelColor( 4 , 255 , 0 , 0 );   // подожгём 1-ый СД белым
  strip1.setPixelColor( 5 , 255 , 0 , 0 );       // подожгём 2-ой СД красным
  strip1.setPixelColor( 6 , 255 , 0 , 0 );       // подожгём 3-ий СД зелёным
  strip1.setPixelColor( 7 , 255 , 0 , 0 );       // подожгём 4-ый СД синим
  
  delay ( Pause );
strip1.show();  

// strip.setPixelColor( n , red , green , blue ); - устанавливает цвет пикселя в ленте
  strip1.setPixelColor( 0 , 0 , 0 , 255 );   // подожгём 1-ый СД белым
  strip1.setPixelColor( 1 , 0 , 0 , 255 );       // подожгём 2-ой СД красным
  strip1.setPixelColor( 2 , 0 , 0 , 255 );       // подожгём 3-ий СД зелёным
  strip1.setPixelColor( 3 , 0 , 0 , 255 );       // подожгём 4-ый СД синим
  strip1.setPixelColor( 4 , 0 , 0 , 255 );   // подожгём 1-ый СД белым
  strip1.setPixelColor( 5 , 0 , 0 , 255 );       // подожгём 2-ой СД красным
  strip1.setPixelColor( 6 , 0 , 0 , 255 );       // подожгём 3-ий СД зелёным
  strip1.setPixelColor( 7 , 0 , 0 , 255 );       // подожгём 4-ый СД синим
  
  delay ( Pause );
strip1.show(); 
// strip.setPixelColor( n , red , green , blue ); - устанавливает цвет пикселя в ленте
  strip1.setPixelColor( 0 , 0 , 0 , 0 );   // подожгём 1-ый СД белым
  strip1.setPixelColor( 1 , 0 , 0 , 0 );       // подожгём 2-ой СД красным
  strip1.setPixelColor( 2 , 0 , 0 , 0 );       // подожгём 3-ий СД зелёным
  strip1.setPixelColor( 3 , 0 , 0 , 0 );       // подожгём 4-ый СД синим
  strip1.setPixelColor( 4 , 0 , 0 , 0 );   // подожгём 1-ый СД белым
  strip1.setPixelColor( 5 , 0 , 0 , 0 );       // подожгём 2-ой СД красным
  strip1.setPixelColor( 6 , 0 , 0 , 0 );       // подожгём 3-ий СД зелёным
  strip1.setPixelColor( 7 , 0 , 0 , 0 );       // подожгём 4-ый СД синим
  
  delay ( Pause );
strip1.show(); 
// strip.setPixelColor( n , red , green , blue ); - устанавливает цвет пикселя в ленте
  strip1.setPixelColor( 0 , 0 , 0 , 255 );   
  strip1.setPixelColor( 1 , 0 , 0 , 255 );      
  strip1.setPixelColor( 2 , 0 , 0 , 255 );      
  strip1.setPixelColor( 3 , 0 , 0 , 255 );       
  strip1.setPixelColor( 4 , 0 , 0 , 255 );   
  strip1.setPixelColor( 5 , 0 , 0 , 255 );      
  strip1.setPixelColor( 6 , 0 , 0 , 255 );       
  strip1.setPixelColor( 7 , 0 , 0 , 255 );       
  
  delay ( Pause );
strip1.show(); 
 

}

 

Это только 5% того,что нужно)

 

 

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ваши хотения завсегда мона прописать функциями....

....дык, напишите их !!!!

bambucho
Offline
Зарегистрирован: 30.08.2014

Если не сложно,приведите пример...я буду понимать куда мне дальше "учиться"

bambucho
Offline
Зарегистрирован: 30.08.2014

...а это где должно это все работать -

http://forum.rcdesign.ru/blogs/121712/blog19060.html

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Ура уже начальные эффекты стали получатся,но массив очень большой)

моя и сам в аухее, чё виртуально подсказал :)

вы задачку обрисуйте точнее.... куда думать-то .....

bambucho
Offline
Зарегистрирован: 30.08.2014

Подаем потание на ЛА:

Полетный контроллер инициализируется,далее ищит спутники (0,1,2,5....12 нашлось спутников)

И эта информация о состоянии контроллера льется по УАРТ протоколом МАВЛИНК.

В это время,мой любопытный контроллер слушает УАРТ и пытается выловить (условно) кол-во пойманных спутников...

1)GPS=0

все полоски красные

2)GPS-1-3

передние полоски желтые,задние красные

3)GPS-3-6

передние мигают синим,задние красные

4)GPS=10

передние синие,задние красные

...далее долго расписывать

Мне необходимо начальное понимание кодинга,ну и как можно оптимизировать массивы подсветки за счет функций,примеры...я буду видеть свои пробелы...(я знаю они очень глубокие)

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Нужно побольше попкорма приволочь. А то тут еще будут поиски любопытного мк, который будет слушать uart от неизвестного мк с туманными посланиями.

bambucho
Offline
Зарегистрирован: 30.08.2014

Как можно реализовать плавное затухание такого сегмента с значения с 255 до 100?

// strip.setPixelColor( n , red , green , blue ); 
15   strip1.setPixelColor( 0 , 255 , 0 , 0 );   
16   strip1.setPixelColor( 1 , 255 , 0 , 0 );       
17   strip1.setPixelColor( 2 , 255 , 0 , 0 );       
18   strip1.setPixelColor( 3 , 255 , 0 , 0 );     
19   strip1.setPixelColor( 4 , 255 , 0 , 0 );   
20   strip1.setPixelColor( 5 , 255 , 0 , 0 );       
21   strip1.setPixelColor( 6 , 255 , 0 , 0 );       
22   strip1.setPixelColor( 7 , 255 , 0 , 0 );       

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

...посмотреть весь набор методов в библиотеке

 

  1. for ( int N = 254; N != 0; N-- )
  2. {
  3. strip1.setBrightness( N );
  4. strip1.show( );
  5. delay( 25 );
  6. }
  7. delay( 500 );
  8.  
  9. for ( int N = 0; N < 256; N++ )
  10. {
  11. strip1.setBrightness( N );
  12. strip1.show( );
  13. delay( 25 );
  14. }
  15.  
bambucho
Offline
Зарегистрирован: 30.08.2014

Не совсем понятно,набор методов расположен в каком файле,я видел только саму программу эффектов...
Спасибо,буду пробовать как до контроллера доберусь

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

от 255 до 0 за 5,1 сек, полсек темнота, от 0 до 255 за 5,1 сек

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library

Then, in the setup() function, call begin() to prepare the data pin for NeoPixel output:
Copy Code
 
  1. void setup() {
  2. strip.begin();
  3. strip.show(); // Initialize all pixels to 'off'
  4. }
The second line, strip.show(), isn’t absolutely necessary, it’s just there to be thorough. That function pushes data out to the pixels…since no colors have been set yet, this initializes all the NeoPixels to an initial “off” state in case some were left lit by a prior program.
In the strandtest example, loop() doesn’t set any pixel colors on its own — it calls other functions that create animated effects. So let’s ignore it for now and look ahead, inside the individual functions, to see how the strip is controlled.



There are two ways to set the color of a pixel. The first is:
Copy Code
 
  1. strip.setPixelColor(n, red, green, blue);
The first argument — n in this example — is the pixel number along the strip, starting from 0 closest to the Arduino. If you have a strip of 30 pixels, they’re numbered 0 through 29. It’s a computer thing. You’ll see various places in the code using a for loop, passing the loop counter variable as the pixel number to this function, to set the values of multiple pixels.



The next three arguments are the pixel color, expressed as red, green and blue brightness levels, where 0 is dimmest (off) and 255 is maximum brightness.



To set the 12th pixel (#11, counting from 0) to magenta (red + blue), you could write:
Copy Code
 
  1. strip.setPixelColor(11, 255, 0, 255);
An alternate syntax has just two arguments:
Copy Code
 
  1. strip.setPixelColor(n, color);
Here, color is a 32-bit type that merges the red, green and blue values into a single number. This is sometimes easier or faster for some (
bambucho
Offline
Зарегистрирован: 30.08.2014

Да,это описание я видел у них на сайте,мне показалось,что оно не полное...

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

полное описание и реализация в скачанной библиотеке - это файлы xxxxxxx.h и xxxxxxx.cpp

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

xxxxxxx.h - в этом файле перечислено всё, чем обладает описанный библиотекой класс. xxxxxxx.cpp - файл реализации

bambucho
Offline
Зарегистрирован: 30.08.2014

Теперь понятно,иду перекапывать базовые понятия

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

эт сюда тогда - http://arduino.ru/Reference

bambucho
Offline
Зарегистрирован: 30.08.2014

Вот она! Магия функций!

void setup( )
{
  strip1.begin();      // инициализировали объект "strip1"
  strip1.show();       // погасили все 8 СД
}
void loop( )
{
 
 
 
 
  const int ledCount = 4;
 const int step = 10;

 int val_b = 255;
 int val_g = 255;
 int val_r = 255;
 
 for(; val_b >= 0; val_b -= step)
 for(; val_g >= 0; val_g -= step)
 for(; val_r >= 0; val_r -= step)
 
 
 for(int led = 0; led < ledCount; ++led)
 {
 strip1.setPixelColor( led , val_r , val_g , val_b );
 
 delay(10) ;
 strip1.show(); 
 }
}

 

Можно почти пятью строчками генерить громадные массивы!

Спасибо СУ и Коллеге с другого форума!

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

:)

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

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
15  int val_b = 255;
16  int val_g = 255;
17  int val_r = 255;

 

зачем ? можно просто :

15  int val_b;
16  int val_g;
17  int val_r;

....и перенести ето в секцию 

01 void setup( )
02 {
03   strip1.begin();      // инициализировали объект "strip1"
04   strip1.show();       // погасили все 8 СД
05 }

...в строку 02_1

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

строки 12 и 13 - туда же - зачем в лупе периодически объявлять эти переменные ? так можно процессор загонять вУсмерть :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

и ето НЕ функция !!!!!!!!! ето перебор всех значений в цикле..... функции - помощнее тупого перебора значений :)-

bambucho
Offline
Зарегистрирован: 30.08.2014

Мучительный вопрос...если в 328 залить прогу,которая юзает уарт,328 в последствии будет принимать традиционным образом последующие прошивки usb232>uart328 (у нее он один)? или придется уже шить через ISP?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Мучительный вопрос навстречу. Люди которые используют ком порт для отладки скечей, как же они потом перепрошивают новый скеч через ком порт? Наверное если сделать ресет мк то первые несколько секунд он ожидает новой прошивки через ком порт и только не получмв ничего, запускает старый скеч?

bambucho
Offline
Зарегистрирован: 30.08.2014

О! Золотые слова! - Наверное если сделать ресет мк то первые несколько секунд он ожидает новой прошивки через ком порт и только не получмв ничего, запускает старый скеч? 

Спасибо.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

bambucho пишет:

О! Золотые слова! - Наверное если сделать ресет мк то первые несколько секунд он ожидает новой прошивки через ком порт и только не получмв ничего, запускает старый скеч? 

Спасибо.


Говорят полезно читать описание игрушек с которыми играешь. Но тут есть нюанс. Некоторым МК ресет не помогает :) у них другие запросы.

bambucho
Offline
Зарегистрирован: 30.08.2014

опыта мало

...можно развернуть вопрос,лучше через ссыль

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

bambucho пишет:

опыта мало

...можно развернуть вопрос,лучше через ссыль


Там вон наверху есть КОНТРОЛЕРЫ АРДУИНО там жмакаешь и читаешь. Не находиш че ищешь, набираешь наименование контролера и слово datasheet и там иногда рукопись в 2000 страниц :)

bambucho
Offline
Зарегистрирован: 30.08.2014

кошмар

...а букварь для недолеких есть с одной буквой?

SLOM
Offline
Зарегистрирован: 06.11.2014

Заинтересовался адресными лентами, и сразу столкнулся с делемой. 

взял за основу пример из библиотеки 

#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUM_LEDS 29
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
}

// *** REPLACE FROM HERE ***
void loop() {
  byte colors[3][3] = { {0xff, 0,0}, 
                        {0xff, 0xff, 0xff}, 
                        {0   , 0   , 0xff} };

  BouncingColoredBalls(3, colors);
}

void BouncingColoredBalls(int BallCount, byte colors[][3]) {
  float Gravity = -9.81;
  int StartHeight = 1;
  
  float Height[BallCount];
  float ImpactVelocityStart = sqrt( -2 * Gravity * StartHeight );
  float ImpactVelocity[BallCount];
  float TimeSinceLastBounce[BallCount];
  int   Position[BallCount];
  long  ClockTimeSinceLastBounce[BallCount];
  float Dampening[BallCount];
  
  for (int i = 0 ; i < BallCount ; i++) {   
    ClockTimeSinceLastBounce[i] = millis();
    Height[i] = StartHeight;
    Position[i] = 0; 
    ImpactVelocity[i] = ImpactVelocityStart;
    TimeSinceLastBounce[i] = 0;
    Dampening[i] = 0.90 - float(i)/pow(BallCount,2); 
  }

  while (true) {
    for (int i = 0 ; i < BallCount ; i++) {
      TimeSinceLastBounce[i] =  millis() - ClockTimeSinceLastBounce[i];
      Height[i] = 0.5 * Gravity * pow( TimeSinceLastBounce[i]/1000 , 2.0 ) + ImpactVelocity[i] * TimeSinceLastBounce[i]/1000;
  
      if ( Height[i] < 0 ) {                      
        Height[i] = 0;
        ImpactVelocity[i] = Dampening[i] * ImpactVelocity[i];
        ClockTimeSinceLastBounce[i] = millis();
  
        if ( ImpactVelocity[i] < 0.01 ) {
          ImpactVelocity[i] = ImpactVelocityStart;
        }
      }
      Position[i] = round( Height[i] * (NUM_LEDS - 1) / StartHeight);
    }
  
    for (int i = 0 ; i < BallCount ; i++) {
      setPixel(Position[i],colors[i][0],colors[i][1],colors[i][2]);
    }
    
    showStrip();
    setAll(0,0,0);
  }
}


// ---> here we define the effect function <---
// *** REPLACE TO HERE ***

void showStrip() {
 #ifdef ADAFRUIT_NEOPIXEL_H 
   // NeoPixel
   strip.show();
 #endif
 #ifndef ADAFRUIT_NEOPIXEL_H
   // FastLED
   FastLED.show();
 #endif
}

void setPixel(int Pixel, byte red, byte green, byte blue) {
 #ifdef ADAFRUIT_NEOPIXEL_H 
   // NeoPixel
   strip.setPixelColor(Pixel, strip.Color(red, green, blue));
 #endif
 #ifndef ADAFRUIT_NEOPIXEL_H 
   // FastLED
   leds[Pixel].r = red;
   leds[Pixel].g = green;
   leds[Pixel].b = blue;
 #endif
}

void setAll(byte red, byte green, byte blue) {
  for(int i = 0; i < NUM_LEDS; i++ ) {
    setPixel(i, red, green, blue); 
  }
  showStrip();
}

 

http://www.tweaking4all.com/hardware/arduino/adruino-led-strip-effects/#prepare_arduino

Эффект

LEDStrip Effect – Multi Color Bouncing Balls

Эфект реализован на одну ленту, а я хочу добавить к ардуине еще несколько лент и на них другие эффекты повесить. 

2 дня ковыряю ничего не получаеться. мои познания ардуины сводяться к найти, скопировать и вставить, в большинстве случаев прокатывает, а тут нет :( 

помогите, может ктото делал разные эффекты на разные выходы одной ардуины? 

splans
splans аватар
Offline
Зарегистрирован: 06.07.2015

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel( 8 , 4 , NEO_GRB + NEO_KHZ800 );

Adafruit_NeoPixel strip2 = Adafruit_NeoPixel( 8 , 5 , NEO_GRB + NEO_KHZ800 );

 

strip1.setPixelColor( 0 , 255 , 255 , 255 );   // подожгём 1-ый СД белым. лента 1

strip2.setPixelColor( 1 , 255 , 0 , 0 );       // подожгём 2-ой СД красным. лента 2

так этж получается можно с разных ног лентами управлять по разному..... можно не кольцевать гирлянду чели?????

 

arduinec
Offline
Зарегистрирован: 01.09.2015

splans пишет:

так этж получается можно с разных ног лентами управлять по разному..... можно не кольцевать гирлянду чели?????

Скорее всего можно (не проверял), но и по одному пину можно по-разному управлять отдельными кусками ленты (даже отдельными светодиодами).
Основное ограничение в оперативной памяти Ардуины: на каждый диод расходуется 3 байта, поэтому памяти Uno/Nano хватит только на 500 светодиодов.

splans
splans аватар
Offline
Зарегистрирован: 06.07.2015

ПРОШУ ПОМОШИ 

требуется сделать переменную в кол диодов 

#include <DMXSerial.h>
#include <Adafruit_NeoPixel.h>
#define NUM_LEDS DMXSerial.read(2)
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, 13, NEO_GRB + NEO_KHZ800);
int NUM_LEDS=DMXSerial.read(2);
int rd=0;
int rdr=8;

вот весь код, все работает прекрасно кроме выбора кол ва диодов от величины канала

#include <DMXSerial.h>
#include <Adafruit_NeoPixel.h>
#define NUM_LEDS DMXSerial.read(2)
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, 13, NEO_GRB + NEO_KHZ800);
int NUM_LEDS=DMXSerial.read(2);
int rd=0;
int rdr=8;

void setup () {
  pixels.begin();
  pixels.show();
  DMXSerial.init(DMXReceiver);
}

void loop() {
unsigned long lastPacket = DMXSerial.noDataSince();
int x=DMXSerial.read(6);
int r=DMXSerial.read(5); 
int g=DMXSerial.read(4); 
int b=DMXSerial.read(3); 
    if (DMXSerial.read(7) == 10) { 
  pixels.setPixelColor(random(rd, rdr), pixels.Color(r,g,b)); 
  delay(x*2);
  pixels.show();
  pixels.setPixelColor(random(rd, rdr), pixels.Color(0,0,0)); 
  delay(1);
  pixels.show();
    } else {  
  pixels.setPixelColor(random(rd, rdr), pixels.Color(0,0,0)); 
  delay(1);
  pixels.show();
    }
    
    if (DMXSerial.read(7) == 11) { 
  for(int z=0; z<8; z++) {
    pixels.setPixelColor(z, pixels.Color(r,g,b));
    delay(x+1*4);
    pixels.show();  
  } 
  for(int z=0; z<8; z++) {
    pixels.setPixelColor(z, pixels.Color(0,0,0));
    delay(x+1*4);
    pixels.show();          
  }    
    } else {  
  pixels.setPixelColor(random(rd, rdr), pixels.Color(0,0,0)); 
  delay(1);
  pixels.show();
    }
       
}

 

splans
splans аватар
Offline
Зарегистрирован: 06.07.2015

это DMX гирлянда управляемая от компа в реальном времени

MacSim
Offline
Зарегистрирован: 28.11.2012

bambucho пишет:

Я в программировании чайник,постепенно ...

 

как говориться: " ноу комент". за такой флуд забаньте его админы. только голову морочит людям.

 

Logik
Offline
Зарегистрирован: 05.08.2014

Ну дак с компа и передавай первім параметром число светодиодов.

MacSim пишет:

как говориться: " ноу комент". за такой флуд забаньте его админы. только голову морочит людям.

 

Да нужно когото забанить, день учителя скора, нужна ритуальная жертва ;)