Рейтинг:
16
CPallini
В качестве простого подхода вы можете (случайным образом) выбрать, сколько реле мог быть ON
в данный момент (скажем MAX_ON
, это просто rand()%4
).
Затем повторите MAX_ON
раз, выбирая на каждой итерации случайное реле (rand()%7
). Возможное повторение ретрансляции не приведет к аннулированию (мог) предположение.
[Обновление]
Что-то вроде (предупреждение: не проверено)
for (;;)
{
int max_on = random(4);
int n;
for (n=0; n<max_on; ++n)
{
digitalWrite(random(2,10), LOW);
}
delay(random(1,31)); // wait for some time (between 1 and 30 seconds)
}
[/Обновление]
Member 13390625
Это решение звучит довольно просто для такого новичка, как я, какую часть моего исходного кода я бы изменил? Сработает ли это?
digitalWrite(random ()%4)), LOW); / / устанавливает максимальное реле random on
digitalWrite(random ()%7)), LOW ; / / устанавливает максимальное время включения
задержка (random (time1, time2)); / / подождите некоторое время (от 1 до 30 секунд) digitalWrite(random(2,10), HIGH); / / выключает случайное реле
задержка(случайная (time1, time2)); / / подождите некоторое время (от 1 до 30 секунд)
Если этот код будет работать, будет ли он работать в постоянном цикле?
Овации
Марк.
CPallini
Смотрите мое обновленное решение.
Member 13390625
Спасибо за вашу помощь, я понятия не имею, куда вставить эту инструкцию в свой код, который я перечислил ранее....Я скопировал ваш обновленный код в программу Arduino IDE....Штука ... и нажал кнопку проверки, продолжая получать сообщения, похожие на это:
состояние выхода 1
ожидается ')' перед ';' маркер
Что я сделал не так?
CPallini
Извините, в моем коде была ошибка. Теперь это должно быть исправлено.
Member 13390625
Привет, спасибо за время и усилия, чтобы помочь мне,
Это то, что я сделал, объединив мой исходный код с вашим пересмотренным кодом. Надеюсь, я правильно сложил их вместе. К сожалению, если это правильное кодирование,
#определение времени 1 100
#определение time2 3000
недействительными установки()
{
pinMode (2, выход); / / реле 1
pinMode(3, выход); / / реле 2
pinMode(4, выход); / / реле 3
pinMode(5, выход); / / реле 4
pinMode(6, выход); / / реле 5
pinMode(7, выход); / / реле 6
pinMode(8, выход); / / реле 7
pinMode(9, выход); / / реле 8
задержка (50); / / проверьте, что все реле неактивны при сбросе
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
//--(окончательная настройка )---
пустая петля()
{
для (;;)
{
int max_on = random(4);
int n;
для (n=0; n< max_on; ++n)
{
digitalWrite (random(2,10), LOW);
}
задержка(случайная(1,31)); / / подождите некоторое время (от 1 до 30 секунд)
}
Я получаю этот код ошибки при проверке с помощью Arduino IDE:
состояние выхода 1
ожидаемый '}' в конце ввода
Я что-то сломал?
Я думаю, что должен оставаться механиком VW, это кодирование для меня совершенно чужой язык.(Гайки и болты я действительно понимаю) ха-ха.
CPallini
На самом деле в вашей программе отсутствует'}'. Просто добавьте закрывающую фигурную скобку в самом конце.
Между прочим. В следующий раз, когда мне понадобится механик, что ж, готовься :-)
Member 13390625
Вот чего я добился до сих пор; я изменил некоторые цифры, в основном временную задержку, снизил случайное число с 4 до 2, 3, но даже делая это из предоставленного вами кода, я все равно могу получить до 5 реле, работающих одновременно. Однако среднее значение равно 4, что находится в пределах моей компетенции. В нем все еще есть элемент неожиданности. Новый код, приведенный ниже (слегка измененный)
[код]
#определение времени 1 1000
#определение time2 4000
недействительными установки()
{
pinMode (2, выход); / / реле 1
pinMode(3, выход); / / реле 2
pinMode(4, выход); / / реле 3
pinMode(5, выход); / / реле 4
pinMode(6, выход); / / реле 5
pinMode(7, выход); / / реле 6
pinMode(8, выход); / / реле 7
pinMode(9, выход); / / реле 8
задержка (50); / / проверьте, что все реле неактивны при сбросе
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
}
//--(окончательная настройка )---
пустая петля ()
// для (;;)
{
int max_on = random(2, 3);
int n;
// for (n = 0; n < max_on; ++n)
digitalWrite (random(2, 10), LOW); / / устанавливает случайное реле на
задержка (случайная(time1, time2)); / / подождите некоторое время (от 10 до 40 секунд
digitalWrite (random(2, 10), HIGH); / / выключает случайное реле
задержка (случайная(time1, time2)); / / подождите некоторое время (от 10 до 40 секунд)
}
CPallini
Код неправильный: он должен записывать включенные реле, чтобы отключить их. Предположим,вы хотите включить максимум 3 реле. Затем
пустая петля
{
инт max_on = случайное(2,3);
int n;
int rel[3];
для (n=0; n< 3; ++n)
{
rel[n] = random(2,10); / / случайным образом выбираем реле
digitalWrite( rel[n], LOW); / / включите его
}
задержка (случайная (time1, time2)); // некоторая задержка
для (n=0; n< 3; ++n)
{
digitalWrite( rel[n], HIGH); / / выключите записанное реле
}
}
Member 13390625
Большое спасибо, ваш код не прошел проверку, но я настаивал и по какой-то странной причине дополнительный } в конце кода исправил это. Я запустил его в течение нескольких часов в тестовом режиме, и он работает очень хорошо. Я подключу свой анимационный реквизит к ретрансляторам в выходные и посмотрю, как они все функционируют, скрестив пальцы, они будут вести себя так, как ожидалось.
Еще раз....большое спасибо.
Arduino Mp3-плеер следующий, для моего окружающего звука для моего дисплея.
Какие-нибудь советы? кроме того ... не делай этого!!!! ха-ха...
Рейтинг:
0
Patrice T
Цитата:
У меня есть код, написанный ниже, чтобы управлять 8 реле в случайном порядке.
Случайный означает что-либо между 0 и 8 реле.
Чтобы получить 3 реле из 8, вы должны использовать метод под названием
шарканье.
шарканье
Вы должны построить программу, которая будет имитировать перетасовку карт.
Скажем, у вас есть колода из 8 карт, 5 карт черного цвета и 3 карты красного.
Вы выбираете 1 наугад из 8 карт и убираете его из колоды.
Вы выбираете 1 наугад из оставшихся 7 карт и убираете его из колоды.
И так далее...
Как это работает в программе ?
Установите массив размером 8, Установите 5 элементов в 0 и 3 элемента в 1.
Выберите случайное число от 1 до 8, замените этот элемент элементом 1.
Выберите случайное число от 2 до 8, замените этот элемент на элемент 2.
Выберите случайное число от 3 до 8, замените этот элемент на элемент 3.
...
Результат в массиве-это положение ваших реле.