Выбор действий одной кнопкой
- Войдите на сайт для отправки комментариев
Здраствуйте. Помогите отладить скетч.
Управление свеодиодной лентой.
1 - Почемуто нестабильно работает кнопка.
2 - Пока не закончится подпрограмма (Leds_x), нет реакци на кнопку.
Нужно так чтобы в момент нажатия кнопки прогама переходила к соответствующей подпрограмме, переывая роботу прежней.
//LEDS_0(); // Вся лінійка вимкнена
//LEDS_1(); // Ліва/Права сторона (лінійка 0 і 3) світяться білим
//LEDS_2(); // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають білим
//LEDS_3(); // Ліва/Права сторона (лінійка 0 і 3) разом моргають білим
//LEDS_4(); // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають синім і червоним
//LEDS_5(); // Ліва/Права сторона (лінійка 0 і 3) разом моргають ЖОВТИМ
//LEDS_6(); // Вся лінійка моргає білим, стробоскоп
//LEDS_7(); // Вся одночасно лінійка переливається різними кольрами
//LEDS_8(); // Червоний кусочок бігає туди-сюди
#include <Adafruit_NeoPixel.h>
#define LED_PIN 11 // Вихід на свєтодіоди
#define KEY_PIN 2 // Кнопка
#define NUM_LEDS 144 // Кількість діодів на всі лінійці
#define STICK_NUM 4 // Кількість сборок
#define PIXEL_IN_STICK 36 // Кількість свєтодіодів в зборці
#define PIXEL_NUM (STICK_NUM * PIXEL_IN_STICK) // 4 х 36 = 144
boolean lastButton=LOW;
boolean currentButton=LOW;
int ledMode=0;
int d = 500; // Час затримки
int StickNum_0 = 0; // Порядковий номер сборки 1
int StickNum_1 = 1; // Порядковий номер сборки 2
int StickNum_2 = 2; // Порядковий номер сборки 3
int StickNum_3 = 3; // Порядковий номер сборки 4
int val=9;
//int val;
int state;
int c;
// Змінні для LEDS_6(); // Вся лінійка моргає білим, стробоскоп
byte red_6=255;
byte green_6=255;
byte blue_6=255;
int StrobeCount_6=10;
int FlashDelay_6=50;
int EndPause_6=1000;
/*
// Змінні для LEDS_6(); // Вся лінійка моргає жовтим, стробоскоп
byte red_6=255; //0xff
byte green_6=199; //0x77
byte blue_6=0; //0x00
int StrobeCount_6=10; //10
int FlashDelay_6=100; //100
int EndPause_6=1000; //1000
*/
// Змінні для LEDS_8(); // Червоний кусочок бігає туди-сюди
byte red_8=0; //255
byte green_8=0; // 0
byte blue_8=255; //0
int EyeSize_8=20;
int SpeedDelay_8=1;
int ReturnDelay_8=50;
byte red_81=255; //255
byte green_81=0; // 0
byte blue_81=255; //0
Adafruit_NeoPixel LEDS = Adafruit_NeoPixel(PIXEL_NUM, LED_PIN, NEO_GRB + NEO_KHZ800);
//----------------------------------------
void setup()
{
pinMode(KEY_PIN, INPUT_PULLUP);
digitalWrite(KEY_PIN, HIGH);
attachInterrupt(0, pinChange, CHANGE);
Serial.begin(9600);
LEDS.begin();
LEDS.show();
Serial.println("Open");
}
//----------------------------------------
/*
boolean debounce(boolean last)
{
boolean current = digitalRead(KEY_PIN);
if (last != current)
{
delay(5);
//Serial.println(delay);
current = digitalRead(KEY_PIN);
return current;
}
}
//----------------------------------------
void setMode(int mode)
{
switch (mode)
{
case 0:
//LEDS_0();
break;
case 1:
LEDS_1();
break;
case 2:
LEDS_2();
break;
case 3:
LEDS_3();
break;
case 4:
LEDS_4();
break;
case 5:
LEDS_5();
break;
case 6:
LEDS_6();
break;
case 7:
LEDS_7();
break;
case 8:
LEDS_8();
break;
case 9:
//LEDS_9();
break;
case 10:
//LEDS_10();
break;
case 11:
//LEDS_11();
break;
case 12:
//LEDS_12();
break;
}
}
//----------------------------------------
void loop()
{
currentButton=debounce(lastButton);
if (lastButton==LOW && currentButton==HIGH)
{
ledMode++;
}
lastButton=currentButton;
if (ledMode == 13)
{
ledMode=0;
//Serial.println(0);
}
//pinChange();
setMode(ledMode);
Serial.println(ledMode);
Serial.println();
}
*/
//----------------------------------------
void loop()
{
//pinChange();
Serial.println("loop");
/*
state = digitalRead(KEY_PIN);
if (state == HIGH && c == 0) // нажали кнопку
{
c = 1;
}
if (state == LOW && c == 1) // отпустили кнопку
{
val = ++val;
if (val == 12)
{
val = 0;
}
c = 0;
}
// ======= Вполняем задачу при выборе режима =======
Serial.print("-");
Serial.println(val);
*/
//-----------
if (val == 0)
{
LEDS_0();
Serial.println("led_0");
}
//-----------
if (val == 1)
{
LEDS_1();
Serial.println("led_1");
}
//-----------
if (val == 2)
{
LEDS_2();
Serial.println("led_2");
}
//-----------
if (val == 3)
{
LEDS_3();
Serial.println("led_3");
}
//-----------
if (val == 4)
{
LEDS_4();
Serial.println("led_4");
}
//-----------
if (val == 5)
{
LEDS_5();
Serial.println("led_5");
}
//-----------
if (val == 6)
{
LEDS_6();
Serial.println("led_6");
}
//-----------
if (val == 7)
{
LEDS_7();
Serial.println("led_7");
}
//-----------
if (val == 8)
{
LEDS_8();
Serial.println("led_8");
}
//-----------
if (val == 9)
{
LEDS_9();
Serial.println("led_9");
}
//-----------
if (val == 10)
{
//LEDS_10();
//Serial.println("led_10");
}
//-----------
if (val == 11)
{
//LEDS_11();
//Serial.println("led_11");
}
//-----------
if (val == 12)
{
//LEDS_2();
//Serial.println("led_12");
}
//-----------
delay(10);
}
//----------------------------------------
void pinChange()
{
state = digitalRead(KEY_PIN);
if (state == HIGH && c == 0) // нажали кнопку
{
c = 1;
}
if (state == LOW && c == 1) // отпустили кнопку
{
val = ++val;
if (val == 12)
{
val = 0;
}
c = 0;
}
Serial.println("+*- ");
//delay(3000);
Serial.print("+ ");
Serial.println(val);
// **********************************
// ======= Вполняем задачу при выборе режима =======
/*
//-----------
if (val == 0)
{
LEDS_0();
Serial.println("led_0");
}
//-----------
if (val == 1)
{
LEDS_1();
Serial.println("led_1");
}
//-----------
if (val == 2)
{
LEDS_2();
Serial.println("led_2");
}
//-----------
if (val == 3)
{
LEDS_3();
Serial.println("led_3");
}
//-----------
if (val == 4)
{
LEDS_4();
Serial.println("led_4");
}
//-----------
if (val == 5)
{
LEDS_5();
Serial.println("led_5");
}
//-----------
if (val == 6)
{
//LEDS_6();
Serial.println("led_6");
}
//-----------
if (val == 7)
{
//LEDS_7();
Serial.println("led_7");
}
//-----------
if (val == 8)
{
//LEDS_8();
Serial.println("led_8");
}
//-----------
if (val == 9)
{
//LEDS_9();
//Serial.println("led_9");
}
//-----------
if (val == 10)
{
//LEDS_10();
//Serial.println("led_10");
}
//-----------
if (val == 11)
{
//LEDS_11();
//Serial.println("led_11");
}
//-----------
if (val == 12)
{
//LEDS_2();
//Serial.println("led_12");
}
//-----------
delay(10);
// **********************************
*/
}
//----------------------------------------
void LEDS_0() // Вся лінійка вимкнена
{
//Serial.println("LEDS_0");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0);
LEDS.show();
}
//----------------------------------------
void LEDS_1() // Ліва/Права сторона (лінійка 0 і 3) світяться білим
{
//Serial.println("LEDS_1");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255);
LEDS.show();
}
//----------------------------------------
void LEDS_2() // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають білим
{
//Serial.println("LEDS_2");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0);
LEDS.show();
}
//----------------------------------------
void LEDS_3() // Ліва/Права сторона (лінійка 0 і 3) разом моргають білим
{
//Serial.println("LEDS_3");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255);
LEDS.show();
}
//----------------------------------------
void LEDS_4() // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають синім і червоним
{
//Serial.println("LEDS_4");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0);
LEDS.show();
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 255);//(red,green,blue)
//LEDS.setPixelColor(j, 255, 255, 255);
LEDS.show();
delay (d);
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0);
LEDS.show();
}
//----------------------------------------
void LEDS_5() // Ліва/Права сторона (лінійка 0 і 3) разом моргають ЖОВТИМ
{
//Serial.println("LEDS_5");
LEDS.show();
byte StartPixel = StickNum_0 * PIXEL_IN_STICK;
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 0);
LEDS.show();
byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK;
for (byte j = StartPixel_1; j < (StartPixel_1 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 0); //(red,green,blue)
LEDS.show();
delay (d);
for (byte j = StartPixel_1; j < (StartPixel_1 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0);
LEDS.show();
}
//----------------------------------------
void LEDS_6() // Вся лінійка моргає білим, стробоскоп
{
//Serial.println("LEDS_6");
for(int j = 0; j < StrobeCount_6; j++) {
setAll_6(red_6,green_6,blue_6);
showStrip_6();
delay(FlashDelay_6);
setAll_6(0,0,0);
showStrip_6();
delay(FlashDelay_6);
}
delay(EndPause_6);
}
//----------------------------------------
void LEDS_7() // Вся одночасно лінійка переливається різними кольрами
{
//Serial.println("LEDS_7");
for(int j = 0; j < 3; j++ ) {
// Fade IN
for(int k = 0; k < 256; k++) {
switch(j) {
case 0: setAll_6(k,0,0); break;
case 1: setAll_6(0,k,0); break;
case 2: setAll_6(0,0,k); break;
}
showStrip_6();
delay(3);
}
// Fade OUT
for(int k = 255; k >= 0; k--) {
switch(j) {
case 0: setAll_6(k,0,0); break;
case 1: setAll_6(0,k,0); break;
case 2: setAll_6(0,0,k); break;
}
showStrip_6();
delay(3);
}
}
}
//----------------------------------------
void LEDS_8() // Червоний кусочок бігає туди-сюди
{
//Serial.println("LEDS_8");
for(int i = 0; i < NUM_LEDS-EyeSize_8-2; i++) {
setAll_6(0,0,0);
setPixel_6(i, red_8/10, green_8/10, blue_8/10);
for(int j = 1; j <= EyeSize_8; j++) {
//setPixel(i+j, red, green, blue);
setPixel_6(i+j, red_8, green_8, blue_8);
}
setPixel_6(i+EyeSize_8+1, red_8/10, green_8/10, blue_8/10);
showStrip_6();
delay(SpeedDelay_8);
}
delay(ReturnDelay_8);
for(int i = NUM_LEDS-EyeSize_8-2; i > 0; i--) {
setAll_6(0,0,0);
setPixel_6(i, red_81/10, green_81/10, blue_81/10);
for(int j = 1; j <= EyeSize_8; j++) {
setPixel_6(i+j, red_81, green_81, blue_81);
}
setPixel_6(i+EyeSize_8+1, red_81/10, green_81/10, blue_81/10);
showStrip_6();
delay(SpeedDelay_8);
}
delay(ReturnDelay_8);
}
//----------------------------------------
/*
void LEDS_9() // Ліва/Права сторона (лінійка 0 і 3) світяться білим
{
//Serial.println("LEDS_99");
LEDS.show();
byte StartPixel_0 = StickNum_0 * PIXEL_IN_STICK;
byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK;
byte StartPixel_2 = StickNum_2 * PIXEL_IN_STICK;
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
for (byte i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (byte j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (byte i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
for (byte j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
}
*/
//----------------------------------------
void LEDS_9() // Ліва/Права сторона (лінійка 0 і 3) світяться білим
{
//Serial.println("LEDS_99");
LEDS.show();
byte StartPixel_0 = StickNum_0 * PIXEL_IN_STICK;
byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK;
byte StartPixel_2 = StickNum_2 * PIXEL_IN_STICK;
byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK;
byte j;
byte i;
//LEDS.show();
for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
for (i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue)
for (j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue)
LEDS.show();
delay (d);
for (i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++)
LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue)
for (j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++)
LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue)
LEDS.show();
}
//----------------------------------------
//////////// ----------------------------////////////
void showStrip_6()
{
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
LEDS.show();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show();
#endif
}
void setPixel_6(int Pixel, byte red, byte green, byte blue)
{
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
LEDS.setPixelColor(Pixel, LEDS.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_6(byte red, byte green, byte blue)
{
for(int i = 0; i < NUM_LEDS; i++ ) {
setPixel_6(i, red, green, blue);
}
showStrip_6();
}
//////////// ----------------------------////////////
Понятия не имею как можнео испольвать millis() в этом коде.
Переключение одной кнопкой millis() работает.
Извините, новачок.
Прошу прощения за копию скетча, не научился еще выкладывать //LEDS_0(); // Вся лінійка вимкнена //LEDS_1(); // Ліва/Права сторона (лінійка 0 і 3) світяться білим //LEDS_2(); // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають білим //LEDS_3(); // Ліва/Права сторона (лінійка 0 і 3) разом моргають білим //LEDS_4(); // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають синім і червоним //LEDS_5(); // Ліва/Права сторона (лінійка 0 і 3) разом моргають ЖОВТИМ //LEDS_6(); // Вся лінійка моргає білим, стробоскоп //LEDS_7(); // Вся одночасно лінійка переливається різними кольрами //LEDS_8(); // Червоний кусочок бігає туди-сюди #include <Adafruit_NeoPixel.h> #define LED_PIN 11 // Вихід на свєтодіоди #define KEY_PIN 2 // Кнопка #define NUM_LEDS 144 // Кількість діодів на всі лінійці #define STICK_NUM 4 // Кількість сборок #define PIXEL_IN_STICK 36 // Кількість свєтодіодів в зборці #define PIXEL_NUM (STICK_NUM * PIXEL_IN_STICK) // 4 х 36 = 144 boolean lastButton=LOW; boolean currentButton=LOW; int ledMode=0; int d = 500; // Час затримки int StickNum_0 = 0; // Порядковий номер сборки 1 int StickNum_1 = 1; // Порядковий номер сборки 2 int StickNum_2 = 2; // Порядковий номер сборки 3 int StickNum_3 = 3; // Порядковий номер сборки 4 int val=9; //int val; int state; int c; // Змінні для LEDS_6(); // Вся лінійка моргає білим, стробоскоп byte red_6=255; byte green_6=255; byte blue_6=255; int StrobeCount_6=10; int FlashDelay_6=50; int EndPause_6=1000; /* // Змінні для LEDS_6(); // Вся лінійка моргає жовтим, стробоскоп byte red_6=255; //0xff byte green_6=199; //0x77 byte blue_6=0; //0x00 int StrobeCount_6=10; //10 int FlashDelay_6=100; //100 int EndPause_6=1000; //1000 */ // Змінні для LEDS_8(); // Червоний кусочок бігає туди-сюди byte red_8=0; //255 byte green_8=0; // 0 byte blue_8=255; //0 int EyeSize_8=20; int SpeedDelay_8=1; int ReturnDelay_8=50; byte red_81=255; //255 byte green_81=0; // 0 byte blue_81=255; //0 Adafruit_NeoPixel LEDS = Adafruit_NeoPixel(PIXEL_NUM, LED_PIN, NEO_GRB + NEO_KHZ800); //---------------------------------------- void setup() { pinMode(KEY_PIN, INPUT_PULLUP); digitalWrite(KEY_PIN, HIGH); attachInterrupt(0, pinChange, CHANGE); Serial.begin(9600); LEDS.begin(); LEDS.show(); Serial.println("Open"); } //---------------------------------------- /* boolean debounce(boolean last) { boolean current = digitalRead(KEY_PIN); if (last != current) { delay(5); //Serial.println(delay); current = digitalRead(KEY_PIN); return current; } } //---------------------------------------- void setMode(int mode) { switch (mode) { case 0: //LEDS_0(); break; case 1: LEDS_1(); break; case 2: LEDS_2(); break; case 3: LEDS_3(); break; case 4: LEDS_4(); break; case 5: LEDS_5(); break; case 6: LEDS_6(); break; case 7: LEDS_7(); break; case 8: LEDS_8(); break; case 9: //LEDS_9(); break; case 10: //LEDS_10(); break; case 11: //LEDS_11(); break; case 12: //LEDS_12(); break; } } //---------------------------------------- void loop() { currentButton=debounce(lastButton); if (lastButton==LOW && currentButton==HIGH) { ledMode++; } lastButton=currentButton; if (ledMode == 13) { ledMode=0; //Serial.println(0); } //pinChange(); setMode(ledMode); Serial.println(ledMode); Serial.println(); } */ //---------------------------------------- void loop() { //pinChange(); Serial.println("loop"); /* state = digitalRead(KEY_PIN); if (state == HIGH && c == 0) // нажали кнопку { c = 1; } if (state == LOW && c == 1) // отпустили кнопку { val = ++val; if (val == 12) { val = 0; } c = 0; } // ======= Вполняем задачу при выборе режима ======= Serial.print("-"); Serial.println(val); */ //----------- if (val == 0) { LEDS_0(); Serial.println("led_0"); } //----------- if (val == 1) { LEDS_1(); Serial.println("led_1"); } //----------- if (val == 2) { LEDS_2(); Serial.println("led_2"); } //----------- if (val == 3) { LEDS_3(); Serial.println("led_3"); } //----------- if (val == 4) { LEDS_4(); Serial.println("led_4"); } //----------- if (val == 5) { LEDS_5(); Serial.println("led_5"); } //----------- if (val == 6) { LEDS_6(); Serial.println("led_6"); } //----------- if (val == 7) { LEDS_7(); Serial.println("led_7"); } //----------- if (val == 8) { LEDS_8(); Serial.println("led_8"); } //----------- if (val == 9) { LEDS_9(); Serial.println("led_9"); } //----------- if (val == 10) { //LEDS_10(); //Serial.println("led_10"); } //----------- if (val == 11) { //LEDS_11(); //Serial.println("led_11"); } //----------- if (val == 12) { //LEDS_2(); //Serial.println("led_12"); } //----------- delay(10); } //---------------------------------------- void pinChange() { state = digitalRead(KEY_PIN); if (state == HIGH && c == 0) // нажали кнопку { c = 1; } if (state == LOW && c == 1) // отпустили кнопку { val = ++val; if (val == 12) { val = 0; } c = 0; } Serial.println("+*- "); //delay(3000); Serial.print("+ "); Serial.println(val); // ********************************** // ======= Вполняем задачу при выборе режима ======= /* //----------- if (val == 0) { LEDS_0(); Serial.println("led_0"); } //----------- if (val == 1) { LEDS_1(); Serial.println("led_1"); } //----------- if (val == 2) { LEDS_2(); Serial.println("led_2"); } //----------- if (val == 3) { LEDS_3(); Serial.println("led_3"); } //----------- if (val == 4) { LEDS_4(); Serial.println("led_4"); } //----------- if (val == 5) { LEDS_5(); Serial.println("led_5"); } //----------- if (val == 6) { //LEDS_6(); Serial.println("led_6"); } //----------- if (val == 7) { //LEDS_7(); Serial.println("led_7"); } //----------- if (val == 8) { //LEDS_8(); Serial.println("led_8"); } //----------- if (val == 9) { //LEDS_9(); //Serial.println("led_9"); } //----------- if (val == 10) { //LEDS_10(); //Serial.println("led_10"); } //----------- if (val == 11) { //LEDS_11(); //Serial.println("led_11"); } //----------- if (val == 12) { //LEDS_2(); //Serial.println("led_12"); } //----------- delay(10); // ********************************** */ } //---------------------------------------- void LEDS_0() // Вся лінійка вимкнена { //Serial.println("LEDS_0"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); LEDS.show(); } //---------------------------------------- void LEDS_1() // Ліва/Права сторона (лінійка 0 і 3) світяться білим { //Serial.println("LEDS_1"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); LEDS.show(); } //---------------------------------------- void LEDS_2() // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають білим { //Serial.println("LEDS_2"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); LEDS.show(); } //---------------------------------------- void LEDS_3() // Ліва/Права сторона (лінійка 0 і 3) разом моргають білим { //Serial.println("LEDS_3"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); LEDS.show(); } //---------------------------------------- void LEDS_4() // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають синім і червоним { //Serial.println("LEDS_4"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 255);//(red,green,blue) //LEDS.setPixelColor(j, 255, 255, 255); LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); LEDS.show(); } //---------------------------------------- void LEDS_5() // Ліва/Права сторона (лінійка 0 і 3) разом моргають ЖОВТИМ { //Serial.println("LEDS_5"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 0); LEDS.show(); byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK; for (byte j = StartPixel_1; j < (StartPixel_1 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_1; j < (StartPixel_1 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); LEDS.show(); } //---------------------------------------- void LEDS_6() // Вся лінійка моргає білим, стробоскоп { //Serial.println("LEDS_6"); for(int j = 0; j < StrobeCount_6; j++) { setAll_6(red_6,green_6,blue_6); showStrip_6(); delay(FlashDelay_6); setAll_6(0,0,0); showStrip_6(); delay(FlashDelay_6); } delay(EndPause_6); } //---------------------------------------- void LEDS_7() // Вся одночасно лінійка переливається різними кольрами { //Serial.println("LEDS_7"); for(int j = 0; j < 3; j++ ) { // Fade IN for(int k = 0; k < 256; k++) { switch(j) { case 0: setAll_6(k,0,0); break; case 1: setAll_6(0,k,0); break; case 2: setAll_6(0,0,k); break; } showStrip_6(); delay(3); } // Fade OUT for(int k = 255; k >= 0; k--) { switch(j) { case 0: setAll_6(k,0,0); break; case 1: setAll_6(0,k,0); break; case 2: setAll_6(0,0,k); break; } showStrip_6(); delay(3); } } } //---------------------------------------- void LEDS_8() // Червоний кусочок бігає туди-сюди { //Serial.println("LEDS_8"); for(int i = 0; i < NUM_LEDS-EyeSize_8-2; i++) { setAll_6(0,0,0); setPixel_6(i, red_8/10, green_8/10, blue_8/10); for(int j = 1; j <= EyeSize_8; j++) { //setPixel(i+j, red, green, blue); setPixel_6(i+j, red_8, green_8, blue_8); } setPixel_6(i+EyeSize_8+1, red_8/10, green_8/10, blue_8/10); showStrip_6(); delay(SpeedDelay_8); } delay(ReturnDelay_8); for(int i = NUM_LEDS-EyeSize_8-2; i > 0; i--) { setAll_6(0,0,0); setPixel_6(i, red_81/10, green_81/10, blue_81/10); for(int j = 1; j <= EyeSize_8; j++) { setPixel_6(i+j, red_81, green_81, blue_81); } setPixel_6(i+EyeSize_8+1, red_81/10, green_81/10, blue_81/10); showStrip_6(); delay(SpeedDelay_8); } delay(ReturnDelay_8); } //---------------------------------------- /* void LEDS_9() // Ліва/Права сторона (лінійка 0 і 3) світяться білим { //Serial.println("LEDS_99"); LEDS.show(); byte StartPixel_0 = StickNum_0 * PIXEL_IN_STICK; byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK; byte StartPixel_2 = StickNum_2 * PIXEL_IN_STICK; byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); for (byte i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) for (byte j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) for (byte j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); } */ //---------------------------------------- void LEDS_9() // Ліва/Права сторона (лінійка 0 і 3) світяться білим { //Serial.println("LEDS_99"); LEDS.show(); byte StartPixel_0 = StickNum_0 * PIXEL_IN_STICK; byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK; byte StartPixel_2 = StickNum_2 * PIXEL_IN_STICK; byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; byte j; byte i; //LEDS.show(); for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); for (i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) for (j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) for (j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); } //---------------------------------------- //////////// ----------------------------//////////// void showStrip_6() { #ifdef ADAFRUIT_NEOPIXEL_H // NeoPixel LEDS.show(); #endif #ifndef ADAFRUIT_NEOPIXEL_H // FastLED FastLED.show(); #endif } void setPixel_6(int Pixel, byte red, byte green, byte blue) { #ifdef ADAFRUIT_NEOPIXEL_H // NeoPixel LEDS.setPixelColor(Pixel, LEDS.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_6(byte red, byte green, byte blue) { for(int i = 0; i < NUM_LEDS; i++ ) { setPixel_6(i, red, green, blue); } showStrip_6(); } //////////// ----------------------------////////////// delay (d);
Разные варианты, лишне закомментировано.
У Вас нажатие кнопки происходит в прерывании, это надо исполизовать. Посмотрите пример ниже где это используется для 2х val=0 и =1 Если подойдет остальное напишете сами, только прочитайте коментарий
int val = 9; int temp_val = val; // Создаем дополнительную переменную temp_val void loop(){ if (val == 0) { temp_val = val;//В каждой "if (val == ?)присваюем значение temp_val = val;" LEDS_0(); Serial.println("led_0"); } //----------- if (val == 1) { temp_val = val;////В каждой "if (val == ?)присваюем значение temp_val = val;" LEDS_1(); Serial.println("led_1"); } } void LEDS_0() // Вся лінійка вимкнена { //Serial.println("LEDS_0"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) /////////////////////// //В каждом цыкле проверяем сменился ли "val" в прерывании и если да то выходим из цыкла if(val != temp_val)return; ///////////////////////////// LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) ///////////////////// //В каждом цыкле проверяем сменился ли "val" в прерывании и если да то выходим из цыкла if(val != temp_val)return; /////////////////////////////// LEDS.setPixelColor(i, 0, 0, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) /////////////// //В каждом цыкле проверяем сменился ли "val" в прерывании и если да то выходим из цыкла if(val != temp_val)return; ///////////////////// LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3 j < (StartPixel_3 + PIXEL_IN_STICK); j++) ////////////////////// //В каждом цыкле проверяем сменился ли "val" в прерывании и если да то выходим из цыкла if(val != temp_val)return; //////////////////// LEDS.setPixelColor(j, 0, 0, 0); LEDS.show(); } //---------------------------------------- void LEDS_1() // Ліва/Права сторона (лінійка 0 і 3) світяться білим { //Serial.println("LEDS_1"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) ///////////////// //В каждом цыкле проверяем сменился ли "val" в прерывании и если да то выходим из цыкла if(val != temp_val)return; ////////////////////////// LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) //////////////// //В каждом цыкле проверяем сменился ли "val" в прерывании и если да то выходим из цыкла if(val != temp_val)return; /////////////////////// LEDS.setPixelColor(i, 255, 255, 255); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) ////////////// //В каждом цыкле проверяем сменился ли "val" в прерывании и если да то выходим из цыкла if(val != temp_val)return; ////////////////////// LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) ////////////////// //В каждом цыкле проверяем сменился ли "val" в прерывании и если да то выходим из цыкла if(val != temp_val)return; ////////////////////// LEDS.setPixelColor(j, 255, 255, 255); LEDS.show(); }Код написан на Даун-Си. А это значит, что он уже глючен уже в задумке. Глубоко изучай Си и Си++, иначе вы врят ли чего-то полезное напишете.
Спасбо, за посказку, пока работает.
Только в ЛЕД_8 не всегда віходит из подпрограмми.
Вопрост про кнопку, неуспеешь дотронутся как нажимается, как будто реагирует на дребезг, проскакует на один-два шага в перед. Как использовать millis() в даном скетче?
void LEDS_8() // Червоний кусочок бігає туди-сюди { //Serial.println("LEDS_8"); for(int i = 0; i < NUM_LEDS-EyeSize_8-2; i++) { if(val != temp_val)return; setAll_6(0,0,0); setPixel_6(i, red_8/10, green_8/10, blue_8/10); for(int j = 1; j <= EyeSize_8; j++) { if(val != temp_val)return; //setPixel(i+j, red, green, blue); setPixel_6(i+j, red_8, green_8, blue_8); } setPixel_6(i+EyeSize_8+1, red_8/10, green_8/10, blue_8/10); showStrip_6(); delay(SpeedDelay_8); } delay(ReturnDelay_8); for(int i = NUM_LEDS-EyeSize_8-2; i > 0; i--) { if(val != temp_val)return; setAll_6(0,0,0); setPixel_6(i, red_81/10, green_81/10, blue_81/10); for(int j = 1; j <= EyeSize_8; j++) { if(val != temp_val)return; setPixel_6(i+j, red_81, green_81, blue_81); } setPixel_6(i+EyeSize_8+1, red_81/10, green_81/10, blue_81/10); showStrip_6(); delay(SpeedDelay_8); } delay(ReturnDelay_8); }//LEDS_0(); // Вся лінійка вимкнена //LEDS_1(); // Ліва/Права сторона (лінійка 0 і 3) світяться білим //LEDS_2(); // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають білим //LEDS_3(); // Ліва/Права сторона (лінійка 0 і 3) разом моргають білим //LEDS_4(); // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають синім і червоним //LEDS_5(); // Ліва/Права сторона (лінійка 0 і 3) разом моргають ЖОВТИМ //LEDS_6(); // Вся лінійка моргає білим, стробоскоп //LEDS_7(); // Вся одночасно лінійка переливається різними кольрами //LEDS_8(); // Червоний кусочок бігає туди-сюди #include <Adafruit_NeoPixel.h> #define LED_PIN 11 // Вихід на свєтодіоди #define KEY_PIN 2 // Кнопка #define NUM_LEDS 144 // Кількість діодів на всі лінійці #define STICK_NUM 4 // Кількість сборок #define PIXEL_IN_STICK 36 // Кількість свєтодіодів в зборці #define PIXEL_NUM (STICK_NUM * PIXEL_IN_STICK) // 4 х 36 = 144 boolean lastButton=LOW; boolean currentButton=LOW; int ledMode=0; int d = 500; // Час затримки int StickNum_0 = 0; // Порядковий номер сборки 1 int StickNum_1 = 1; // Порядковий номер сборки 2 int StickNum_2 = 2; // Порядковий номер сборки 3 int StickNum_3 = 3; // Порядковий номер сборки 4 //int val=9; int val; int temp_val = val; int state; int c; // Змінні для LEDS_6(); // Вся лінійка моргає білим, стробоскоп byte red_6=255; byte green_6=255; byte blue_6=255; int StrobeCount_6=10; int FlashDelay_6=50; int EndPause_6=1000; /* // Змінні для LEDS_6(); // Вся лінійка моргає жовтим, стробоскоп byte red_6=255; //0xff byte green_6=199; //0x77 byte blue_6=0; //0x00 int StrobeCount_6=10; //10 int FlashDelay_6=100; //100 int EndPause_6=1000; //1000 */ // Змінні для LEDS_8(); // Червоний кусочок бігає туди-сюди byte red_8=0; //255 byte green_8=0; // 0 byte blue_8=255; //0 int EyeSize_8=20; int SpeedDelay_8=1; int ReturnDelay_8=50; byte red_81=255; //255 byte green_81=0; // 0 byte blue_81=255; //0 Adafruit_NeoPixel LEDS = Adafruit_NeoPixel(PIXEL_NUM, LED_PIN, NEO_GRB + NEO_KHZ800); //---------------------------------------- void setup() { pinMode(KEY_PIN, INPUT_PULLUP); digitalWrite(KEY_PIN, HIGH); attachInterrupt(0, pinChange, CHANGE); Serial.begin(9600); LEDS.begin(); LEDS.show(); Serial.println("Open"); } //---------------------------------------- void loop() { Serial.println("loop"); //----------- if (val == 0) { temp_val = val; LEDS_0(); Serial.println("led_0"); } //----------- if (val == 1) { temp_val = val; LEDS_1(); Serial.println("led_1"); } //----------- if (val == 2) { temp_val = val; LEDS_2(); Serial.println("led_2"); } //----------- if (val == 3) { temp_val = val; LEDS_3(); Serial.println("led_3"); } //----------- if (val == 4) { temp_val = val; LEDS_4(); Serial.println("led_4"); } //----------- if (val == 5) { temp_val = val; LEDS_5(); Serial.println("led_5"); } //----------- if (val == 6) { temp_val = val; LEDS_6(); Serial.println("led_6"); } //----------- if (val == 7) { temp_val = val; LEDS_7(); Serial.println("led_7"); } //----------- if (val == 8) { temp_val = val; LEDS_8(); Serial.println("led_8"); } //----------- if (val == 9) { temp_val = val; LEDS_9(); Serial.println("led_9"); } //----------- if (val == 10) { //LEDS_10(); //Serial.println("led_10"); } //----------- if (val == 11) { //LEDS_11(); //Serial.println("led_11"); } //----------- if (val == 12) { //LEDS_2(); //Serial.println("led_12"); } //----------- delay(10); } //---------------------------------------- void pinChange() { state = digitalRead(KEY_PIN); if (state == HIGH && c == 0) // нажали кнопку { c = 1; } if (state == LOW && c == 1) // отпустили кнопку { val = ++val; if (val == 10) { val = 0; } c = 0; } Serial.println("+*- "); //delay(3000); Serial.print("+ "); Serial.println(val); // ********************************** // ======= Вполняем задачу при выборе режима ======= } //---------------------------------------- void LEDS_0() // Вся лінійка вимкнена { //Serial.println("LEDS_0"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); LEDS.show(); } //---------------------------------------- void LEDS_1() // Ліва/Права сторона (лінійка 0 і 3) світяться білим { //Serial.println("LEDS_1"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); LEDS.show(); } //---------------------------------------- void LEDS_2() // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають білим { //Serial.println("LEDS_2"); LEDS.show(); byte StartPixel_0 = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) if(val != temp_val)return LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) if(val != temp_val)return LEDS.setPixelColor(i, 0, 0, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) if(val != temp_val)return LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) if(val != temp_val)return LEDS.setPixelColor(j, 0, 0, 0); LEDS.show(); } //---------------------------------------- void LEDS_3() // Ліва/Права сторона (лінійка 0 і 3) разом моргають білим { //Serial.println("LEDS_3"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); LEDS.show(); } //---------------------------------------- void LEDS_4() // Ліва/Права сторона (лінійка 0 і 3) по-очереді моргають синім і червоним { //Serial.println("LEDS_4"); LEDS.show(); byte StartPixel = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel; i < (StartPixel + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 255);//(red,green,blue) //LEDS.setPixelColor(j, 255, 255, 255); LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); LEDS.show(); } //---------------------------------------- void LEDS_5() // Ліва/Права сторона (лінійка 0 і 3) разом моргають ЖОВТИМ { //Serial.println("LEDS_5"); LEDS.show(); byte StartPixel_0 = StickNum_0 * PIXEL_IN_STICK; for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 0); LEDS.show(); byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 0); //(red,green,blue) LEDS.show(); delay (d); for (byte j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); LEDS.show(); } //---------------------------------------- void LEDS_6() // Вся лінійка моргає білим, стробоскоп { //Serial.println("LEDS_6"); for(int j = 0; j < StrobeCount_6; j++) { setAll_6(red_6,green_6,blue_6); showStrip_6(); delay(FlashDelay_6); setAll_6(0,0,0); showStrip_6(); delay(FlashDelay_6); } delay(EndPause_6); } //---------------------------------------- void LEDS_7() // Вся одночасно лінійка переливається різними кольрами { //Serial.println("LEDS_7"); for(int j = 0; j < 3; j++ ) { // Fade IN for(int k = 0; k < 256; k++) { switch(j) { case 0: setAll_6(k,0,0); break; case 1: setAll_6(0,k,0); break; case 2: setAll_6(0,0,k); break; } showStrip_6(); delay(3); } // Fade OUT for(int k = 255; k >= 0; k--) { switch(j) { case 0: setAll_6(k,0,0); break; case 1: setAll_6(0,k,0); break; case 2: setAll_6(0,0,k); break; } showStrip_6(); delay(3); } } } //---------------------------------------- void LEDS_8() // Червоний кусочок бігає туди-сюди { //Serial.println("LEDS_8"); for(int i = 0; i < NUM_LEDS-EyeSize_8-2; i++) { if(val != temp_val)return; setAll_6(0,0,0); setPixel_6(i, red_8/10, green_8/10, blue_8/10); for(int j = 1; j <= EyeSize_8; j++) { if(val != temp_val)return; //setPixel(i+j, red, green, blue); setPixel_6(i+j, red_8, green_8, blue_8); } setPixel_6(i+EyeSize_8+1, red_8/10, green_8/10, blue_8/10); showStrip_6(); delay(SpeedDelay_8); } delay(ReturnDelay_8); for(int i = NUM_LEDS-EyeSize_8-2; i > 0; i--) { if(val != temp_val)return; setAll_6(0,0,0); setPixel_6(i, red_81/10, green_81/10, blue_81/10); for(int j = 1; j <= EyeSize_8; j++) { if(val != temp_val)return; setPixel_6(i+j, red_81, green_81, blue_81); } setPixel_6(i+EyeSize_8+1, red_81/10, green_81/10, blue_81/10); showStrip_6(); delay(SpeedDelay_8); } delay(ReturnDelay_8); } //---------------------------------------- //---------------------------------------- void LEDS_9() // Ліва/Права сторона (лінійка 0 і 3) світяться білим { //Serial.println("LEDS_99"); LEDS.show(); byte StartPixel_0 = StickNum_0 * PIXEL_IN_STICK; byte StartPixel_1 = StickNum_1 * PIXEL_IN_STICK; byte StartPixel_2 = StickNum_2 * PIXEL_IN_STICK; byte StartPixel_3 = StickNum_3 * PIXEL_IN_STICK; byte j; byte i; //LEDS.show(); for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (i = StartPixel_0; i < (StartPixel_0 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) for (j = StartPixel_3; j < (StartPixel_3 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); for (i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 255, 255, 255); //(red,green,blue) for (j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 255, 255, 255); //(red,green,blue) LEDS.show(); delay (d); for (i = StartPixel_1; i < (StartPixel_1 + PIXEL_IN_STICK); i++) LEDS.setPixelColor(i, 0, 0, 0); //(red,green,blue) for (j = StartPixel_2; j < (StartPixel_2 + PIXEL_IN_STICK); j++) LEDS.setPixelColor(j, 0, 0, 0); //(red,green,blue) LEDS.show(); } //---------------------------------------- //////////// ----------------------------//////////// void showStrip_6() { #ifdef ADAFRUIT_NEOPIXEL_H // NeoPixel LEDS.show(); #endif #ifndef ADAFRUIT_NEOPIXEL_H // FastLED FastLED.show(); #endif } void setPixel_6(int Pixel, byte red, byte green, byte blue) { #ifdef ADAFRUIT_NEOPIXEL_H // NeoPixel LEDS.setPixelColor(Pixel, LEDS.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_6(byte red, byte green, byte blue) { for(int i = 0; i < NUM_LEDS; i++ ) { if(val != temp_val)return; setPixel_6(i, red, green, blue); } showStrip_6(); } //////////// ----------------------------////////////Вот ссылка https://lesson.iarduino.ru/page/podklyuchaem-moduli-neopixel-na-baze-ws2812b-svetodiodov-k-arduino/
#include <Adafruit_NeoPixel.h> const byte Leds_pin=6; // номер порта к которому подключен модуль const byte max_led=8; // количество светодиодов Adafruit_NeoPixel pixels = Adafruit_NeoPixel(max_led, Leds_pin, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); pixels.show(); // Устанавливаем все светодиоды в состояние "Выключено" pixels.setPixelColor(0, pixels.Color(250, 150, 0)); // Назначаем для 0 светодиода цвет pixels.setPixelColor(1, pixels.Color(0, 150, 0)); // Назначаем для 1 светодиода цвет pixels.setPixelColor(2, pixels.Color(250, 150, 0)); // Назначаем для 2 светодиода цвет pixels.setPixelColor(3, pixels.Color(0, 0, 250)); // Назначаем для 3 светодиода цвет pixels.setPixelColor(4, pixels.Color(0, 150, 0)); // Назначаем для 4 светодиода цвет pixels.setPixelColor(5, pixels.Color(250, 150, 0)); // Назначаем для 5 светодиода цвет pixels.setPixelColor(6, pixels.Color(0, 0, 250)); // Назначаем для 6 светодиода цвет pixels.setPixelColor(7, pixels.Color(250, 150, 0)); // Назначаем для 7 светодиода цвет pixels.show(); } void loop() { }Вот так надо решать эту задачу. А не писать Даун-Си кодом программы, как делают некоторые.
/*ws2812 линия светодиодов -->6 кнопка режим -->2 программная подтяжка на+5В */ #include <Adafruit_NeoPixel.h> const byte Leds_pin = 6; // номер порта к которому подключен модуль const byte max_led = 8; // количество светодиодов Adafruit_NeoPixel pixels = Adafruit_NeoPixel(max_led, Leds_pin, NEO_GRB + NEO_KHZ800); byte Mode = 0; // переменая режим const byte Mode_max = 4; // режимы 0,1,2,3,4 4 это максимальный режим void (*Mode_setup)();// делаем указатель на функцию setup() void (*Mode_loop)() ;// делаем указатель на функцию loop() //--- режим 0 void Mode_0_setup() { for (byte i = 0; i < max_led; ++i) { if (i % 3 == 0)pixels.setPixelColor(i, pixels.Color(250, 0, 0)); // Назначаем для 0 светодиода цвет if (i % 3 == 1)pixels.setPixelColor(i, pixels.Color(0, 250, 0)) ; // Назначаем для 1 светодиода цвет if (i % 3 == 2)pixels.setPixelColor(i, pixels.Color(0, 0, 250)) ; // Назначаем для 2 светодиода цвет } pixels.show(); } void Mode_0_loop() { // ничего не меняется в этом режиме } //--- режим 1 void Mode_1_setup() { for (byte i = 0; i < max_led; ++i) { if (i % 3 == 0)pixels.setPixelColor(i, pixels.Color(0, 0, 250)) ; // Назначаем для 2 светодиода цвет if (i % 3 == 1)pixels.setPixelColor(i, pixels.Color(250, 0, 0)); // Назначаем для 0 светодиода цвет if (i % 3 == 2)pixels.setPixelColor(i, pixels.Color(0, 250, 0)) ; // Назначаем для 1 светодиода цвет } pixels.show(); } void Mode_1_loop() { // ничего не меняется в этом режиме } //--- режим 2 void Mode_2_setup() { for (byte i = 0; i < max_led; ++i) { if (i % 3 == 0)pixels.setPixelColor(i, pixels.Color(0, 250, 0)) ; // Назначаем для 1 светодиода цвет if (i % 3 == 1)pixels.setPixelColor(i, pixels.Color(0, 0, 250)) ; // Назначаем для 2 светодиода цвет if (i % 3 == 2)pixels.setPixelColor(i, pixels.Color(250, 0, 0)); // Назначаем для 0 светодиода цвет } pixels.show(); } void Mode_2_loop() { // ничего не меняется в этом режиме } //--- режим 3 void Mode_3_setup() { for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(0, 0, 0)) ; pixels.show(); } void Mode_3_loop() { static uint32_t past = 0; static bool j = 0; if (millis() - past > 500) { past = millis(); j = !j; for (byte i = 0; i < max_led; ++i) { if (j)pixels.setPixelColor(i, pixels.Color(250, 250, 250)); else pixels.setPixelColor(i, pixels.Color(0, 0, 0)) ; } pixels.show(); } } //--- режим 4 void Mode_4_setup() { for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(0, 0, 0)) ; pixels.show(); } void Mode_4_loop() { static uint32_t past = 0; static byte j = 0; if (millis() - past > 10) { past = millis(); ++j; for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(j, j, j)) ; pixels.show(); } } //----------------class Cl_Btn---------------------------- class Cl_Btn { byte pin ; // номер ноги на кнопке void (* Do)(); bool btn, btn_old; bool bounce_btn = 0; // антидребезговый флаг uint32_t past = 0 ; public: Cl_Btn(byte _pin, void (* _Do)()): pin(_pin), Do(_Do) {}; void setup() { pinMode(pin, INPUT_PULLUP);// подключить кнопку с подтяжкой btn = digitalRead(pin); // прочитать реальное значение на выводе}; } void loop() { if (! bounce_btn && btn != digitalRead(pin)) { // если прошел фронт изм на выводн bounce_btn = 1; // выставить флаг past = millis(); // сделать временую засветку } else if ( bounce_btn && millis() - past >= 5 ) { // если прошло антидребезговое время bounce_btn = 0; // то снять флаг btn_old = btn ; btn = digitalRead(pin) ; // прочитать реальное значение на выводе if (btn_old && ! btn) Do(); } } }; //------------------------------ void Do_Btn1() { Mode++; Serial.println(Mode); if (Mode == 1) { Mode_setup = Mode_1_setup; Mode_loop = Mode_1_loop; } else if (Mode == 2) { Mode_setup = Mode_2_setup; Mode_loop = Mode_2_loop; } else if (Mode == 3) { Mode_setup = Mode_3_setup; Mode_loop = Mode_3_loop; } else if (Mode == 4) { Mode_setup = Mode_4_setup; Mode_loop = Mode_4_loop; } else { Mode = 0; Mode_setup = Mode_0_setup; Mode_loop = Mode_0_loop; } Mode_setup(); } Cl_Btn Btn1(2 , Do_Btn1);// подключить кнопку на выв 2 void setup() { Serial.begin(9600); pixels.begin(); Do_Btn1(); Mode_setup(); Btn1.setup(); } void loop() { Mode_loop(); Btn1.loop(); }Всем спасибо. Я не волшебник, я только учусь )))
Благодарствую за помощь.
Все заработало.
Только в одна из подпрогамм не реагирует на кнопку, вошел в режим-6, режим запустился, при последующем нажатии нет реакции на кнопку.
void Mode_6_loop() { Serial.println("LEDS_66"); static uint32_t past = 0; static bool j = 0; if (millis() - past > 500) { past = millis(); j = !j; for(int j = 0; j < 10; j++) { for(int i = 0; i < 144; i++ ) { if(val != temp_val)return; pixels.setPixelColor(i, pixels.Color(red_6,green_6,blue_6)); } pixels.show(); delay(100); for(int i = 0; i < 144; i++ ) { if(val != temp_val)return; pixels.setPixelColor(i, pixels.Color(0,0,0)); } pixels.show(); delay(100); } delay(1000); } }Єто режим стробоскопа
delay(FlashDelay_6);//FlashDelay_6 = 100шо это за херня?
извините исправлю. Задержка 100мс
Єто часть кода
Насколько я понимаю проблема в задержке - delay, подскажите как сделать через milles. Спасибо
подскажите как сделать через milles. Спасибо
#392
void Mode_6_loop() { Serial.println("LEDS_66"); static uint32_t past = 0; static bool j = 0; if (millis() - past > 1000) { // длительность пакета или паузы между пакетами 1сек past = millis(); j = !j; if (!j) { static uint32_t past1 = 0; static bool j1 = 0; if (millis() - past1 > 100) { // полупериод пакета 0,1сек past = millis(); j1 = !j1; if (!j1) for (int i = 0; i < 144; i++) pixels.setPixelColor(i, pixels.Color(red_6, green_6, blue_6)); else for (int i = 0; i < 144; i++) pixels.setPixelColor(i, pixels.Color(0, 0, 0)); pixels.show(); } } } }// end Mode_6_loop()Спасибо
Немного не тот эфект получается ))).
Это требуэмый эфект - https://drive.google.com/file/d/0B6Q_8K_WZ8uuUXprUXB4TzQ0VEE/view?usp=sharing
Он работает как надо. Только не реагирует на нажатия кнопки.
Это эвект по вашему испраленому коду https://drive.google.com/file/d/0B6Q_8K_WZ8uuanRkdHRlem0wODQ/view?usp=sharing
Я понима что проблема в ДЕЛЕЙ, но никак неполучается сделать этот эфеткр на МИЛЛИС,
Спасибо, всем помогающим
Попробуйте так
void Mode_6_loop() { Serial.println("LEDS_66"); static uint32_t past = 0; static bool j = 0; if (millis() - past > 1000) { // длительность пакета или паузы между пакетами 1сек past = millis(); j = !j; } if (!j) { static uint32_t past1 = 0; static bool j1 = 0; static bool flag = 0; if (millis() - past1 > 100) { // полупериод пакета 0,1сек past = millis(); j1 = !j1; flag = j1; } if (!j1 && !flag) { for (int j = 0; j < 10; j++) { if (val != temp_val)return; for (int i = 0; i < 144; i++ ) { if (val != temp_val)return; pixels.setPixelColor(i, pixels.Color(red_6, green_6, blue_6)); } flag = !flag; } } if (j1 && flag) { for (int i = 0; i < 144; i++ ) { if (val != temp_val)return; pixels.setPixelColor(i, pixels.Color(0, 0, 0)); } flag = !flag; } pixels.show(); } }Спасибо
Неработает как надо.
Выкладываю робоччий код, только не реагтрует на кнопку во время микания, в тот момент когда линейка потушена - на кнопку реакуия есть, в тот момент когда происхордит мигание - нет реакции на кнопку.
void mode_6_loop() { Serial.println("leds_66"); // Для отладки // Змінні для Режима-6; byte red = 255; byte green = 255; byte blue = 255; int strobe_count = 10; static uint32_t past = 0; static bool j = 0; if (millis() - past > 1000) { past = millis(); j = !j; if (!j) { for(int k = 0; k < strobe_count; k++) { for(int i = 0; i < max_led; i++ ) { pixels.setPixelColor(i, pixels.Color(red,green,blue)); } pixels.show(); delay(100); for(int i = 0; i < max_led; i++ ) { pixels.setPixelColor(i, pixels.Color(0,0,0)); } pixels.show(); delay(100); } } //delay(1000); } }Весь код переписан по примеру в посте #9
По этому коду моргает линейка постоянно ,без пауз. Должно быть 10 вспышек, пауза 1 сек, и опять 10 вспышек.
void mode_6_loop() { Serial.println("leds_66"); // Для отладки // Змінні для Режима-6; byte red = 255; byte green = 255; byte blue = 255; int strobe_count = 10; static uint32_t past = 0; static bool j = 0; static bool flag = 0; if (millis() - past > 1000) { past = millis(); j = !j; } if (!j) { static uint32_t past1 = 0; static bool j1 = 0; static bool flag = 0; if (millis() - past1 > 100) { // полупериод пакета 0,1сек past = millis(); j1 = !j1; flag = j1; } if (!j1 && !flag) { for (int j = 0; j < 10; j++) for (int i = 0; i < 144; i++ ) pixels.setPixelColor(i, pixels.Color(red, green, blue)); flag = !flag; } if (j1 && flag) { for (int i = 0; i < 144; i++ ) pixels.setPixelColor(i, pixels.Color(0, 0, 0)); flag = !flag; } pixels.show(); } }в 24 строке явно должно быть past1, а не past
Кроме того, непонятно, зачем вы обьявляете flag дважды и не ясно. зачем он и куча других переменных обьявлено static - я не вижу. чтобы вы их использовали между циклами.
И еще в 30-й строке я бы заменил итератор с j на какую-то другую букву - просто чтобы не путаться
Я не профи, я только иследую ардуино, так что уж извиняйте )))) . Сейчас попобую.
Спасибо всем, этот режим-6 заработал!!!!
Режим-8. Работает как нада, но не реагирует на кнопку.
часть с 20 сведодиодов "бегает" с края в край.
void mode_8_loop() { Serial.println("leds_88"); // Для отладки // Змінні для Режима-8; byte red = 0; byte green = 0; byte blue = 255; int pixel_size = 20; for(int i = 0; i < max_led - pixel_size - 2; i++) { for(int i = 0; i < max_led; i++ ) { pixels.setPixelColor(i, pixels.Color(0, 0, 0)); } pixels.setPixelColor(i, pixels.Color(red, green, blue)); pixels.show(); for(int k = 1; k <= pixel_size; k++) { pixels.setPixelColor(i+k, pixels.Color(red, green, blue)); } pixels.setPixelColor(i + pixel_size + 1, pixels.Color(red, green, blue)); pixels.show(); delay(1); } for(int i = max_led - pixel_size - 2; i > 0; i--) { for(int i = 0; i < max_led; i++ ) { pixels.setPixelColor(i, pixels.Color(0, 0, 0)); } pixels.setPixelColor(i, pixels.Color(red, green, blue)); pixels.show(); for(int k = 1; k <= pixel_size; k++) { pixels.setPixelColor(i+k, pixels.Color(red, green, blue)); } pixels.setPixelColor(i + pixel_size + 1, pixels.Color(red, green, blue)); pixels.show(); delay(1); } }И по режиму-6, все заработало, только между вспышками, не тухнет вся линейка, а горит. Работает так - 10 вспышек, и гори 1 сек, и опять 10 вспышек, нужно - 10 вспышек и ТУХНЕТ )))
И по режиму-6, все заработало, только между вспышками, не тухнет вся линейка, а горит. Работает так - 10 вспышек, и гори 1 сек, и опять 10 вспышек, нужно - 10 вспышек и ТУХНЕТ )))
Самое простое - период большего цикла у вас должен включать нечетное кол-во малых циклов. Например, в строке 13 период вместо 1000 поставьте или 900 или 1100
И по режиму-6, все заработало, только между вспышками, не тухнет вся линейка, а горит. Работает так - 10 вспышек, и гори 1 сек, и опять 10 вспышек, нужно - 10 вспышек и ТУХНЕТ )))
Самое простое - период большего цикла у вас должен включать нечетное кол-во малых циклов. Например, в строке 13 период вместо 1000 поставьте или 900 или 1100
Пробывал - ничего неизменилось.
Суть в том что некоторое время поргает и светится, потом моргает и тухнет, потом все повторяется.
Могу видео снять или выложить весь код.
Изменяя период в троке 13 и 23 (режим-6), лента ведет себя по разному, ни не так как нада .
#25
Все правильно. У вас малый цикл исполняется каждые 100мсек, но перключение лент тоже требует времени и 10 таких циклов занимают не 1000 мсек, а немного больше. Разница эта все время растет и поэтому переключение программы "плавает".
Вам надо в большем цикле переключать параметр j не по времени, а по числу малых циклов. 10 малых циклов отыграло - поменяли j на !j
Вам надо в большем цикле переключать параметр j не по времени, а по числу малых циклов. 10 малых циклов отыграло - поменяли j на !j
С этим чет не понял, сори.
По коду из #25
В 13 строчке увеличте время ~ 2000 (if (millis() - past > 2000)
Для того чтобы потушить, между вспышками, после окончания цыкла , for, выход установите в 0
Пробывал увеличивать - не помогло.
Также пробывал тушить в конце - не тот эфект получается.
Возможно не там тушил
Спаибо что откликнулись
Можно узнать что у Вас "не помогло" нет паузы между 10ю вспышками, Нет отключения после вспышек или то и другое?
Запуск режима - потухла лента на 1 сек - 10 вспышек - засветилась 1 сек - 10 вспышек - зесветилась 1 сек, иногда тухнет на 1 сек, нужно чтоб после вспышек тухла! А НЕ Засвечивалась!
Если нада - могу снять видео!
Нужен такой эфект - https://drive.google.com/file/d/0B6Q_8K_WZ8uuUXprUXB4TzQ0VEE/view
Жаль проверить не на чем. попробуйте и отпишите
void mode_6_loop() { Serial.println("leds_66"); // Для отладки // Змінні для Режима-6; byte red = 255; byte green = 255; byte blue = 255; int strobe_count = 10; static uint32_t past = 0; static bool j = 1; static bool flag = 0; if (j && millis() - past > 1000) { j = !j; } if (!j) { static uint32_t past1 = 0; static bool j1 = 1; // static bool flag = 0; if (millis() - past1 > 100) { // полупериод пакета 0,1сек past = millis(); j1 = !j1; flag = j1; } if (!j1 && !flag) { for (int j = 0; j < 10; j++) { for (int i = 0; i < 144; i++ ) { pixels.setPixelColor(i, pixels.Color(red, green, blue)); flag = !flag; } } } LEDS_0(); if (j1 && flag) { for (int i = 0; i < 144; i++ ) { pixels.setPixelColor(i, pixels.Color(0, 0, 0)); flag = !flag; j = 1; past = millis(); } } LEDS_0(); pixels.show(); } }https://drive.google.com/open?id=0B6Q_8K_WZ8uuUGYwV0RBcUd0c2M - Эфект как у меня, смотрите эфект-6, после вспышек - горит вся лента.
https://drive.google.com/open?id=0B6Q_8K_WZ8uubGVydHZSTUdPMEk - эфект по примеру #42, не работает как надо.
Весь код (неправильно работает эфект 6 и 8)
/* ws2812 - Переключение множества режимов одной кнопкой. Режим-1 - Вся лінійка вимкнена Режим-2 - Вся лінійка горить трьома кольорами, через два діоди - червоний, зелений, синій Режим-3 - Ліва/Права сторона (лінійка 1 і 4) світяться білим Режим-4 - Ліва/Права сторона (лінійка 1 і 4) по-очереді моргають білим Режим-5 - Вся лінійка моргає білим Режим-6 - Вся лінійка моргає білим, стробоскоп Режим-7 - Ліва/Права сторона (лінійка 1 і 4) по-очереді моргають синім і червоним Режим-8 - Синя лініка бігає туди-сюди */ #include <Adafruit_NeoPixel.h> #define leds_pin 11 // Вихід на свєтодіоди (на лінійку) / Вывод на светодиоды (на линейку) #define key_pin 2 // Вивід на кнопка / Вывод на кнопку #define max_led 144 // Кількість всіх діодів / Количество всех диодом #define stick_num 4 // Кількість сборок (лінійок) / Количество сборок (линеек) #define pixel_in_stick 36 // Кількість свєтодіодів в зборці (лінійці) / Количество светодиодов в сборке (линейке) //#define pixel_num (stick_num * pixel_in_stick) // 4 х 36 = 144 byte mode = 0; // Змінна режиму / Переменая режима const byte mode_max = 8; // Режими 0,1,2,3,4... 8 це максимальний режим / Режимы 0,1,2,3,4... 8 это максимальный режим //int d1 = 500; // Час затримки / Время задержки int stick_num_0 = 0; // Порядковий номер зборки (лінійки) 1 / Последовательный номер сборки (линейки) 1 int stick_num_1 = 1; // Порядковий номер зборки (лінійки) 2 / Последовательный номер сборки (линейки) 2 int stick_num_2 = 2; // Порядковий номер зборки (лінійки) 3 / Последовательный номер сборки (линейки) 3 int stick_num_3 = 3; // Порядковий номер зборки (лінійки) 4 / Последовательный номер сборки (линейки) 4 Adafruit_NeoPixel pixels = Adafruit_NeoPixel(max_led, leds_pin, NEO_GRB + NEO_KHZ800); void (*mode_setup)(); // робимо вказівник на функцію setup() / делаем указатель на функцию setup() void (*mode_loop)() ; // робимо вказівник на функцію loop() / делаем указатель на функцию loop() //------------------------------- режим 1 ------------------------------- // Вся лінійка вимкнена void mode_1_setup() { Serial.println("leds_1"); // Для отладки for (byte i = 0; i < max_led; ++i) { if (i % 3 == 0)pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // Назначаем для 0 светодиода цвет //(red,green,blue) if (i % 3 == 1)pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // Назначаем для 1 светодиода цвет //(red,green,blue) if (i % 3 == 2)pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // Назначаем для 2 светодиода цвет //(red,green,blue) } pixels.show(); } void mode_1_loop() { Serial.println("leds_11"); // Для отладки // ничего не меняется в этом режиме } //------------------------------- режим 2 ------------------------------- // Вся лінійка горить трьома кольорами, через два діоди - червоний, зелений, синій void mode_2_setup() { Serial.println("leds_2"); // Для отладки for (byte i = 0; i < max_led; ++i) { if (i % 3 == 0)pixels.setPixelColor(i, pixels.Color(250, 0, 0)); // Назначаем для 0 светодиода цвет //(red,green,blue) if (i % 3 == 1)pixels.setPixelColor(i, pixels.Color(0, 250, 0)); // Назначаем для 1 светодиода цвет //(red,green,blue) if (i % 3 == 2)pixels.setPixelColor(i, pixels.Color(0, 0, 250)); // Назначаем для 2 светодиода цвет //(red,green,blue) } pixels.show(); } void mode_2_loop() { // ничего не меняется в этом режиме Serial.println("leds_22"); // Для отладки } //------------------------------- режим 3 ------------------------------- // Ліва/Права сторона (лінійка 1 і 4) світяться білим void mode_3_setup() { Serial.println("leds_3"); // Для отладки for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(0, 0, 0)); //(red,green,blue) pixels.show(); } void mode_3_loop() { Serial.println("leds_33"); // Для отладки byte start_pixel_0 = stick_num_0 * pixel_in_stick; byte start_pixel_3 = stick_num_3 * pixel_in_stick; static uint32_t past = 0; static bool j = 0; if (millis() - past > 500) { past = millis(); j = !j; //--- лінійка-1 for (byte i = start_pixel_0; i < (start_pixel_0 + pixel_in_stick); ++i) { pixels.setPixelColor(i, pixels.Color(255, 255, 255)) ; } //--- лінійка-4 for (byte i = start_pixel_3; i < (start_pixel_3 + pixel_in_stick); ++i) { pixels.setPixelColor(i, pixels.Color(255, 255, 255)) ; } pixels.show(); } } //------------------------------- режим 4 ------------------------------- // Ліва/Права сторона (лінійка 1 і 4) по-очереді моргають білим void mode_4_setup() { Serial.println("leds_4"); // Для отладки for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(0, 0, 0)); //(red,green,blue) pixels.show(); } void mode_4_loop() { Serial.println("leds_44"); // Для отладки byte start_pixel_0 = stick_num_0 * pixel_in_stick; byte start_pixel_3 = stick_num_3 * pixel_in_stick; static uint32_t past = 0; static bool j = 0; if (millis() - past > 500) { past = millis(); j = !j; //--- лінійка-1 for (byte i = start_pixel_0; i < (start_pixel_0 + pixel_in_stick); ++i) { if (j)pixels.setPixelColor(i, pixels.Color(255, 255, 255)); else pixels.setPixelColor(i, pixels.Color(0, 0, 0)) ; } //--- лінійка-4 for (byte i = start_pixel_3; i < (start_pixel_3 + pixel_in_stick); ++i) { if (j)pixels.setPixelColor(i, pixels.Color(255, 255, 255)); else pixels.setPixelColor(i, pixels.Color(0, 0, 0)) ; } pixels.show(); } } //------------------------------- режим 5 ------------------------------- // Вся лінійка моргає білим void mode_5_setup() { Serial.println("leds_5"); // Для отладки for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(0, 0, 0)); //(red,green,blue) pixels.show(); } void mode_5_loop() { Serial.println("leds_55"); // Для отладки static uint32_t past = 0; static bool j = 0; if (millis() - past > 500) { past = millis(); j = !j; for (byte i = 0; i < max_led; ++i) { if (j)pixels.setPixelColor(i, pixels.Color(255, 255, 255)); else pixels.setPixelColor(i, pixels.Color(0, 0, 0)) ; } pixels.show(); } } //------------------------------- режим 6 ------------------------------- // Вся лінійка моргає білим, стробоскоп void mode_6_setup() { Serial.println("leds_6"); // Для отладки for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(0, 0, 0)); //(red,green,blue) pixels.show(); } void mode_6_loop() { Serial.println("leds_66"); // Для отладки // Змінні для Режима-6; byte red = 255; byte green = 255; byte blue = 255; int strobe_count = 10; static uint32_t past = 0; static bool j = 0; static bool flag = 0; if (millis() - past > 1000) { past = millis(); j = !j; } if (!j) { static uint32_t past1 = 0; static bool j1 = 0; //static bool flag = 0; if (millis() - past1 > 50) { // полупериод пакета 0,1сек past1 = millis(); j1 = !j1; flag = j1; } if (!j1 && !flag) { for (int k = 0; k < 10; k++) for (int m = 0; m < 144; m++ ) pixels.setPixelColor(m, pixels.Color(red, green, blue)); flag = !flag; } if (j1 && flag) { for (int l = 0; l < 144; l++ ) pixels.setPixelColor(l, pixels.Color(0, 0, 0)); flag = !flag; } pixels.show(); } /* if (j1 && flag) { for (byte m = 0; m < max_led; ++m) pixels.setPixelColor(m, pixels.Color(0, 0, 0)); //(red,green,blue) pixels.show(); flag = !flag;} */ } //------------------------------- режим 7 ------------------------------- // Ліва/Права сторона (лінійка 1 і 4) по-очереді моргають синім і червоним void mode_7_setup() { Serial.println("leds_7"); // Для отладки for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(0, 0, 0)); //(red,green,blue) pixels.show(); } void mode_7_loop() { Serial.println("leds_77"); // Для отладки byte start_pixel_0 = stick_num_0 * pixel_in_stick; byte start_pixel_3 = stick_num_3 * pixel_in_stick; static uint32_t past = 0; static bool j = 0; if (millis() - past > 500) { past = millis(); j = !j; //--- лінійка-1 for (byte i = start_pixel_0; i < (start_pixel_0 + pixel_in_stick); ++i) { if (j)pixels.setPixelColor(i, pixels.Color(255, 0, 0)); else pixels.setPixelColor(i, pixels.Color(0, 0, 0)) ; } //--- лінійка-4 for (byte i = start_pixel_3; i < (start_pixel_3 + pixel_in_stick); ++i) { if (j)pixels.setPixelColor(i, pixels.Color(0, 0, 0)); else pixels.setPixelColor(i, pixels.Color(0, 0, 255)) ; } pixels.show(); } } //------------------------------- режим 8 ------------------------------- // Синя лініка бігає туди-сюди void mode_8_setup() { Serial.println("leds_8"); // Для отладки for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(0, 0, 0)); //(red,green,blue) pixels.show(); } void mode_8_loop() { Serial.println("leds_88"); // Для отладки // Змінні для Режима-8; byte red = 0; byte green = 0; byte blue = 255; int pixel_size = 20; for(int i = 0; i < max_led - pixel_size - 2; i++) { for(int i = 0; i < max_led; i++ ) { pixels.setPixelColor(i, pixels.Color(0, 0, 0)); } pixels.setPixelColor(i, pixels.Color(red, green, blue)); pixels.show(); for(int k = 1; k <= pixel_size; k++) { pixels.setPixelColor(i+k, pixels.Color(red, green, blue)); } pixels.setPixelColor(i + pixel_size + 1, pixels.Color(red, green, blue)); pixels.show(); delay(1); } for(int i = max_led - pixel_size - 2; i > 0; i--) { for(int i = 0; i < max_led; i++ ) { pixels.setPixelColor(i, pixels.Color(0, 0, 0)); } pixels.setPixelColor(i, pixels.Color(red, green, blue)); pixels.show(); for(int k = 1; k <= pixel_size; k++) { pixels.setPixelColor(i+k, pixels.Color(red, green, blue)); } pixels.setPixelColor(i + pixel_size + 1, pixels.Color(red, green, blue)); pixels.show(); delay(1); } } //--------------------------- Кінець режимів ---------------------------- //----------------class Cl_Btn---------------------------- class Cl_Btn { byte pin ; // номер ноги на кнопке void (* Do)(); bool btn, btn_old; bool bounce_btn = 0; // антидребезговый флаг uint32_t past = 0 ; public: Cl_Btn(byte _pin, void (* _Do)()): pin(_pin), Do(_Do) {}; void setup() { pinMode(pin, INPUT_PULLUP); // подключить кнопку с подтяжкой btn = digitalRead(pin); // прочитать реальное значение на выводе}; } void loop() { if (! bounce_btn && btn != digitalRead(pin)) { // если прошел фронт изм на выводн bounce_btn = 1; // выставить флаг past = millis(); // сделать временую засветку } else if ( bounce_btn && millis() - past >= 5 ) { // если прошло антидребезговое время bounce_btn = 0; // то снять флаг btn_old = btn ; btn = digitalRead(pin) ; // прочитать реальное значение на выводе if (btn_old && ! btn) Do(); } } }; //------------------------------ void Do_Btn1() { mode++; Serial.println(mode); // Для отладки if (mode == 1) { mode_setup = mode_1_setup; mode_loop = mode_1_loop; } else if (mode == 2) { mode_setup = mode_2_setup; mode_loop = mode_2_loop; } else if (mode == 3) { mode_setup = mode_3_setup; mode_loop = mode_3_loop; } else if (mode == 4) { mode_setup = mode_4_setup; mode_loop = mode_4_loop; } else if (mode == 5) { mode_setup = mode_5_setup; mode_loop = mode_5_loop; } else if (mode == 6) { mode_setup = mode_6_setup; mode_loop = mode_6_loop; } else if (mode == 7) { mode_setup = mode_7_setup; mode_loop = mode_7_loop; } else { mode = 0; mode_setup = mode_8_setup; mode_loop = mode_8_loop; } mode_setup(); } Cl_Btn Btn1(key_pin , Do_Btn1); // подключить кнопку на выв 2 void setup() { Serial.begin(9600); pixels.begin(); Do_Btn1(); mode_setup(); Btn1.setup(); Serial.print("mode "); // Для отладки Serial.println(mode); // Для отладки } void loop() { mode_loop(); Btn1.loop(); }я же вам написал как сделать. Уберите проверку верхнего таймаута в 1000 мсек, вместо этого считайте вспышки. Вспыхнуло 10 раз - погасите ленту и подождите 1 сек. Потом все снова.
Другой вариант - разобраться с лишними static переменными. Они у вас хранят значения между циклами, а вам нужно обнулять состояние ленты каждые 10 вспышек. Но это труднее обьяснить на пальцах, а переписывать за вас ваш код мне некогда, сорри
или третий вариант - сделайте как вам советуют в сообщении #37
Мигает постоянно
void mode_6_loop() { Serial.println("leds_66"); // Для отладки // Змінні для Режима-6; byte red = 255; byte green = 255; byte blue = 255; int strobe_count = 10; static uint32_t past = 0; static bool j = 0; static bool flag = 0; for (int v = 0; v < 10; v++) { j = !j; if (!j) { static uint32_t past1 = 0; static bool j1 = 0; //static bool flag = 0; if (millis() - past1 > 50) { // полупериод пакета 0,1сек past1 = millis(); j1 = !j1; flag = j1; } if (!j1 && !flag) { for (int k = 0; k < 10; k++) for (int m = 0; m < 144; m++ ) pixels.setPixelColor(m, pixels.Color(red, green, blue)); flag = !flag; } if (j1 && flag) { for (int l = 0; l < 144; l++ ) pixels.setPixelColor(l, pixels.Color(0, 0, 0)); flag = !flag; } pixels.show(); } } }Задержки нету между вспышками
Через - delay работает эфект как надо, но не реагирует на кнопку
или третий вариант - сделайте как вам советуют в сообщении #37 - работет, но не тот эфект.
Другой вариант - разобраться с лишними static переменными. Они у вас хранят значения между циклами, а вам нужно обнулять состояние ленты каждые 10 вспышек. Но это труднее обьяснить на пальцах, а переписывать за вас ваш код мне некогда, сорри
Насколько я понял, переменная - past сохраняется после выхода из подпрограммы, и нужно поменя названия меременных - past в других подпрограммах (уже сделано, в каждой подпрограмме, другая переменная).
Непомоголо.
я же вам написал как сделать. Уберите проверку верхнего таймаута в 1000 мсек, вместо этого считайте вспышки. Вспыхнуло 10 раз - погасите ленту и подождите 1 сек. Потом все снова.
Скорре всего неправильно реализовую в коде.
Попробуйте вот так - это проще, чем обьяснять счет вспышек
void mode_6_setup() { Serial.println("leds_6"); // Для отладки for (byte i = 0; i < max_led; ++i) pixels.setPixelColor(i, pixels.Color(0, 0, 0)); //(red,green,blue) pixels.show(); } void mode_6_loop() { Serial.println("leds_66"); // Для отладки // Змінні для Режима-6; byte red = 255; byte green = 255; byte blue = 255; int strobe_count = 10; static uint32_t past = 0; static bool j = 0; static bool flag = 0; static uint32_t past1 = 0; static bool j1 = 0; if (millis() - past > 1090) { past = millis(); j = !j; past1 = 0; j1 = 0; } if (!j) { if (millis() - past1 > 50) { // полупериод пакета 0,1сек past1 = millis(); j1 = !j1; flag = j1; } if (!j1 && !flag) { for (int k = 0; k < 10; k++) for (int m = 0; m < 144; m++ ) pixels.setPixelColor(m, pixels.Color(red, green, blue)); flag = !flag; } if (j1 && flag) { for (int l = 0; l < 144; l++ ) pixels.setPixelColor(l, pixels.Color(0, 0, 0)); flag = !flag; } pixels.show(); } /* if (j1 && flag) { for (byte m = 0; m < max_led; ++m) pixels.setPixelColor(m, pixels.Color(0, 0, 0)); //(red,green,blue) pixels.show(); flag = !flag;} */ }