Помогите с простым постепенно более ярко светящим светодиодом
я новичок в arduino и прошу прощения за любую грамматическую ошибку. Итак,я пытаюсь воспроизвести эффект мерцания, обнаруженный на двигателе космического корабля, когда они собираются взлететь, где огонь меняется от тусклого до яркого с мерцанием, аналогично форсажной камере на модели самолета, в которой используется светодиод neopixel, но на этот раз используется только обычный светодиод. Я мог бы имитировать мерцание на светодиоде с различным уровнем яркости,используя простую аналоговую запись, проблема в том, что я не могу их объединить, так как я использую задержку, которая влияет на скорость эффекта мерцания, и мне нужна 1 последовательность мерцания, чтобы задержаться на некоторое время, прежде чем перейти к более яркому мерцанию и так далее. Мой код слишком прост
Int led = 9;
void setup () {
pinMode (led, OUTPUT);
}
void loop() {
{analogWrite (led, random (10,15));
delay (30);}
}
Я думаю,что добавление новой строки с более высокими случайными состояниями светодиодов (например, 50 100) должно быть в порядке, но тогда задержка, влияющая на скорость мерцания, слишком мала и делает бесполезным слияние обеих строк, так как она мгновенно станет самой яркой. Есть ли какой-нибудь способ задержать первую тусклую строку на некоторое время, затем перейти к следующей более яркой строке и так далее, не влияя на задержку фильтрации? Любая помощь будет признательна
Спасибо!
@user194312, 👍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);
}
- AnalogWrite никогда не выводит ненулевое напряжение
- «Вручную» генерация ШИМ-сигнала
- Чтение аналогового значения при генерации сигнала ШИМ
- Arduino включение/затухание 5 светодиодов, схема действия
- Почему простое мигание светодиодом не работает при использовании ШИМ mbed.h и Arduino Nano BLE?
- Как яркость света остается постоянной, когда мы увеличиваем частоту стробоскопа
- Питание светодиодной ленты - Сколько ампер?
- Какова частота PWM-выхода на Arduino
сначала изучите пример BlinkWithouDelay, @Juraj
@Juraj спасибо за ваш ответ juraj,уже несколько раз играл с милисом,но все,что он делает,это держит линию, в то время как другая линия перекрывает ее(что хорошо для косметических целей, но я не хотел тратить ресурсы), и это становится слишком сложным, если я хочу обратиться каждая строка с каждым своим милисом, @user194312
у вас есть только один светодиод?, @Juraj
@Juraj у меня есть 1 провод,чтобы распределить этот эффект от контакта 9,я считаю, что могу включить столько светодиодов, сколько захочу, с arduino или без него позже, так что да, вы можете сказать 1 светодиод, но не совсем , @user194312
затем добавьте второй analogWrite и задержку после него, @Juraj