Различная длительность горения лампочки на ргб ленте.

Dyrila007
Offline
Зарегистрирован: 18.09.2020

Есть простенький код светофора с 6 лампочками, написанный моими кривыми руками. На сериал порт поступает циферка. она трансформируется в количество времени необходимое для горения сигналов. Необходимо заставить лампочку на ргб гореть именно это время.
Как я не изгалялся с millis, ничего не получилось, а delay() не работает с переменными.
Помогите, пожалуйста. Как заставить лампочку гореть определенное время?
 

#include "FastLED.h"
#define NUM_LEDS 8
#define DATA_PIN 3
#define RED 0xFF0000
#define GREEN 0x00FF00
#define YELLOW 0xFF4400
#define BLACK 0x000000
// Степень гашения яркости (кратно четвертям от 256, т.е. 0, 64, 128, 256)
// Массив светодиодов (знакомест)
CRGB leds[NUM_LEDS];

  int timing;
  int M;
  int KV;
void setup() {
  delay(1000); // Защитный интервал для начального сброса контроллеров ленты
  Serial.begin(9600);
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
}

void loop() {
if (Serial.available() > 0) {
M = Serial.parseInt();
Serial.println(M);
}
KV = ((5+(M*3))*1000); 
Serial.println(KV);

//----------------------------
leds[0]=RED;
leds[5] = GREEN;
FastLED.show();
timing = millis();
delay(kv);
while (millis() - timing < KV){}
leds[0]=BLACK;
leds[5] = BLACK;

FastLED.show();
leds[1]= YELLOW;
leds[4]= YELLOW;
FastLED.show();
delay(3000);
leds[4]=BLACK;
leds[1] = BLACK;

FastLED.show();
//-----------------------------
leds[2]=GREEN;
leds[3] = RED;
FastLED.show();
timing = millis();
while (millis() - timing < KV){}
leds[2]=BLACK;
leds[3] = BLACK;
FastLED.show();

leds[1]= YELLOW;
leds[4]= YELLOW;
FastLED.show();
delay(3000);
leds[4]=BLACK;
leds[1] = BLACK;
FastLED.show();
}

 

b707
Offline
Зарегистрирован: 26.05.2017

помимо того, что вы неправильно работаете со временем - этот код даже компилироваться не будет.

И что значит "delay() не работает с переменными" ? - у меня работает

Dyrila007
Offline
Зарегистрирован: 18.09.2020

Ну не знаю, у меня компилируется, если delay(kv) убрать.
Собственно, если написать delay(kv) (делей и переменная,)

То будет это. Т.е. нельзя. Или я что-то не понял наверно.

Dyrila007
Offline
Зарегистрирован: 18.09.2020

УПС. Я идиот. Несколько недель тупил, из-за того что KV написал с маленьких букв.
Лооол.

Извиняюсь.