Помогите с простым постепенно более ярко светящим светодиодом

я новичок в arduino и прошу прощения за любую грамматическую ошибку. Итак,я пытаюсь воспроизвести эффект мерцания, обнаруженный на двигателе космического корабля, когда они собираются взлететь, где огонь меняется от тусклого до яркого с мерцанием, аналогично форсажной камере на модели самолета, в которой используется светодиод neopixel, но на этот раз используется только обычный светодиод. Я мог бы имитировать мерцание на светодиоде с различным уровнем яркости,используя простую аналоговую запись, проблема в том, что я не могу их объединить, так как я использую задержку, которая влияет на скорость эффекта мерцания, и мне нужна 1 последовательность мерцания, чтобы задержаться на некоторое время, прежде чем перейти к более яркому мерцанию и так далее. Мой код слишком прост

    Int led = 9;
    void setup () {
    pinMode (led, OUTPUT);
    }

    void loop() {
    {analogWrite (led, random (10,15));
    delay (30);}

    }

Я думаю,что добавление новой строки с более высокими случайными состояниями светодиодов (например, 50 100) должно быть в порядке, но тогда задержка, влияющая на скорость мерцания, слишком мала и делает бесполезным слияние обеих строк, так как она мгновенно станет самой яркой. Есть ли какой-нибудь способ задержать первую тусклую строку на некоторое время, затем перейти к следующей более яркой строке и так далее, не влияя на задержку фильтрации? Любая помощь будет признательна

Спасибо!

, 👍1

Обсуждение

сначала изучите пример BlinkWithouDelay, @Juraj

@Juraj спасибо за ваш ответ juraj,уже несколько раз играл с милисом,но все,что он делает,это держит линию, в то время как другая линия перекрывает ее(что хорошо для косметических целей, но я не хотел тратить ресурсы), и это становится слишком сложным, если я хочу обратиться каждая строка с каждым своим милисом, @user194312

у вас есть только один светодиод?, @Juraj

@Juraj у меня есть 1 провод,чтобы распределить этот эффект от контакта 9,я считаю, что могу включить столько светодиодов, сколько захочу, с arduino или без него позже, так что да, вы можете сказать 1 светодиод, но не совсем , @user194312

затем добавьте второй analogWrite и задержку после него, @Juraj


1 ответ


1

Перед использованием millis() вы можете попробовать создать эффект подруливающего устройства с задержкой().

Я думаю, что частоты обновления 40 Гц для светодиода должно быть достаточно. Скетч начинается со случайного значения от 5 до 15 и заканчивается случайным значением от 80 до 256. Та часть посередине, которая постепенно увеличивается между этими значениями, является математической проблемой.

// Led mimic spacecraft thruster.
//
// Update rate 40Hz for the led.
// That is a delay of 25ms.

#define RATE 40  // update rate of led in Hz
const int ledPin = 9;   // it must be a PWM pin !

void setup () {
  pinMode(ledPin, OUTPUT);

  Serial.begin(9600);

  randomSeed(analogRead(A0));
}

void loop() {
  int n;

  Serial.println("10 seconds low brightness");
  n = 10*RATE;
  for(int i=0; i<n; i++) {
    analogWrite(ledPin, random(5,15));
    delay(1000/RATE);
  }

  Serial.println("5 seconds gradually brighter");
  n = 5*RATE;
  for(int i=0; i<n; i++) {
    //   random start: from 5 to 80     (75 increase)
    //   random end  : from 15 to 256   (241 increase)
    //   The calculation is with long, it might not fit in a 16 bit integer

    int random_start = 5 + int((long(i) * 75) / long(n));
    int random_end   = 15 + int((long(i) * 241) / long(n));
    analogWrite(ledPin, random(random_start,random_end));
    delay(1000/RATE);
  }

  Serial.println("10 second full thrust");
  n = 10*RATE;
  for(int i=0; i<n; i++) {
    analogWrite(ledPin, random(80,256));
    delay(1000/RATE);
  }

  analogWrite(ledPin,0);
  delay(2000);
}
,