Новогоднее светодиодное оформление комнаты при
помощи Arduino Nano и RGB светодиодной ленты LED Strip WS820
Для быстрой проверки ленты, можно использовать следующий тест.
Тестовый скетч реализует один бегущий огонек, можно тестировать без внешнего БП, ленту можно запитать от Arduino
PHP код:
#include <SPI.h>
typedef struct {uint8_t b; uint8_t g; uint8_t r;} RGB;
RGB pixel[160];
void setup()
{
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPI.setClockDivider(SPI_CLOCK_DIV16);
delay(1);
}
void loop()
{
run_pix(160); //количество тестируемых светодиодов в ленте
}
void run_pix(uint8_t num)
{
pixel[0].r=0;
pixel[0].g=200;
pixel[0].b=255;
for(uint8_t i=0; i<num; i++)
{
pixel[i+1].r=pixel[i].r;
pixel[i+1].g=pixel[i].g;
pixel[i+1].b=pixel[i].b;
pixel[i].r=0;
pixel[i].g=0;
pixel[i].b=0;
set_pix(num);
// delay(10); //пауза между вспышками светодиодов
}
}
void set_pix(uint8_t num)
{
for(uint8_t i=0; i<num; i++)
{
SPI.transfer(pixel[i].b);
SPI.transfer(pixel[i].g);
SPI.transfer(pixel[i].r);
}
delay(1);
}
Новогодний скетч для
RGB WS2801 ленты
Визуально красивое перетекание движущихся по ленте цветных пикселей
PHP код:
#include <SPI.h>
#define numpix 160
typedef struct {uint8_t b; uint8_t g; uint8_t r;} RGB;
RGB pixel[numpix];
void setup() {
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPI.setClockDivider(SPI_CLOCK_DIV16);
delay(1);
}
void loop() {
run_pix(numpix, 255, 0, 0 );
run_pix(numpix, 255, 255, 0 );
run_pix(numpix, 0, 255, 0 );
run_pix(numpix, 0, 255, 255 );
run_pix(numpix, 0, 0, 255 );
run_pix(numpix, 255, 0, 255 );
}
void run_pix(uint8_t num, uint8_t rp, uint8_t gp, uint8_t bp)
{
for(uint8_t i=0; i<num; i++)
{
pixel[i].r=rp;
pixel[i].g=gp;
pixel[i].b=bp;
set_pix(num);
delay(5);
}
}
void set_pix(uint8_t num)
{
for(uint8_t i=0; i<num; i++)
{
SPI.transfer(pixel[i].b);
SPI.transfer(pixel[i].g);
SPI.transfer(pixel[i].r);
}
delay(1);
}
Схема подключения