Я пытаюсь создать простой проект, используя Blynk на D1 Mini, где я могу выбрать любую анимацию в любое время, и она должна воспроизводиться, если я не остановлю это с помощью своего приложения Blynk. В то время как все остальное работает отлично, я не могу понять, что не так с моей функцией Theaterchaserainbow, которая, когда выбрана, мой D1 отключается и снова подключается. Вот код.
Я понял из разных форумов, что я должен использовать вместо этого blynk.timer и установить счетчик более 1000L в настройке. Но это не поможет мне и для этой конкретной функции радуги в погоне за театром. Все остальные функции работают отлично. Любая помощь будет принята с благодарностью.
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Adafruit_NeoPixel.h>
#include <wifi_credentials.h>
#define BLYNK_PRINT Serial
#define myPixelPin D2
#define myPixels 16
char auth[] = "xxxxxxxmy_authxxxxxx";
int select;
BlynkTimer timer;
// Instatiate the NeoPixel from the ibrary
Adafruit_NeoPixel strip = Adafruit_NeoPixel(myPixels, myPixelPin, NEO_GRB + NEO_KHZ800);
// Timer to repeat animations
void myTimerEvent() {
if (select == 1) {
allOff();
} else if (select == 12) {
theaterChaseRainbow(50);
}
}
// NeoPixel all off Switch
BLYNK_WRITE(V0) {
int pinValue = param.asInt();
select = 1;
}
// Menu based Animation Selection
BLYNK_WRITE(V1) {
int pinValue = param.asInt();
switch (pinValue) {
case 1: // Item 1
select = 11;
break;
case 2: // Item 2
select = 12;
break;
}
}
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
strip.begin();
strip.show();
timer.setInterval(1000L, myTimerEvent);
}
void loop() {
Blynk.run();
timer.run(); // Initiates BlynkTimer;
}
// Theatre Chase Rainbow
//*****************************************************************************
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
}
}
}
}
// Clear Program
//*****************************************************************************
void allOff() {
for ( int i = 0; i < strip.numPixels(); i++ ) {
strip.setPixelColor(i, 0, 0, 0 );
}
strip.show();
}
// Default Wheel defination
//*****************************************************************************
uint32_t Wheel(byte WheelPos) {
if (WheelPos < 85) {
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}