Что-то не пойму с switch case
- Войдите на сайт для отправки комментариев
Чт, 30/03/2017 - 13:09
Здравствуйте господа! Сразу скажу - я только учусь. Нашел на просторах скетч (здесь уже с моими вставками!)
// https://youtu.be/_hnk5jNTudk Low power NeoPixel goggles example. Makes a nice blinky display
// with just a few LEDs on at any time.
#include <Adafruit_NeoPixel.h>
#define PIN 1
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(48, PIN);
uint8_t mode = 0, // Эффект по умолчанию
offset = 0; // Position of spinny eyes
uint32_t color = 0xFF0000; // Start red
uint32_t prevTime;
//Путь пикселей при змейке - 48 всего
int sine[] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,23,22,21,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,24,25,26,27};
int sine2[] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,23,22,21,27,26,25,24,47,46,46,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28};
void setup() {
pixels.begin();
pixels.setBrightness(120); // Пол яркости
prevTime = millis();
}
void loop() {
uint8_t i;
uint32_t t;
switch(mode) {
case 0: // Хаотичные блики - вспышки разных диодов в разное время!
i = random(48);
pixels.setPixelColor(i, color);
pixels.show();
delay(10);
pixels.setPixelColor(i, 0);
break;
case 1: // Spinny wheels (8 LED одновременно)
for(i=0; i<24; i++) {
uint32_t c = 0;
if(((offset + i) & 7) < 2) c = color; // 4 pixels on...
pixels.setPixelColor( i, c); // Первое очко
pixels.setPixelColor(47-i, c); // Второе очко (инверсия)
}
pixels.show();
offset++;
delay(50);
break;
case 2: //Змейка
int r = random(255);
int g = random(255);
int b = random(255);
for(int i=0; i<48; i++) {
pixels.setPixelColor(sine[i], pixels.Color(0, 0, 0));
for (int j=0; j<8; j++){
pixels.setPixelColor(sine[(j+i+1)%48], pixels.Color(r, g, b)); //random RGB color value
}
pixels.show();
delay(80);
}
break;
}
t = millis();
if((t - prevTime) > 8000) { // Каждые< 8 seconds...
mode++; // Следующий уровень
if(mode > 2) { // Последний уровень?
mode = 0; // Уровни сначала
color >>= 8; // Следующий цвет R->G->B
if(!color) color = 0xFF0000; // Сброс на красный
}
for(i=0; i<48; i++) pixels.setPixelColor(i, 0);
prevTime = t;
}
}
// 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) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else if(WheelPos < 170) {
WheelPos -= 85;
return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);
} else {
WheelPos -= 170;
return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
}
для двух Adafruit WS2812b колец. Скетч запускается и работает. Решил добавить еще один эффект Змейка2. Добавил sine2, изменил "if(mode > 3) { // Последний уровень?" и написал еще один case 3: //Змейка2
case 3: //Змейка2
int r = random(255);
int g = random(255);
int b = random(255);
for(int i=0; i<48; i++) {
pixels.setPixelColor(sine2[i], pixels.Color(0, 0, 0));
for (int j=0; j<8; j++){
pixels.setPixelColor(sine2[(j+i+1)%48], pixels.Color(r, g, b)); //random RGB color value
}
pixels.show();
delay(80);
}
break;
Но не хочет работать. Пишет огромное количество букв!
C:\Documents\Arduino\Mad_scientist_goggles\Mad_scientist_goggles.ino: In function 'void loop()':
Mad_scientist_goggles:61: error: jump to case label [-fpermissive]
case 3: // Zmeyka2
^
Mad_scientist_goggles:51: error: crosses initialization of 'int b'
int b = random(255);
^
Mad_scientist_goggles:50: error: crosses initialization of 'int g'
int g = random(255);
^
Mad_scientist_goggles:49: error: crosses initialization of 'int r'
int r = random(255);
^
Mad_scientist_goggles:62: error: redeclaration of 'int r'
int r = random(255);
^
Mad_scientist_goggles:49: error: 'int r' previously declared here
int r = random(255);
^
Mad_scientist_goggles:63: error: redeclaration of 'int g'
int g = random(255);
^
Mad_scientist_goggles:50: error: 'int g' previously declared here
int g = random(255);
^
Mad_scientist_goggles:64: error: redeclaration of 'int b'
int b = random(255);
^
Mad_scientist_goggles:51: error: 'int b' previously declared here
int b = random(255);
^
exit status 1
jump to case label [-fpermissive]
и останавливается при проверке. Помогите пожалуйста вставить этот case в код!
скорее всего, следующий после case 2: break затерли
покажите строки с 47 и ниже вместе
Скорее всего вставили в 75 строку, а не до "}" в 74 строке
// https://youtu.be/_hnk5jNTudk Low power NeoPixel goggles example. Makes a nice blinky display // with just a few LEDs on at any time. #include <Adafruit_NeoPixel.h> #define PIN 1 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(48, PIN); uint8_t mode = 0, // Эффект по умолчанию offset = 0; // Position of spinny eyes uint32_t color = 0xFF0000; // Start red uint32_t prevTime; //Путь пикселей при змейке - 48 всего int sine[] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,23,22,21,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,24,25,26,27}; int sine2[] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,23,22,21,27,26,25,24,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28}; void setup() { pixels.begin(); pixels.setBrightness(120); // Пол яркости prevTime = millis(); } void loop() { uint8_t i; uint32_t t; switch(mode) { case 0: // Хаотичные блики - вспышки разных диодов в разное время! i = random(48); pixels.setPixelColor(i, color); pixels.show(); delay(10); pixels.setPixelColor(i, 0); break; case 1: // Spinny wheels (8 LED одновременно) for(i=0; i<24; i++) { uint32_t c = 0; if(((offset + i) & 7) < 2) c = color; // 4 pixels on... pixels.setPixelColor( i, c); // Первое очко pixels.setPixelColor(47-i, c); // Второе очко (инверсия) } pixels.show(); offset++; delay(50); break; case 2: // Zmeyka int r = random(255); int g = random(255); int b = random(255); for(int i=0; i<48; i++) { pixels.setPixelColor(sine[i], pixels.Color(0, 0, 0)); for (int j=0; j<8; j++){ pixels.setPixelColor(sine[(j+i+1)%48], pixels.Color(r, g, b)); //random RGB color value } pixels.show(); delay(80); } break; case 3: // Zmeyka2 int r = random(255); int g = random(255); int b = random(255); for(int i=0; i<48; i++) { pixels.setPixelColor(sine2[i], pixels.Color(0, 0, 0)); for (int j=0; j<8; j++){ pixels.setPixelColor(sine2[(j+i+1)%48], pixels.Color(r, g, b)); //random RGB color value } pixels.show(); delay(80); } break; } t = millis(); if((t - prevTime) > 8000) { // Каждые< 8 seconds... mode++; // Следующий уровень if(mode > 3) { // Последний уровень? mode = 0; // Уровни сначала color >>= 8; // Следующий цвет R->G->B if(!color) color = 0xFF0000; // Сброс на красный } for(i=0; i<48; i++) pixels.setPixelColor(i, 0); prevTime = t; } } // 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) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else if(WheelPos < 170) { WheelPos -= 85; return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3); } else { WheelPos -= 170; return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } }В строках 62-64 убираем int. Тоже самое делаем в строках 49-51.
А после строки 26 вставляем
Просто почему я сделал именно так? Я посмотрел как был сделан case2 и по его аналогии сделал свой. Видимо в switch case переменные нужно объявлять вне case, ну или чтото типа того. Ладно. Спасибо. Буду пробовать чуть позже. Пока перетыкал в USB и обратно, два раза! замкнул нагрузку и накрыл две! платки Digispark. Надеюсь только диоды погорели... Завтра на третьей попробую.
Эта "ошибка" обходится легко, например, так:
switch(var) { case 0: { int a, b, c; ... } break; case 1: { int var1, var2, var4; ... } break; };Т.е. если есть что-то, что объявляется в ветке case ...: то этот case ...: нужно поместить в фигурные скобки.
В строках 62-64 убираем int. Тоже самое делаем в строках 49-51.
А после строки 26 вставляем
Всё сделал почти так, разве что добавил
А код где? Откуда я знаю, что Вы там сделали и что и куда добавили
А разве говорил, что что-то будет светится? У Вас не компилировалось, Вы спросили что сделать, я подсказал и написал, что
После этого всё нормально компилируется.
Всё ведь так и есть, стало компилироваться? А про то, чтобы оно нормально заработало - об этом я Вам ничего не говорил.
Ремирую 3 кейс - снова всё работает... НЕ пойму где трабла?
Потрудитесь изъясняться по-русски. Этой фразы я вообще не понял.
Прошу прощения, я без претензий! Я просто ни как не могу понять причину происходящего. Вот мной изменённый код.
// https://youtu.be/_hnk5jNTudk Low power NeoPixel goggles example. Makes a nice blinky display // with just a few LEDs on at any time. #include <Adafruit_NeoPixel.h> #define PIN 1 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(48, PIN); uint8_t mode = 0, // Эффект по умолчанию offset = 0; // Position of spinny eyes uint32_t color = 0xFF0000; // Start red uint32_t prevTime; //Путь пикселей при змейке - 48 всего int sine1[] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,23,22,21,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,24,25,26,27}; int sine2[] = {20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,23,22,21,27,26,25,24,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28}; void setup() { pixels.begin(); pixels.setBrightness(120); // Пол яркости prevTime = millis(); } void loop() { uint8_t i; uint32_t t; int r = random(255); int g = random(255); int b = random(255); switch(mode) { case 0: // Хаотичные блики - вспышки разных диодов в разное время! i = random(48); pixels.setPixelColor(i, color); pixels.show(); delay(10); pixels.setPixelColor(i, 0); break; case 1: // Spinny wheels (Вращение 3 по 3 покругу) for(i=0; i<24; i++) { uint32_t c = 0; if(((offset + i) & 7) < 2) c = color; // 4 pixels on... pixels.setPixelColor( i, c); // Первое очко pixels.setPixelColor(47-i, c); // Второе очко (инверсия) } pixels.show(); offset++; delay(80); break; case 2: // Zmeyka for(int i=0; i<48; i++) { pixels.setPixelColor(sine2[i], pixels.Color(0, 0, 0)); for (int j=0; j<8; j++){ pixels.setPixelColor(sine2[(j+i+1)%48], pixels.Color(r, g, b)); //random RGB color value } pixels.show(); delay(80); } break; case 3: // Zmeyka2 for(int i=0; i<48; i++) { pixels.setPixelColor(sine1[i], pixels.Color(0, 0, 0)); for (int j=0; j<8; j++){ pixels.setPixelColor(sine1[(j+i+1)%48], pixels.Color(r, g, b)); //random RGB color value } pixels.show(); delay(80); } break; } t = millis(); if((t - prevTime) > 8000) { // Каждые< 8 seconds... mode++; // Следующий уровень if(mode > 3) { // Если последний уровень mode = 0; // Уровни сначала color >>= 8; // Следующий цвет R->G->B if(!color) color = 0xFF0000; // Сброс на красный } for(i=0; i<48; i++) pixels.setPixelColor(i, 0); prevTime = t; } } // 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) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else if(WheelPos < 170) { WheelPos -= 85; return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3); } else { WheelPos -= 170; return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } }По поводу ремирования. Если я убираю из кода последний кейс (case3) и меняю в 81 строке на "if(mode > 2) { // Если последний уровень" - то всё грузится и всё работает. Никак не пойму почему у меня не получается вставить еще один кейс? Может быть потому что я использую Atiny85?
Ремирую 3 кейс - снова всё работает... НЕ пойму где трабла?
Потрудитесь изъясняться по-русски. Этой фразы я вообще не понял.
дорогой, Вы из новых. REM - апиратор Васика из 90-х. Обозначает - закомментировал.
Не знаю, я логику не совсем понимаю, а Вы не обяхсняеете что проихсодит. Например, добавили Вы третий режим. А при этом режимы 0-2 по-прежднему работают, а сдыхает только на третьем или как?
Что говорит про память после компиляции?
Кстати, Вы забыли вызвать randomSeed для инициализации псевдослучайной последовательности.
А что про то сколько памяти скетч занимает не пишет, что-ли?
Вот это болиже к делу. Вроде, всё как бы должно быть нормально.
Давайте договоримся так. Ваш скетч по сути (не по синтаксису) я толком ещё не смотрел. Сейчас мне надо убегать, но в течение дня я найду время посмотреть. Если хоть что-то менялось (хоть комментарий), то обязательно выложите, пожалуйста, свежую версию.
А если case 3 не убрать из кода, но 81 строку написать как : "if (mode>2)....", работает?
не, не запускается.
т.е. проблема в объеме кода
А зачем в коде процедурка whell () (строка 94 ....)?
ради интереса, вставил case3 c немного измененным case1, чтобы проверить объем - все работает! Значит какая-то проблема именно со змейкой...
whell - этоя планировал сделать еще и меняющиеся цвета. оно пока еще не работает.
https://youtu.be/EqEk0tliedQ три эффекта которые работают.
есть стандарный скетч от Adafruit
#include <Adafruit_NeoPixel.h> #define PIN 1 // Parameter 1 = number of pixels in strip // Parameter 2 = Arduino 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(48, PIN, NEO_GRB + NEO_KHZ800); // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input // and minimize distance between Arduino and first pixel. Avoid connecting // on a live circuit...if you must, connect GND first. void setup() { strip.begin(); strip.show(); // Initialize all pixels to 'off' } void loop() { // Some example procedures showing how to display to the pixels: colorWipe(strip.Color(255, 0, 0), 50); // Red colorWipe(strip.Color(0, 255, 0), 50); // Green colorWipe(strip.Color(0, 0, 255), 50); // Blue // Send a theater pixel chase in... theaterChase(strip.Color(127, 127, 127), 50); // White theaterChase(strip.Color(127, 0, 0), 50); // Red theaterChase(strip.Color( 0, 0, 127), 50); // Blue rainbow(20); rainbowCycle(20); theaterChaseRainbow(50); } // Fill the dots one after the other with a color void colorWipe(uint32_t c, uint8_t wait) { for(uint16_t i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); } } void rainbow(uint8_t wait) { uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<strip.numPixels(); i++) { strip.setPixelColor(i, Wheel((i+j) & 255)); } strip.show(); delay(wait); } } // 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); } } //Theatre-style crawling lights. void theaterChase(uint32_t c, uint8_t wait) { for (int j=0; j<10; j++) { //do 10 cycles of chasing for (int q=0; q < 3; q++) { for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, c); //turn every third pixel on } strip.show(); delay(wait); for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } } } //Theatre-style crawling lights with rainbow effect void theaterChaseRainbow(uint8_t wait) { for (int j=0; j < 256; j++) { // cycle all 256 colors in the wheel for (int q=0; q < 3; q++) { for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, Wheel( (i+j) % 255)); //turn every third pixel on } strip.show(); delay(wait); for (int i=0; i < strip.numPixels(); i=i+3) { strip.setPixelColor(i+q, 0); //turn every third pixel off } } } } // 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) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else if(WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } else { WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } }издесь немного по другому сделаны эффекты. Может можно сюда как-то вставить эту мою //Zmeyku?
Вы сейчас здесь? Давайте поработаем немного в режиме чата.
Итак,
1. Пост №9 содержит последний код?
2. Он совсем не работает - даже не начинает или сдыхает, когда доходит до последнего эффекта?
3. Дайте ссылку на ту версию библиотеки, которую Вы используете
Так, делаем следующее. После строки 18 вставляем
Запускаем без Вашей змейки, чтобы работало. Затем со змейкой, чтобы не работало. И говорим мне, что печатается в обоих случаях.
1. да
2. совсем не работает
3. 1.0.6
к сожалению монитор порта в Atiny85 не работает
Пин-то хоть один свободный есть? Или, я не знаю, там есть встроенный светодиод, как на Uno на 13 пине?
В общем, по-любому, сделайте так, чтобы на неком пине SV_PIN был светодиод (если уже есть, то и слава Богу).
Тогда так. По идее pixels.numPixels() возвращает количество пикселов. Поэтому делайте так.
Если память под pixels успешно выделилась, должен загореться светодиод.
Проделайте оба теста и скажите мне в обоих ли случаях он загорается?
да - светодиод горит в обоих случаях
Ага, значит память выделяется. Нормально. Сейчас посмотрю, что можно дальше проверить.
Поскольку Вы не выложили свежий скетч, вся нумерация строк в данном посте идёт по посту №9
1. В строках 15 и 16 заменяем int на byte
2. В строках 55, 66 удаляем int вовсе
3. В строках 57, 68 заменяем int на byte
Пробуем как оно и отписываемся.
Не понял, проблема решилась или Вы на неё просто забили?
нет нет. просто на выходных уезжал. а сегодня платку забыл дома. вот только сел, пробую.
о чудо! всё заработало! моя змейка побежала другим путем! Спасибо Евгений, я уж точно не додумался и не догадался бы. К сожалению моих познаний хватило лишь на попытки просто скопировать и немного изменить код. Спасибо еще раз!
всё заработало!
Значит, у Вас проблема с памятью. Если планируете что-то ещё добавлять, то лучше бы пройтись по коду и посмотреть где и что можно сэкономить. Или больше добавлять не планируете?
я хотел попробовать поперетаскивать в этот скетч эффекты из стандартного пост 22, но там немного по другому сделано. Эффекты меняются не switch-ем, а насколько я понял, они написаны отдельными блоками и loop крутит только их названия. В принципе это у меня хобби проект, буду разбираться потихоньку, не без помощи конечно Добрых людей!
хотя не страшно. немного поковырялся и вставил еще парочку case - ов.
к примеру:
case 5: // rainbowCycle for(j=0; j<256; j++) { // 5 cycles of all colors on wheel for(i=0; i<24; i++) { pixels.setPixelColor(i, Wheel(((i * 256 / pixels.numPixels()) + j) & 255)); pixels.setPixelColor(47-i, Wheel(((i * 256 / pixels.numPixels()) + j) & 255)); } pixels.show(); delay(80); } break;ну вообщем - получается!
Новый и рабочий скетч! У меня стоит на Attint85. Может кому пригодится!
// https://youtu.be/_hnk5jNTudk Low power NeoPixel goggles example. Makes a nice blinky display // with just a few LEDs on at any time. #include <Adafruit_NeoPixel.h> #define PIN 0 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(48, PIN); uint8_t mode = 0, // Эффект по умолчанию offset = 0; // Position of spinny eyes uint32_t color = 0xFF0000; // Start red uint32_t prevTime; //Путь пикселей при змейке - 48 всего byte sine1[] = {23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47}; byte sine2[] = {23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24}; void setup() { pixels.begin(); pixels.setBrightness(120); // Пол яркости prevTime = millis(); } void loop() { uint8_t i; uint32_t t; int r = random(255); int g = random(255); int b = random(255); switch(mode) { case 0: // Хаотичные блики - вспышки разных диодов в разное время! i = random(48); pixels.setPixelColor(i, color); pixels.show(); delay(10); pixels.setPixelColor(i, 0); break; case 1: // Spinny wheels (Вращение 3 по 3 покругу) for(i=0; i<24; i++) { uint32_t c = 0; if(((offset + i) & 7) < 2) c = color; // 4 pixels on... pixels.setPixelColor( i, c); // Первое очко pixels.setPixelColor(47-i, c); // Второе очко (инверсия) } pixels.show(); offset++; delay(80); break; case 2: // rainbow uint16_t i, j; for(j=0; j<256; j++) { for(i=0; i<24; i++) { pixels.setPixelColor(i, Wheel((i+j) & 255)); pixels.setPixelColor(47-i, Wheel((i+j) & 255)); } pixels.show(); delay(80); } break; case 3: // Zmeyka1 for(i=0; i<48; i++) { pixels.setPixelColor(sine2[i], pixels.Color(0, 0, 0)); for (byte j=0; j<8; j++){ pixels.setPixelColor(sine2[(j+i+1)%48], Wheel((i+j) & 255)); //random RGB color value } pixels.show(); delay(80); } break; case 4: // Zmeyka2 for(i=0; i<48; i++) { pixels.setPixelColor(sine1[i], pixels.Color(0, 0, 0)); for (byte j=0; j<8; j++){ pixels.setPixelColor(sine1[(j+i+1)%48], Wheel((i+j) & 255)); //random RGB color value } pixels.show(); delay(80); } break; case 5: // rainbowCycle for(j=0; j<256; j++) { // 5 cycles of all colors on wheel for(i=0; i<24; i++) { pixels.setPixelColor(i, Wheel(((i * 256 / pixels.numPixels()) + j) & 255)); pixels.setPixelColor(47-i, Wheel(((i * 256 / pixels.numPixels()) + j) & 255)); } pixels.show(); delay(80); } break; } t = millis(); if((t - prevTime) > 8000) { // Каждые< 8 seconds... mode++; // Следующий уровень if(mode > 5) { // Если последний уровень mode = 0; // Уровни сначала color >>= 8; // Следующий цвет R->G->B if(!color) color = 0xFF0000; // Сброс на красный } for(i=0; i<48; i++) pixels.setPixelColor(i, 0); prevTime = t; } } // 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) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3); } else if(WheelPos < 170) { WheelPos -= 85; return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3); } else { WheelPos -= 170; return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } }