Вопрос по blynk на esp8266

DjafarT800

✩✩✩✩✩✩✩
15 Дек 2019
19
0
Добрый день. Подскажите пожалуйста, делаю освещение на адресной ленте через blink. Но проблема в том, что при перезагрузке ардуины она по умолчанию выключена и пока на телефоне в blink не выбирешь цвет лента не включается. Хочу сделать так, что при включении ардуины она горит заданным в скетче цветом, но и чтоб при выборе цвета в blink он менялся. Ниже скетч, в нем закомментил строки которые отвечают за цвет при включении ардуины, но с этим кодом при выборе другого цвета в blink он меняется на 1мс и затем опять меняется на цвет по умолчанию. Не могу понять как прописать условия в скетче, как вариант может добавить физическую кнопку при нажатии на которую будет переключать цикл с цвета по умолчанию на blink?

скетч:
#include <Adafruit_NeoPixel.h>
#include <SPI.h>
#include <BlynkSimpleEsp8266.h>
#include <ESP8266WiFi.h>
#include "FastLED.h"

#define PIN D2
#define NUMPIXELS 10
#define BLYNK_PRINT Serial
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);



void setup()
{
Serial.begin(9600);
Blynk.begin("API", "WIFI", "PASS");
pixels.begin();
}
BLYNK_WRITE(V2)
{

int R = param[0].asInt();
int G = param[1].asInt();
int B = param[2].asInt();
Serial.println(R);
Serial.println(G);
Serial.println(B);
for(int i=0;i<NUMPIXELS;i++){

pixels.setPixelColor(i, pixels.Color(R,G,B));

pixels.show();
}
}

void loop()
{
Blynk.run();
//ledss();
}

//void ledss(){
//  for (int i = 0; i < NUMPIXELS; i++)
//  {
//    pixels.setPixelColor(i, pixels.Color(220, 214, 255)); // Цвет по умолчанию при включении.
//  }
//  pixels.show();
//}
 
Изменено:

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
208
1. Для вставки кода пользуйся кнопкой Код
1597507534558.png
2. Твой закомментированный код выполняется в цикле, постоянно. Естественно, после установки цвета через Блинк, он сразу переключится на цвет по умолчанию.
3. Если хочешь, чтобы цвет запоминался, тебе это надо запрограммировать самому. Читай про EEPROM, и как им пользоваться.
 
  • Лойс +1
Реакции: DjafarT800

DjafarT800

✩✩✩✩✩✩✩
15 Дек 2019
19
0
1. Для вставки кода пользуйся кнопкой Код
Посмотреть вложение 15559
2. Твой закомментированный код выполняется в цикле, постоянно. Естественно, после установки цвета через Блинк, он сразу переключится на цвет по умолчанию.
3. Если хочешь, чтобы цвет запоминался, тебе это надо запрограммировать самому. Читай про EEPROM, и как им пользоваться.
Спасибо. про EEPROM почитаю, интересно. Но даже если принять то, что цвет будет сбрасываться, как остановить void ledss и при этом чтоб работала часть цикла где Blynk.run(); ?
 

Un_ka

★★✩✩✩✩✩
13 Июл 2020
243
77
других форумов.
У них есть пример обновления значения при запуске.

Из примера.:
BLYNK_CONNECTED() {
  // Request Blynk server to re-send latest values for all pins
  Blynk.syncAll();

}
P.S. Пишется, как Blynk!
 

DjafarT800

✩✩✩✩✩✩✩
15 Дек 2019
19
0
У них есть пример обновления значения при запуске.

Из примера.:
BLYNK_CONNECTED() {
  // Request Blynk server to re-send latest values for all pins
  Blynk.syncAll();

}
P.S. Пишется, как Blynk!
Да, это возвращает последний цвет, но по циклу тут же меняет на цвет по умолчанию. Не могу понять как цикл цвета по умолчанию выполнить однократно при запуске и все, далее он не нужен
 

DjafarT800

✩✩✩✩✩✩✩
15 Дек 2019
19
0
Элементарно, Ватсон,запустить его в конце setup
Спасибо, все работает как нужно на текущий момент

C++:
#include <Adafruit_NeoPixel.h>
#include <SPI.h>
#include <BlynkSimpleEsp8266.h>
#include <ESP8266WiFi.h>
#include "FastLED.h"
 
#define PIN D2
#define NUMPIXELS 10
#define BLYNK_PRINT Serial
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

BLYNK_WRITE(V2)
{
 
int R = param[0].asInt();
int G = param[1].asInt();
int B = param[2].asInt();
Serial.println(R);
Serial.println(G);
Serial.println(B);
for(int i=0;i<NUMPIXELS;i++){
 
pixels.setPixelColor(i, pixels.Color(R,G,B));
 
pixels.show();
}
}

void setup()
{
Serial.begin(9600);
Blynk.begin("API", "WIFI", "PASS");
pixels.begin();
ledss();
}

void ledss(){
 // Включаем все светодиоды.
  for (int i = 0; i < NUMPIXELS; i++)
  {
    pixels.setPixelColor(i, pixels.Color(220, 214, 255)); // Цвет по умолчанию.
  }
  // Передаем цвета ленте.
  pixels.show();
}

void loop()
{
Blynk.run();
}