Всем привет!
Я не очень силён в программировании, но кое-что уже могу
Написал вот такой код хаотичного моргания двумя светодиодами с использованием delay()
Код работает. Arduino NANO.
А перевести код на использование millis() не могу даже предположить как потому что использую random()
Кто может помочь? Буду признателен!
int BlueLED = 3; // Синий светодиод
int WhiteLED = 4; // Белый светодиод
int StartWork = true; // Старт / стоп работы
int COUNT_CYCLE = 1; // количество циклов запуска
void setup() {
pinMode (WhiteLED, OUTPUT);
pinMode (BlueLED, OUTPUT);
}
void loop() {
// Условие для запуска процедур
if (StartWork)
{
for (int x = 1; x <= COUNT_CYCLE; x++)
{
welder(); // Вызов
}
}
StartWork = false; // останавливаем
shut_down(); // выключаем все светодиоды
}
void welder() { // Мигание белым и сисним светодиодами
int cycle = random(5, 20); // Случайным образом устанавливает время циклов
for (int i = 0; i < cycle; i++)
{
// моргнём белым
digitalWrite(WhiteLED, HIGH);
delay(random(10));
digitalWrite(WhiteLED, LOW);
delay(random(100));
// моргнём синим
digitalWrite(BlueLED, HIGH);
delay(random(30));
digitalWrite(BlueLED, LOW);
delay(random(200));
}
}
void shut_down()
{
// Выключить все светодиоды
digitalWrite(WhiteLED, LOW);
digitalWrite(BlueLED, LOW);
delay(random(2000, 5000)); // случайная пауза
StartWork = true; // перезапуск мигания
}
Берёте из примеров скетч BlinkWithoutDelay.ino
Там есть один раз заданный interval. А вам его надо устанавливать с помощью рандома.
Первый раз делаете это например в setup.
А далее каждый раз, когда меняете состояние диода, тоже присваивайте этому interval новое рандомное значение.
Си, Ардуино. Программа выдаёт высокий - низкий уровень со случайными интервалами на вывод D13 платы arduino nano/
Для реализации программы на Arduino, которая будет выдавать высокий и низкий уровень на выводе D13 с случайными интервалами, можно использовать следующий код:
const int ledPin = 13; // Пин D13
unsigned long previousMillis = 0; // Переменная для хранения предыдущего времени
long interval; // Переменная для хранения случайного интервала
void setup() {
pinMode(ledPin, OUTPUT); // Настраиваем пин D13 как выход
randomSeed(analogRead(0)); // Инициализируем генератор случайных чисел
}
void loop() {
unsigned long currentMillis = millis(); // Получаем текущее время
// Проверяем, прошло ли время для изменения состояния
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Сохраняем текущее время
// Генерируем случайный интервал от 500ms до 2000ms
interval = random(500, 2000);
// Меняем состояние выхода
digitalWrite(ledPin, !digitalRead(ledPin)); // Смена состояния на противоположное
}
}
Описание кода:
Настройка пинов: В setup() настраиваем пин D13 как выход.
Генерация случайных чисел: Функция randomSeed(analogRead(0)); используется для инициализации генератора случайных чисел, чтобы результаты были различны при каждом запуске.
Основной цикл: В loop() мы получаем текущее время и проверяем, прошло ли время, достаточное для смены состояния. Если да, то мы генерируем новый случайный интервал от 500 до 2000 миллисекунд.
Переключение состояния:digitalWrite(ledPin, !digitalRead(ledPin)); меняет состояние на выходе на противоположное (высокий/низкий уровень).
Загрузка кода:
Скопируйте этот код и вставьте его в вашу среду разработки Arduino (например, Arduino IDE). Загрузите его на вашу плату Arduino Nano, и вы увидите мигание встроенного светодиода на выводе D13 с случайными интервалами.
Да. И не забудте кроме интервалов для каждого светодиода ещё и свой previousMillis завести.
Два ещё ладно, но если захочется больше, то однозначно стоит послушать, что @Estorsky советует.
ты же утверждал! тут - это форум, степень помощи разная, если ты никому ничем не помогаешь, это не значит что это делают все, вот буквально на днях код человеку поправил и, даже заработало )))
Добавил в просьбу к ИИ слово класс. И про светодиоды ничего не говорил - шаман однако
Спойлер
Си++, Ардуино. Программа создаёт класс для выдачи высокого - низкого уровень со случайными интервалами на выводы платы arduino nano и с применением класса управляет выводами D13, D12, D11.
Для создания класса в C++ для Arduino, который будет управлять выводами D13, D12 и D11 с выдачей высокого и низкого уровня со случайными интервалами, можно использовать следующий код:
class RandomBlinker {
public:
RandomBlinker(int pin) : pin(pin), interval(0), previousMillis(0) {
pinMode(pin, OUTPUT); // Настраиваем пин как выход
randomSeed(analogRead(0)); // Инициализируем генератор случайных чисел
// Генерируем начальный интервал
setRandomInterval();
}
void update() {
unsigned long currentMillis = millis(); // Получаем текущее время
// Проверяем, прошло ли время для изменения состояния
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Сохраняем текущее время
// Меняем состояние выхода
digitalWrite(pin, !digitalRead(pin)); // Смена состояния на противоположное
// Устанавливаем новый интервал
setRandomInterval();
}
}
private:
int pin; // Номер пина
unsigned long previousMillis; // Переменная для хранения предыдущего времени
long interval; // Переменная для хранения случайного интервала
void setRandomInterval() {
interval = random(500, 2000); // Генерируем случайный интервал от 500ms до 2000ms
}
};
RandomBlinker blinker1(13);
RandomBlinker blinker2(12);
RandomBlinker blinker3(11);
void setup() {
// В setup() ничего не нужно инициализировать,
// так как это происходит в конструкторе класса
}
void loop() {
// Обновляем статус всех блестящих объектов
blinker1.update();
blinker2.update();
blinker3.update();
}
Описание кода:
Класс RandomBlinker:
* Конструктор класса принимает номер пина и инициализирует его как выход.
* Используется randomSeed(analogRead(0)); для инициализации генератора случайных чисел.
* Метод setRandomInterval() генерирует случайный интервал для мигания LED.
* Метод update() проверяет, прошло ли достаточно времени для смены состояния, и переключает состояние LED на соответствующем пине.
Создание экземпляров класса:
* Ваша программа создает три экземпляра класса RandomBlinker для пинов D13, D12 и D11.
Обновление в основной программе:
* В loop() вызывается метод update() для каждого экземпляра класса, чтобы обновить состояния светодиодов.
Загрузка кода:
Скопируйте этот код в вашу среду разработки Arduino (например, Arduino IDE). Загрузите его на вашу плату Arduino Nano, и вы увидите, как светодиоды на выводах D13, D12 и D11 мигают с случайными интервалами