Режимы свечения RGB ленты на Arduino+ mosfet
- Войдите на сайт для отправки комментариев
Втр, 10/12/2019 - 10:11
Привет!
Я Новичок и прошу Вашей помощи.
нужно накидать пару эффектов свечения для rgb ленты (пульсация, плавное изменение яркости, и еще парочку). Почитал про циклы for и while в общих чертах понятно, НО мне нужно что бы цикл выполнялся постоянно, а во всех примерах эти два цикла находятся внутри loop. Мне такой Вариант не подходит(
Плата nodemcu + модули mosfet. Думаю для знающих людей данный код не составит сложности, Надеюсь на Вашу Помощь)))
BLYNK_WRITE(V10) {
switch (param.asInt()) {
case 1: { // Пункт 1
analogWrite (pinR, LOW);
analogWrite (pinG, LOW);
analogWrite (pinR, random(100, 1023));
analogWrite (pinG, random(100, 1023));
Serial.println("Выбран кейс 1");
break;
}
case 2: { // Пункт 2
analogWrite (pinR, LOW);
analogWrite (pinG, LOW);
for (int asd = 0; asd < 1023; asd += 102) {
Blynk.virtualWrite(V4, asd);
analogWrite(pinR, asd);
Serial.println(asd);
Serial.println("Выбран кейс 2");
delay(10);
};
break;
}
case 3: { // Пункт 3
analogWrite (pinR, LOW);
analogWrite (pinG, LOW);
Serial.println("Выбран кейс 3");
break;
}
}
}
В каждом Кейсе хотелось бы какой то эффект свечения, и при выборе другого кейса эффект менялся. Нужно что бы при выборе кейса эффект бесконечно повторялся (плавно разгорается после плавно Гаснет, так бесконечно).
А где Вам надо, чтобы они находились?
Чем именно не подходит? Что не устраивает?
НО мне нужно что бы цикл выполнялся постоянно, а во всех примерах эти два цикла находятся внутри loop*. Мне такой Вариант не подходит
* - (примечание: значит выполняются постоянно)
Ничего не понял. Противоречие самого себя в одной строке.
ну не читал ТС про Loop
http://arduino.ru/Reference/Loop
Loop - петля, виток
Ну, мало-ли. ТС не нравится loop() по религиозным или лингвистическим соображениям. Я могу предложить main() и сменить среду программирования.
#include <ESP8266WiFi.h> #include <DNSServer.h> #include <ESP8266WebServer.h> #include <WiFiManager.h> #include <SPI.h> #include <BlynkSimpleEsp8266.h> #define pinR D1 #define pinG D2 #define BLYNK_PRINT Serial int rezh; int brig; //Значение Яркости, получаю с приложения char auth[] = "хххххххххххххххххх"; //NodeMcu Token 2 BlynkTimer timer; BLYNK_CONNECTED(){ Blynk.syncAll(); } void configModeCallback (WiFiManager *myWiFiManager) { Serial.println("Entered config mode"); Serial.println(WiFi.softAPIP()); //if you used auto generated SSID, print it Serial.println(myWiFiManager->getConfigPortalSSID()); } void setup() { Serial.begin(115200); WiFiManager wifiManager; //wifiManager.resetSettings(); wifiManager.setAPCallback(configModeCallback); wifiManager.autoConnect("Nigth_Ray"); Serial.println("Подключен к Сети"); Blynk.config(auth, IPAddress(хх,1х3,9х0,х), 8080); pinMode (pinR, OUTPUT); pinMode (pinG, OUTPUT); } //////////////////////////////////////////////// BLYNK_WRITE(V10) { switch (param.asInt()) { case 1: { // Режим свечения Первый- Рандомный Цвет. analogWrite (pinR, LOW); analogWrite (pinG, LOW); analogWrite (pinR, random(100, brig)); analogWrite (pinG, random(100, brig)); Serial.println("Выбран кейс 1"); break; } case 2: { // Режим свечения Второй- Плавное Включение Выключение. analogWrite (pinR, LOW); analogWrite (pinG, LOW); for (int rezh = 0; rezh < brig; rezh += 102.3) { Blynk.virtualWrite(V4, rezh); analogWrite(pinR, rezh); Serial.println(rezh); Serial.println("Выбран кейс 2"); delay(10); }; break; } case 3: { // Режим свечения Третий- analogWrite (pinR, LOW); analogWrite (pinG, LOW); Serial.println("Выбран кейс 3"); break; } } } BLYNK_WRITE(V9){ // Получаю Значение с Виджета в Приложении, и Записываю в "brig" brig = param.asInt(); Blynk.virtualWrite(V11, brig); } //////////////////////////////////////////////// void loop() { Blynk.run(); }Обрати внимание что внутри цикла loop кроме Blynk.run ничего нету.
Я пытаюсь сделать что бы например цикл пульсации светодиодной Ленты непрерывно выполнялся в case 1: или case 2: или case 3:.
То есть каждый эффект свечения был внутри КЕЙСА
Мне не устраивает Вариант когда Код который ниже, будет Заключен в LOOP
BLYNK_WRITE(V10) { switch (param.asInt()) { case 1: { // Режим свечения Первый- Рандомный Цвет. analogWrite (pinR, LOW); analogWrite (pinG, LOW); analogWrite (pinR, random(100, brig)); analogWrite (pinG, random(100, brig)); Serial.println("Выбран кейс 1"); break; } case 2: { // Режим свечения Второй- Плавное Включение Выключение. analogWrite (pinR, LOW); analogWrite (pinG, LOW); for (int rezh = 0; rezh < brig; rezh += 102.3) { Blynk.virtualWrite(V4, rezh); analogWrite(pinR, rezh); Serial.println(rezh); Serial.println("Выбран кейс 2"); delay(10); }; break; } case 3: { // Режим свечения Третий- analogWrite (pinR, LOW); analogWrite (pinG, LOW); Serial.println("Выбран кейс 3"); break; } } }Давайте пока отойдем от блинка. Вы можете написать код эффектов чтобы он выполнялся в loop, а выбор осуществлялся пока статически (при компиляции) . Примерно так:
#define pinR D1 #define pinG D2 byte effect = 1; //выбранный эффект int brig = 255; void setup() { pinMode (pinR, OUTPUT); pinMode (pinG, OUTPUT); } void loop() { switch (effect) { case 1: { // Режим свечения Первый- Рандомный Цвет. analogWrite (pinR, random(100, brig)); analogWrite (pinG, random(100, brig)); break; } case 2: { // Режим свечения Второй- Плавное Включение Выключение. //делаем здесь один шаг эффекта 2 break; } case 3: { // Режим свечения Третий- //делаем здесь один шаг эффекта 3 break; } } }Компилируете, добиваетесь чтобы эффект 1 работал как вам надо. Потом ставите byte effect = 2 и добиваетесь чтобы работал эффект 2
Когда все 3 эффекта будут работать сделайте чтобы значение для effect получалось через Blynk. А код эффектов так и оставте в лупе
Понял, СПАСИБО. попробую
Дружище Спасибо!!!
Все Получилось.
BLYNK_WRITE(V11) { switch (param.asInt()) { case 1: { effect = 1; break; } case 2: { // Режим свечения Первый- Рандомный Цвет. effect = 2; break; } case 3: { // Режим свечения Второй- Плавное Включение Выключение. effect = 3; break; } case 4: { // Режим свечения Третий- effect = 4; break; } } } BLYNK_WRITE(V9){ // Получаю Значение с Виджета в Приложении, и Записываю в "brig" brig = param.asInt(); Blynk.virtualWrite(V10, brig); } //////////////////////////////////////////////// void loop() { Serial.println (effect); Blynk.run(); switch (effect) { case 1: { break; } case 2: { // Режим свечения Первый- Рандомный Цвет. analogWrite (pinR, random(100, brig)); analogWrite (pinG, random(100, brig)); break; } case 3: { // Режим свечения Второй- Плавное Включение Выключение. //делаем здесь один шаг эффекта 2 break; } case 4: { // Режим свечения Третий- //делаем здесь один шаг эффекта 3 break; } } }Вместо
switch (param.asInt()) { case 1: { effect = 1; break; } case 2: { // Режим свечения Первый- Рандомный Цвет. effect = 2; break; } case 3: { // Режим свечения Второй- Плавное Включение Выключение. effect = 3; break; } case 4: { // Режим свечения Третий- effect = 4; break; } }Можно просто
effect = param.asInt()
ДА все Огонь!)
Может еще подскажешь как можно сделать задержку не используя deley ()б чет я не понял как использовать millis()
ДА все Огонь!)
Может еще подскажешь как можно сделать задержку не используя deley ()б чет я не понял как использовать millis()
От конкретного варианта зависит и от цели замены.