доброго времени суток! такая проблема исполнение программы залипает на delay(), далее нужно ловить момент для переключения по клику кнопки чтобы перейти к след. режиму работы.
#include "Adafruit_NeoPixel.h" // подключаем библиотеку
#define PIN 10 // указываем пин для подключения ленты
#define NUMPIXELS 30 // указываем количество светодиодов в ленте
Adafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
const int buttonPin = 5; // пин кнопки
int a = 1000;
int b = 150;
int c = 500;
int Program;
int buttonState = 0;
void setup()
{pinMode(buttonPin, INPUT);
if(!digitalRead(5))
{Program+=1;
delay(1000);}
{if(Program>=3);
{Program=0;}
}
strip.begin();
strip.setBrightness(20); // указываем яркость светодиодов (максимум 255)
}
void loop() {
switch (Program) {
case 0:
for (int i = 0; i < NUMPIXELS; i++) {
strip.setPixelColor(i, strip.Color(255, 255, 255));
strip.show();}
break;
case 1:
for (int i = 0; i < NUMPIXELS; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 255));
strip.show();
delay(b);}
strip.clear();
for (int i = 29; i > -1; --i) {
strip.setPixelColor(i, strip.Color(0, 0, 255));
strip.show();
delay(b);}
strip.clear();
for (int i = 0; i < NUMPIXELS; i++) {
strip.setPixelColor(i, strip.Color(255, 255, 255));
strip.show();
delay(b);}
strip.clear();
for (int i = 29; i > -1; --i) {
strip.setPixelColor(i, strip.Color(255, 255, 255));
strip.show();
delay(b);}
strip.clear();
for (int i = 0; i < NUMPIXELS; i++) {
strip.setPixelColor(i, strip.Color(255, 0, 0));
strip.show();
delay(b);}
strip.clear();
for (int i = 29; i > -1; --i) {
strip.setPixelColor(i, strip.Color(255, 0, 0));
strip.show();
delay(b);}
strip.clear();
break;
case 2:
for (int i = 0; i < NUMPIXELS; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 255));
strip.show();}
{delay(c);}
strip.clear();
for (int i = 0; i < NUMPIXELS; i++) {
strip.setPixelColor(i, strip.Color(255, 255, 255));
strip.show();}
{delay(c);}
strip.clear();
for (int i = 0; i < NUMPIXELS; i++) {
strip.setPixelColor(i, strip.Color(255, 0, 0));
strip.show();}
{delay(c);}
strip.clear();
}}
Это, по-вашему, вопрос? По-моему - это утверждение. Как на него отвечать? Ну, давайте я попробую адекватно ответить: “Мне жаль, что у Вас не получается”. Вам помог мой ответ?
// В объявлении:
unsigned long time;
// В setup:
time=millis()+5000;
// В loop:
if (millis()>=time)
{
// этот блок будет срабатывать каждые 5 секунд
// здесь что-то свое
time=millis()+5000;
}
Так нельзя, это гарантированные проблемы при переполнении millis(). Делать нужно по феншую
void loop()
{
static unsigned long time = millis();
if (millis() - time >= 5000)
{
// этот блок будет срабатывать каждые 5 секунд
time = millis();
// здесь что-то свое
}
}
Здесь перемена мест слагаемых очень даже имеет значение