Прошу помочь с редакцией кода.

ssg
Offline
Зарегистрирован: 17.07.2021

Добрый день.

Внук в этом году закончил первый класс.Купил ему Аурдино уно. Вот теперь приходиться учиться самому.Копирую из уроков в интернете, пытаюсь писать сам детские скетчи, а внук собирает схемки на макетной плате, благо пайка не нужна.Самому мне , честно говоря, смотреть как мигает диод не сильно интересно, но тут главное творчество внука, а ему нравиться.Хотел отдать его в кружок робототехники, но сейчас каникулы да и коронавирус. Ну это так лирика.

Замахнулись мы на "дорогого нам Шекспира", проект с несколькими группами светодиодов. Хотя по сути та же мигалка.

Алгоритм такой:

1.Есть три группы выводов со своими светодиодами. У каждой группы свой цвет светодиодов.Работа каждой группы ограничена случайным суммарным кол-вом включений выводов этой группы.Одновременно зажигается только один светодиод.

2.В первой группе 5 выводов. Случайным образом выбирается один из выводов и включается светодиод этого  вывода.Время свечения светодиода на этом выходе тоже рандомное. По истечению рандомного времени задержки выбирается случайно следующий вывод этой из этой группы и также светит свое случайное время и засыпает. Т.е. каждый раз случайно выбирается новый выход, каждый раз случайное время горит светодиод этого выхода и каждый раз случайное время ожидание следующего включение. И в добавок еще и суммарное кол-во включений каждый раз случайно с началом этого цикла. Т.е. в первом включении цикла это быть может 100 включений, во втором включении цикла может быть 372 включения и так далее. По окончанию  рандомного кол-ва включений выходим из первого цикла и переходим ко второму циклу.

3.Во второй группе выводов используется 3 вывода.Работа второго цикла аналогична работе первого цикла. Отличие в кол-ве включений,в ко-ве выводов , времени включении вывода и задержке между выводами.Ну это на код никак не влияет.По окончанию рандомного кол-ва включений выходим из второго цикла и переходим к третьему циклу.

4.В третьей группе только один вывод.Работа третьего цикла аналогична работе  второго цикла. Отличее в кол-ве выводов По окончанию рандомного кол-ва включений выходим из третьего цикла.

5.После окончания работы третьего цикла ожидаем несколько секунд и все повторяется с первой строчки главной функции.

Прошу проверить правильно ли я написал код , может быть исправит его или сократить. Код может быть слишком информативен , но писал его сам для себя. 



void setup() 
{
   // инициализация всех 9 пинов микросхемы как выходы
   for (int i=0; i<=9; i=i+1) pinMode (i, OUTPUT);
}
void loop ()
{
//---------------------------ПЕРВЫЙ ЦИКЛ-------------------------------------------------------------
//ВРЕМЯ РАБОТЫ ПЕРВОГО ЦИКЛА  С ОГРАНИЧЕНИЕМ ПО СЛУЧАЙНОМУ КОЛ-ВУ ВКЛЮЧЕНИЙ.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ КОЛ-ВО ВКЛЮЧЕНИЙ ПЕРВОЙ ГРУППЫ ВЫХОДОВ ОТ 100 ДО 600 РАЗ.
//ТО ЕСТЬ СУМАРНОЕ КОЛ-ВО ВКЛЮЧЕНИЙ  ВЫХОДОВ С 0 ПО 5 (0+1+2+3+4) ДОЛЖНО СОСТАВЛЯТЬ РАНДОМНО ОТ 100 ДО 600 РАЗ.ФУНКЦИЯ for();
//СЛУЧАЙНЫМ ОБРАЗОМ ИЗ ВЫХОДОВ С 0 ПО 5 ВЫБИРАЕТСЯ ВЫХОД МИКРОКОНТРОЛЕРА КОТОРЫЙ БУДЕТ ВКЛЮЧЕН В ДАННЫЙ МОМЕНТ ВРЕМЕНИ.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ СВЕЧЕНИЯ СВЕТОДИОДА ВЫБРАННОГО ВЫХОДА.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ ЗАДЕРЖКИ ПЕРЕД ВКЛЮЧЕНИЕМ СВЕТОДИОДА СЛЕДУЮЩЕГО СЛУЧАЙНОГО ВЫБРАННОГО ВЫХОДА.
//ЧИСЛО ВКЛЮЧЕНИЙ ПОЛУЧАЕМ int j=random (100, 600).

//генерируем случайное суммарное число включений случайных выводов 0,1,2,3,4.
//здесь будет храниться кол-во включений первого цикла 
//суммарное кол-во включений выходов с 0 по 5 (0+1+2+3+4) генерируется случайным образом от 100 до 600 раз.
int j=random (100, 600) 

for (int i = 0; i < j; i++)//пока значение счетчика меньше переменной j будут выполняться  команды ниже и продолжаться первый цикл.
 {
    // random (0, 5) генерирует сигналы для выбора случайных выходов с 0 по 5. Выход 5 не считается.   
    // при каждом проходе каждый раз будет выбираться новый выход, хотя возможны повторения
    int ran = random (0, 5);
    digitalWrite (ran, HIGH);// digitalWrite (random (0, 5), HIGH); // Включение светодиода случайно выбранного выхода. 
    
    // random (55, 100) генерирует случайное время  свечения выбранного выхода с 0 до 5  от 55мс. до 100мс. .
    delay (random (55, 100); // Светим светодиодом случайно выбранного выхода.

    // после свечения случайно выбранный выход  с 0 по 5 гасится. Выход 5 не считается.
    digitalWrite (ran, LOW);// digitalWrite (random (0, 5), LOW);   // Выключение светодиода случайно выбранного выхода.

    // random (60, 100) генерирует случайное время  паузы между свечениями светодиодом случайно выбранного выхода с 0 до 5 от 60мс. до 100мс.
    delay (random (60, 100)); // Ждем

   if (i >= j) break; // в случае достижения случайно выбранного числа включений j выходим из цикла и переходим к исполнению следующей строки кода.
 }
//---------------------------КОНЕЦ РАБОТЫ ПЕРВОГО ЦИКЛА ПЕРЕХОДИМ К ВТОРОМУ ЦИКЛУ-------------------------------------

//---------------------------ВТОРОЙ ЦИКЛ-----------------------------------------------------------------------
//ВРЕМЯ РАБОТЫ ВТОРОГО ЦИКЛА  С ОГРАНИЧЕНИЕМ ПО СЛУЧАЙНОМУ КОЛ-ВУ ВКЛЮЧЕНИЙ.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ КОЛ-ВО ВКЛЮЧЕНИЙ ВТОРОЙ ГРУППЫ ВЫХОДОВ ОТ 10 ДО 60 РАЗ.
//ТО ЕСТЬ СУМАРНОЕ КОЛ-ВО ВКЛЮЧЕНИЙ  ВЫХОДОВ С 5 ПО 8 (5+6+7) ДОЛЖНО СОСТАВЛЯТЬ РАНДОМНО ОТ 10 ДО 60 РАЗ.ФУНКЦИЯ for();
//СЛУЧАЙНЫМ ОБРАЗОМ ИЗ ВЫХОДОВ С 5 ПО 8 ВЫБИРАЕТСЯ ВЫХОД МИКРОКОНТРОЛЕРА КОТОРЫЙ БУДЕТ ВКЛЮЧЕН В ДАННЫЙ МОМЕНТ ВРЕМЕНИ.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ СВЕЧЕНИЯ СВЕТОДИОДА СЛУЧАЙНО ВЫБРАННОГО ВЫХОДА.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ ЗАДЕРЖКИ ПЕРЕД ВКЛЮЧЕНИЕМ СВЕТОДИОДА СЛЕДУЮЩЕГО СЛУЧАЙНОГО ВЫБРАННОГО ВЫХОДА.
//ЧИСЛО ВКЛЮЧЕНИЙ ПОЛУЧАЕМ int j=random (10, 60).

//генерируем случайное суммарное число включений случайных выводов 5,6,7.
//здесь будет храниться кол-во включений второго цикла. 
//суммарное кол-во включений выходов с 5 по 8 (5+6+7) генерируется случайным образом от 10 до 60 раз. 
int n=random (10, 60)

for (int i = 0; i < n; i++)//пока значение счетчика меньше переменной n будут выполняться  команды ниже и продолжаться второй цикл.
 {
    // random (5, 8) генерирует сигналы для выбора случайных выходов с 5 по 8. Выход 8 не считается.
    int ran = random (5, 8);
    digitalWrite (ran, HIGH);// digitalWrite (random (5 ,8), HIGH); // Включение 
    
    // random (55, 100) генерирует случайное время  свечения выбранного выхода с 5 до 8  от 55мс. до 100мс. .
    delay (random (55, 100); // Светим

    // после свечения случайно выбранный выход  с 5 по 8 гасится. Выход 8 не считается.
    digitalWrite (ran, LOW);// digitalWrite (random (5, 8), LOW);   // Выключение 

    // random (60, 100) генерирует случайное время  между свечениями светодиодом случайно выбранного выхода с 5 до 8  от 60мс. до 100мс.
    delay (random (60, 100)); // Ждем

   if (i >= n) break; // в случае достижения случайно выбранного числа включений n выходим из цикла и переходим к исполнению следующей строки кода.
 }
//-----------------------------КОНЕЦ РАБОТЫ ВТОРОГО ЦИКЛА ПЕРЕХОДИМ К ТРЕТЬЕМУ ЦИКЛУ-----------------------------------------

//---------------------------ТРЕТИЙ ЦИКЛ------------------------------------------------------------------------------
//ВРЕМЯ РАБОТЫ ТРЕТЬЕГО ЦИКЛА  С ОГРАНИЧЕНИЕМ ПО СЛУЧАЙНОМУ КОЛ-ВУ ВКЛЮЧЕНИЙ.
//НА ВЫХОД 8 СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ КОЛЛИЧЕСТВО ВКДЮЧЕНИЙ ОТ 10 ДО 60 РАЗ.
//ТО ЕСТЬ СУМАРНОЕ КОЛ-ВО ВКЛЮЧЕНИЙ  ВЫХОДА 8 ДОЛЖНО СОСТАВЛЯТЬ РАНДОМНО ОТ 10 ДО 60 РАЗ.ФУНКЦИЯ for();.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ СВЕЧЕНИЯ СВЕТОДИОДА СЛУЧАЙНО ВЫБРАННОГО ВЫХОДА.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ ЗАДЕРЖКИ ПЕРЕД СЛЕДУЮЩИМ ВКЛЮЧЕНИЕМ ВЫХОДА 8.

//генерируем случайное суммарное число включений  выводa 8
//здесь будет храниться кол-во включений третьего цикла 
//суммарное кол-во включений выхода 8 генерируется случайным образом от 10 до 60 раз.
int n=random (10, 60)

for (int i = 0; i < n; i++)//пока значение счетчика меньше переменной n будут выполняться  команды ниже и продолжаться третий цикл. 
 {
   digitalWrite(8, HIGH); // Включение 

   // random (80, 150) генерирует случайное время  свечения от 80 до 150 мс. .
   delay (random (80, 150));  // Светим

   digitalWrite(8, LOW);  // Выключение 

   // random (80, 150) генерирует случайное время  между свечениями от 80 до 150 мс.
   delay (random (80, 150)); // Ждем
   
   if (i >= n) break; // в случае достижения случайно выбранного числа включений выходим из цикла и переходим к исполнению следующей строки кода.
 }
//---------------------------КОНЕЦ РАБОТЫ ТРЕТЬЕГО ЦИКЛА-----------------------------------------------------

//---------------------------ОПЯТЬ НАЧИНАЕТСЯ ПЕРВЫЙ ЦИКЛ , ЗАТЕМ ВТОРОЙ, ЗАТЕМ ТРЕТИЙ.

//---------------------------ТРИ ПОСЛЕДОВАТЕЛЬНО (ПЕРВЫЙ+ВТОРОЙ+ТРЕТИЙ) ИСПОЛНЕННЫХ ЦИКЛА СОСТАВЛЯЮТ ОДИН ЭТАП.

//---------------------------МЕЖДУ ЭТАПАМИ СУЩЕСТВУЕТ СЛУЧАЙНОЕ ВРЕМЯ ЗАДЕРЖКИ 1-3 СЕКУНД  random(1 000, 3 000);
 delay (random (1000, 3000)); // Ждем. Рамдомное время паузы перед началом следующего этапа 1-3 секунды. Переходим в начало главной функции loop ();.
}

Сам код:

sadman41
Offline
Зарегистрирован: 19.10.2016

А Вы просто в сетапе println() вот этой величины сделайте: int j=random (100, 600).

Ну ребутните несколько раз и посмотрите итог.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. А Вы на компилируемость приведенный выше код проверяли?

2. Код, написанный с использованием delay(), как правило, является нерасширяемым. Т.е. когда возникнет вопрос "а как мне объединить два скетча в один?", сразу оказывается, что код с delay() для такого объединения не подходит. Поэтому возьмите два примера "blink" и "blink without delay", разберитесь, чем они друг от друга отличаются (тогда как делают одно и то же), и перепишите свой код подобно второму примеру.

3. Для контроля сразу предложу задачу: напишите код, в котором два светодиода будут одновременно мигать каждый со своей частотой. А потом добавьте к ним еще 1-2 светодиода (опять каждый со своей частотой).

4. И еще обращу внимание на неудачный выбор номеров пинов: в Ардуино Уно первые дыв пина (0 и 1) используются последовательным портом, поэтому использовать их в каком-либо другом качестве крайне нежелательно.

ssg
Offline
Зарегистрирован: 17.07.2021

Спасибо всем кто откликнулся.

1.Выбор выводов как и время задержек и горения достаточно абстрактен. Схема собирается без пайки. Поэтому перестановка проводов в пины контролера происходит элементарно. Но за указание про 0 и 1 выводы спасибо, учту.

2.sadman41- Вы имеете в виду что будет возвращать int j=random(100,600)? И будут ли возвращаться разные значения? Я пытался написать , что случайное кол-во включений разное для разных циклов. Объявили перед началом первого цикла чему равно j и включился счетчик. Следующий раз опять  перед началом первого цикла определим новое случайное значение j.Ваше предложение пока ставит меня в тупик, сказывается отсутствие знаний и опыта. Просто я инженер по металлу, и терминология программистов мне не близка.Хотя конечно признаю это моя проблема , а не Ваша.Может поможете с кодом, как сделать то что Вы предлагаете.

3.andriano-спасибо за рекомендации.Мигаем светодиодом без delay() | Аппаратная платформа Arduino с этим знакомился поверхностно.Теперь попробую вникнуть более основательно.

Все таки мне не понятно почему , то что хочу сделать я, нельзя сделать с delay()? Вроде простая мигалка : зажгли диод-пождали-погасили-подождали-........Я понимаю, что много не знаю и не понимаю (извините за тавтологию):)). А если я напишу так:

 int a=random (60, 100);
 delay (a);

 

 

lilik
Offline
Зарегистрирован: 19.10.2017

ssg пишет:

Самому мне , честно говоря, смотреть как мигает диод не сильно интересно

Да вы что!?

Всё прогрессивное человечество строит такие штуки :-)

Pyotr
Offline
Зарегистрирован: 12.03.2014

ssg, пример пошагового выполнения действий с миллис http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pesochnitsa-novichok-prochti?page=1#comment-457309

ssg
Offline
Зарегистрирован: 17.07.2021

:))

Ну во первых я наверное ретроград:))Во вторых я на картинке насчитал там больше чем один диод.Ну а если серьезно, то я помню бум лет десять назад на спектрометры, кубы и т.д. Очень интересным был ролик из автосалона(то ли немцы, то ли японцы): в павильоне сверху спускались наверное управляемые светодиодные ленты. Тоже в проекции получался огромный светодиодный куб. Программа была написана так, что огоньки светодиодов падали вниз , но таким образом , что получалось изображение автомобиля в натуральную величину.Марку не помню.Нечто напоминающее голограмму.Вот это да было красиво.

Upper
Offline
Зарегистрирован: 23.06.2020

ssg пишет:

Прошу проверить правильно ли я написал код , может быть исправит его или сократить. Код может быть слишком информативен , но писал его сам для себя.

Вы сами пробовали этот код запускать?
Если не пробовали, то почему?

Если пробовали, то что не работает так как задумано?

ssg
Offline
Зарегистрирован: 17.07.2021

Pyotr- спасибо за ссылку.Посмотрел. Буду изучать. Я искренне не понимаю почему все отговаривают меня от delay()? Светодиоды загораются  только строго по одному.Ну и пусть что в это время программа "замораживается".Вся идея в рандомности всех событий в тех пределах которые я задал.Ведь все равно это простая мигалка по сути.

 

Upper-добрый вечер.Нет не пробовал.Во первых я сейчас дома и писал этот код в среде mql4. Это тоже производная С. Используется для написания советников и индикаторов для форекса, поэтому синтаксис похож местами, частности циклы,переменные и некоторые операторы.Но конечно при компиляции кода он будет выдавать кучу ошибок.Среда для ардуино на компьютере у внука, а они сейчас в отпуске и приедут недели через две.Код писался с изучением кусков кодов из разных примеров. Подумал, что пака их нет написать рабочий код, вот и попросил помощи и проверки.

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

То есть вы предполагаете использовать форум вместо компилятора? Боюсь вы что-то не понимаете в этой жизни

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ssg пишет:

Буду изучать. Я искренне не понимаю почему все отговаривают меня от delay()? Светодиоды загораются  только строго по одному.

Потому, что это тупик.

Вы так и собираетесь всю жизнь мигать одним единственным светодиодом?

Я же приводил пример. Кстати, формулировка предельно проста: помигать двумя светодиодами с разными (не кратными) частотами.

Цитата:

Среда для ардуино на компьютере у внука, а они сейчас в отпуске и приедут недели через две.Код писался с изучением кусков кодов из разных примеров. Подумал, что пака их нет написать рабочий код, вот и попросил помощи и проверки.

И что мешает установить среду на Ваш компьютер? Даже если у Вас нет второй Ардуины, это не помешает Вам попытаться откомпилировать и найти ошибки.

А просить других проверять Ваш код, не прошедший компиляцию, - mauvais ton: квалифицированный программист не должен выполнять работу, с которой легко справляется тупая железка. 

Upper
Offline
Зарегистрирован: 23.06.2020

To ssg

Есть симуляторы Arduino в том числе и онлайн. НапримерAutodesk Tinkercad Circuits Arduino.

Офлайн, например PROTEUS.

 
AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

ssg Думаю sadman41 хотел Вас подвести к функции RandomSeed()

http://arduino.ru/Reference/RandomSeed

Кстати, в строке 004 кода из #1 Вы инициализируете 10 пинов.

 

ssg
Offline
Зарегистрирован: 17.07.2021

b707-здравствуйте.Думаю, что Вы не правы в своих оценках.И форум я не собирался использовать вместо компилятора.

andrlano-ваше задание.Работаем с задержками без delay() на arduino. (wreckage.ru). Да вы правы очень усиленно заниматься программированием аурдино я не планирую. Пусть этим занимается внук в гимназии и в кружке. Если бы Вы предложили мне посмотреть ресурс где проектируют суда и корабли, порты и плотины , то есть по моей специализации, то с удовольствием посмотрел бы. В настоящий момент появилась эта идея и попытался ее реализовать. Установить среду для ардуино для разового события честно говоря не планировал. Я попросил у форума мнения о правильности написания скетча, всего лишь.Извините, но ситуация похожа на вот такой диалог: вопрос- подскажите я правильно я замесил тесто для хлеба? ответ-ты что собираешься всю жизнь есть хлеб, иди учись печь пирожные  торды, вот тогда и поешь. Прошу прощения если был слишком резок.

sadman41
Offline
Зарегистрирован: 19.10.2016

ssg пишет:
Извините, но ситуация похожа на вот такой диалог: вопрос- подскажите я правильно я замесил тесто для хлеба? ответ-ты что собираешься всю жизнь есть хлеб, иди учись печь пирожные  торды, вот тогда и поешь.

Допустим, что ответ "нет". Что дальше? 

Все равно, что я бы собрался у себя на даче плотину строить из гипсокартона и спрашивал бы - правильно или нет.

ssg
Offline
Зарегистрирован: 17.07.2021

AndreyD-пример функции приведенный Вами мне знаком но не подходит.У меня стоит задача рандомности в тех рамках которые я сам установлю.Ведь подумайте сами я хочу получить рандомный выход а мне RandomSeed() выдаст число 592, и где я буду брать этот выход. Или выдаст задержу часа на три. Нет она не подходит в силу непредсказуемости границ. Спасибо.

ssg
Offline
Зарегистрирован: 17.07.2021

sadman41 - зря иронизируете. Вопрос в размере плотины. Вы наверное не в курсе , но из гипсокартона делают не съемную опалубку для фундамента и стен.Вы можете сказать прямо , без обиняков,  почему код не будет работать? Допустим есть только первый блок и всё.

void setup() 
{
   // инициализация всех 9 пинов микросхемы как выходы
   for (int i=0; i<=9; i=i+1) pinMode (i, OUTPUT);
}
void loop ()
{
//---------------------------ПЕРВЫЙ ЦИКЛ-------------------------------------------------------------
//ВРЕМЯ РАБОТЫ ПЕРВОГО ЦИКЛА  С ОГРАНИЧЕНИЕМ ПО СЛУЧАЙНОМУ КОЛ-ВУ ВКЛЮЧЕНИЙ.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ КОЛ-ВО ВКЛЮЧЕНИЙ ПЕРВОЙ ГРУППЫ ВЫХОДОВ ОТ 100 ДО 600 РАЗ.
//ТО ЕСТЬ СУМАРНОЕ КОЛ-ВО ВКЛЮЧЕНИЙ  ВЫХОДОВ С 0 ПО 5 (0+1+2+3+4) ДОЛЖНО СОСТАВЛЯТЬ РАНДОМНО ОТ 100 ДО 600 РАЗ.ФУНКЦИЯ for();
//СЛУЧАЙНЫМ ОБРАЗОМ ИЗ ВЫХОДОВ С 0 ПО 5 ВЫБИРАЕТСЯ ВЫХОД МИКРОКОНТРОЛЕРА КОТОРЫЙ БУДЕТ ВКЛЮЧЕН В ДАННЫЙ МОМЕНТ ВРЕМЕНИ.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ СВЕЧЕНИЯ СВЕТОДИОДА ВЫБРАННОГО ВЫХОДА.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ ЗАДЕРЖКИ ПЕРЕД ВКЛЮЧЕНИЕМ СВЕТОДИОДА СЛЕДУЮЩЕГО СЛУЧАЙНОГО ВЫБРАННОГО ВЫХОДА.
//ЧИСЛО ВКЛЮЧЕНИЙ ПОЛУЧАЕМ int j=random (100, 600).

//генерируем случайное суммарное число включений случайных выводов 0,1,2,3,4.
//здесь будет храниться кол-во включений первого цикла 
//суммарное кол-во включений выходов с 0 по 5 (0+1+2+3+4) генерируется случайным образом от 100 до 600 раз.
int j=random (100, 600) 

for (int i = 0; i < j; i++)//пока значение счетчика меньше переменной j будут выполняться  команды ниже и продолжаться первый цикл.
 {
    // random (0, 5) генерирует сигналы для выбора случайных выходов с 0 по 5. Выход 5 не считается.   
    // при каждом проходе каждый раз будет выбираться новый выход, хотя возможны повторения
    int ran = random (0, 5);
    digitalWrite (ran, HIGH);// digitalWrite (random (0, 5), HIGH); // Включение светодиода случайно выбранного выхода. 
    
    // random (55, 100) генерирует случайное время  свечения выбранного выхода с 0 до 5  от 55мс. до 100мс. .
    delay (random (55, 100); // Светим светодиодом случайно выбранного выхода.

    // после свечения случайно выбранный выход  с 0 по 5 гасится. Выход 5 не считается.
    digitalWrite (ran, LOW);// digitalWrite (random (0, 5), LOW);   // Выключение светодиода случайно выбранного выхода.

    // random (60, 100) генерирует случайное время  паузы между свечениями светодиодом случайно выбранного выхода с 0 до 5 от 60мс. до 100мс.
    delay (random (60, 100)); // Ждем

   if (i >= j) break; // в случае достижения случайно выбранного числа включений j выходим из цикла и переходим к исполнению следующей строки кода.
 }}

 

ssg
Offline
Зарегистрирован: 17.07.2021

Upper-спасибо за ссылки.Попробую завтра найти и почитать.

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

Смысл этой функции в другом.

А так я что совсем стар и теперь первоклашкам уже ардуино покупают? Может лучше начать с такого?

 

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

Мужик, ты так и не понял. Никому нафик не нужно смотреть твой код. Ты должен делать это сам, в среде компилирования, чтобы видеть сообщение компилятора об ошибках.
А сейчас ты пишешь примерно следующее - мол самому тебе ради проверки кода даже ардуино иде ставить лень, поэтому давайте люди с форума будут искать мои ошибки, им же заняться нечем

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

И еще - совершенно непонятно, к чему вообще эти вопросы? Вы спрашиваете, правильно ли написан код - вам отвечают что не очень, а вы начинаете спорить и говорить, что вам "правильно" и не надо, вы углубляться в предмет не планируете и вообще сойдет абы как.
Нафига тогда спрашивать совета, если следовать ему вы не собираетесь?
Опять же, какой интерес нам тратить на вас время, если тема форума вас не интересует?

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

b707 Думаю здесь более интересный случай, типа помогите мне научить (заинтересовать) своего внука, когда я сам ничего не понимаю.

ssg Если что свою версию как начать заинтересовывать я выложил выше.

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

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ssg пишет:

b707-здравствуйте.Думаю, что Вы не правы в своих оценках.

Думать каждый человек может все, что угодно. Но, коль скоро он отваживается высказывать свое мнение вслух, ему необходимо помнить, что мнение может быть как квалифицированным, так, мягко говоря, не очень.

Вот лично на Вас какое мнение производит человек, который высказывается по вопросу, в котором совершенно не разбирается?

Цитата:

Да вы правы очень усиленно заниматься программированием аурдино я не планирую.

...

Установить среду для ардуино для разового события честно говоря не планировал.

Видите ли, установить среду Ардуино гораздо проще, чем отучиться сначала 6 лет в мединституте, а затем еще 2 - в ординатуре. Но если Вы хотите самостоятельно провести кому-нибудь операцию аппендицита, потратить 8 лет придется. Даже если Вы собираетесь провести эту операцию единственный раз в жизни.

ssg
Offline
Зарегистрирован: 17.07.2021

AndreyD-спасибо за ссылку.Пусть это его отец решает по рекомендации руководителя кружка. Благо , что у нас в Новосибирске с этим все в порядке.

randomSeed(seed)

Функция RandomSeed() инициализирует генератор псевдослучайных чисел. Генерируемая последовательность случайных чисел очень длинная, и всегда одна и та же. Точка в этой последовательности, с которой начинается генерация чисел, зависит от параметра seed.

Если при каждом запуске программы необходимо получать разные последовательности значений, генерируемых функцией random(), то необходимо инициализировать генератор псевдослучайных чисел со случайным параметром. Например, можно использовать значение, отдаваемое функцией analogRead() c неподключенного порта вход/выхода. 

В некоторых случаях необходимо получать одинаковую последовательность при каждом запуске программы на Arduino. В этом случае инициализировать генератор псевдослучайных чисел следует вызовом функции randomSeed() с фиксированным параметром.

Как же её можно по другому понять.

 

ssg
Offline
Зарегистрирован: 17.07.2021

 b707.Слышь, клоун, я с тобой водку не пил. Ты ее жрал с кем то другим. Я то мужик , а ты что баба или седячий, из фраеров будешь?

ssg
Offline
Зарегистрирован: 17.07.2021

andriano-я понимаю Ваш апломб как программиста передо мной , технарем. Но честное слово, если бы спросили у меня как рассчитать остойчивость судна или допустимую нагрузку шпунтованной причальной стенки я бы дал Вам хотя бы общий принципиальный ответ и не стал бы отсылать к учебникам.Хотя конечно некоторую литературы я бы рекомендовал прочитать.

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

Мужик, ты прочитал описание РандомСеед, и хоть оно по- русски ты нифига не понял. Эта функция не выдает случайных чисел, она не для этого, дерево

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ssg пишет:

Но честное слово, если бы спросили у меня как рассчитать остойчивость судна или допустимую нагрузку шпунтованной причальной стенки я бы дал Вам хотя бы общий принципиальный ответ и не стал бы отсылать к учебникам.

И даже не попросили бы выучить 4 действия арифметики и получить хотя бы общие представления о таблице умножения?

ssg
Offline
Зарегистрирован: 17.07.2021

andriano-я понимаю Ваш апломб как программиста передо мной , технарем. Но честное слово, если бы спросили у меня как рассчитать остойчивость судна или допустимую нагрузку шпунтованной причальной стенки я бы дал Вам хотя бы общий принципиальный ответ и не стал бы отсылать к учебникам.Хотя конечно некоторую литературы я бы рекомендовал прочитать.

Мне для бытовых нужд и необходимости вполне хватает моего умения сварщика, хотя это совершенно не значит , что меня можно допускать к сварочным работам на магистральном трубопроводе.Сорокалетний опыт вождения меня вполне устраивает, хотя и были небольшие аварии в том числе и по моей вине.Но даже с этим опытом мне на трассе Формулы 1 и ли Дакара делать нечего.

Так же и ардуино. Для совсем простых вещей (поморгать светодиодами, покрутить шаговый двигатель) примеров в интернете и прочитанного хватало. Захотелось сделать проект немного по сложнее.

Если по каким то причинам ( религия не позволяет, элитарность данного сообщества или бытовой снобизм, да хотя бы простое не желание) мне здесь не помогут, то подскажут в другом или дойду сам.

Я сам пришел сюда и попросил помощи, но клянчить ее не собираюсь. А тем более терпеть хамство от отдельных сопляков и быдла, пусть даже и возможно хороших программистов. Вас последняя фраза не касается, у нас с Вами достаточно культурное общение. Спокойной ночи

ssg
Offline
Зарегистрирован: 17.07.2021

andriano-я понимаю Ваш апломб как программиста передо мной , технарем. Но честное слово, если бы спросили у меня как рассчитать остойчивость судна или допустимую нагрузку шпунтованной причальной стенки я бы дал Вам хотя бы общий принципиальный ответ и не стал бы отсылать к учебникам.Хотя конечно некоторую литературы я бы рекомендовал прочитать.

Мне для бытовых нужд и необходимости вполне хватает моего умения сварщика, хотя это совершенно не значит , что меня можно допускать к сварочным работам на магистральном трубопроводе.Сорокалетний опыт вождения меня вполне устраивает, хотя и были небольшие аварии в том числе и по моей вине.Но даже с этим опытом мне на трассе Формулы 1 и ли Дакара делать нечего.

Так же и ардуино. Для совсем простых вещей (поморгать светодиодами, покрутить шаговый двигатель) примеров в интернете и прочитанного хватало. Захотелось сделать проект немного по сложнее.

Если по каким то причинам ( религия не позволяет, элитарность данного сообщества или бытовой снобизм, да хотя бы простое не желание) мне здесь не помогут, то подскажут в другом или дойду сам.

Я сам пришел сюда и попросил помощи, но клянчить ее не собираюсь. А тем более терпеть хамство от отдельных сопляков и быдла, пусть даже и возможно хороших программистов. Вас последняя фраза не касается, у нас с Вами достаточно культурное общение. Спокойной ночи

ssg
Offline
Зарегистрирован: 17.07.2021

А вы полагаете , что знали бы термин остойчивость и не знали 4 действия арифметики.

ssg
Offline
Зарегистрирован: 17.07.2021

Клоун переведи:В некоторых случаях необходимо получать одинаковую последовательность при каждом запуске программы на Arduino. В этом случае инициализировать генератор псевдослучайных чисел следует вызовом функции randomSeed() с фиксированным параметром.

sadman41
Offline
Зарегистрирован: 19.10.2016

Чую, что пахнет срачем.

rkit
Offline
Зарегистрирован: 23.11.2016

Как рассчитать остойчивость судна?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

ssg пишет:

А вы полагаете , что знали бы термин остойчивость и не знали 4 действия арифметики.

Вот не уверен. С остойчивостью все ясно - метацентр выше центра масс. Арихметика нифига не поможет. Все на модельках в бассейне. ;))) Зачем тут арихметика? ;))

-----------------------------------

Вот присоединяюсь к вопросу коллеги Ркит-а - а как рассчитать? Если уж "а" сказал, то и "б" - давай.

Я даже не прошу тебя рассчитать центр величины, это ты точно не поймешь, там одни сплошные интегралы объемные.  Ты хоть центр масс рассчитай. Не определи на модельке, а рассчитай, тыж про расчет тут трендишь.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Гражданин новичок! Тут форум коллег по хобби. И весьма немолодых. Основной состав - около 50 лет.

Ты пришел, такой нарядный, и задаешь вопрос ...пока все ОК. Тебе говорят, как и что изучить, полагая, что встречаем нового коллегу по хобби. И тут ты выдаешь, по  факту, следующее: "Вы тут всякой  херней маятесь, мне не досуг в ней разбираться, а вам похеру, накидайте мне советов по быстрому!", и удивляешься внезапно недружелюбному отношению. С чего бы, вдруг? ;))))))  Забавный ты чел!

sadman41
Offline
Зарегистрирован: 19.10.2016

Ардуина с точки зрения начинающего:

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

Ssg, ты правда дерево. Обьясняю: РандомСид сам не выдает случайных значений, эта функция только инициализирует генератор. Для получения значений служит другая функция - random(), в которой можно задать минимальное и максимальное значение.
А теперь вернись назад и вникни, какую чушь ты написал, когда начал рассуждать, что рандомсид тебе не подходит, потому что ее выводом нельзя управлять?

Понимаешь, все в этой ветке смотрят на тебя и видят, что ты не в состоянии понять элементарные вещи даже при подробном описании, как оказалось с этой функцией. В этом бы не было ничего страшного - мало ли кто что не понимает - если бы не твои агрессивные попытки спорить и сопротивление полезным советам.
И не стоит на меня обижаться. Я говорю тебе прямо то, что все остальные пытаются тонко намекнуть. Но по сути мы все говорим одно и то же - или ты берешь книжки и учишься, или у тебя нифига не выйдет и потому тратить время на тебя бестолку.

ssg
Offline
Зарегистрирован: 17.07.2021

Остойчивость судна - способность противостоять внешнему воздействию и принимать первоначальное положение. Остойчивость существует двух типов продольная (дифферент на нос или корму) и поперечная (крен).Принимая что изначально на судно дествуют две силы это вес судна и выталкивающая сила. Точка где суммируется выталкивающая сила называется центром величины.Точка где суммируется все веса на судне (корпус, топливо........) называется центром тяжести.До тех пор пока они расположены в одной плоскости без плеча между собой судно "сидит на ровном киле".Остойчивость судна определяют расчетным путем на этапе проектирования и затем путем кренования. Для этого после спуска на воду судно загружается всеми весами согласно проекта , это и экипаж, топливо и все штатное оборудование.Но загружать физически всем этим нет необходимости.Эти веса имитируют болванки но равные по весу реальным весам.Они располагаются со смещением как по плоскости так и по высоте относительно центральной линии и миделя судна.Затем эти веса умножаются на соответсвующие плечи (расстояния от миделя и или центральной линии) таким образом получают эпюры моментов.

Эти эпюры суммируются в продольном и поперечном направлении и делятся на средний вес в продольной плоскости умноженной на среднее плечо и средний вес в поперечной плоскости умноженный на среднее плечо в поперечной плоскости.Затем полученные  величины сравнивают с расчетными. В случае необходимости в той или иной части судна добавляется балласт для выравнивания крена или дифферента. Кроме этого строятся графики которые остаются на заводе и другой экземпляр прикладываются к паспорту судна.

Кроме того остойчивость судна бывает статическая и динамическая. Т.е. когда нагрузки постоянны и не постоянны во времени (ветер, волна, экипаж бегает с борта на борт).

rkit-я так понимаю это была проверка меня на вшивость. Теперь у тебя проверка на вшивость - напиши или поправь если нужно мой скетч.Я же полагаю ты нормальный мужчина.

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

И что ты написал? " остойчивость судна определяется расчетным путем" ?
Ну тогда в ответ " скетчи ардуино пишутся на языке программирования с++"
Все остальное в твоем опусе к _ расчету_ никакого отношения не имеет.

rkit
Offline
Зарегистрирован: 23.11.2016

"рассчет" без математики - это что-то новое

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

Вот передо мной на берегу лежит лодка. Хочу рассчитать ее остойчивость. У меня есть сантиметр и весы. Изучать интегралы ради этого не планирую.

ssg
Offline
Зарегистрирован: 17.07.2021

wdrakula-НИИВТ (тогда еще)82-87г. Красный диплом.2 человека на потоке. Покажи пожалуйста место где я сказал что Вы здесь херней маетесь? Или это так для красного словца было сказано.А то что попросил, но не клянчил, совета - это было.И требовать я ничего не требовал, с какой стати.Я просто спросил Вашего мнения будет ли исполняться код согласно моим требованием, если нет то почему, конкретно.

d707-я достаточно взрослый что бы не обижаться. Я просто делаю для себя выводы.Для завершения проекта я конечно еще посмотрю в интернете , на других форумах и закончу это до приезда внука, с помощью этого форума или нет.Пару недель впереди еще есть.В крайнем случае схожу в ближайший кружок робототехники

ssg
Offline
Зарегистрирован: 17.07.2021

b707 - а интегралы тебе и не нужны. Нагружай,замеряй умножай и дели.Только не забудь лодку спустить на воду.

rkit-как вы построите эпюры моментов без математики это во первых, а во вторых пройдите проверку на вшивость.

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

Какой же это расчет, если лодку надо в воду окунать? Расчет - это пару раз рулеткой измерил, три числа на счетах перемножил - и все знаешь.
Если серьезно - расчетный путь тем и отличается от экспериментального, что никаких бассейнов, никаких опытов. Для расчетного пути и лодка-то не нужна, достаточно чертежей. А ты мне говоришь - в воду опусти, нагрузи, накрени... А если у меня вживую лодки нет, только документы на руках - я что, документы в бассейн совать должен?
Да и не думаю я, что яхты по 20 млн долларов строят без расчета, сначала построят - а потом в море кренить начинают, что ос ойчивость определить.
Сдается мне, что ты свой предмет слабовато знаешь. Или не хочешь делится...
Вот я тебя и спрашиваю - как это считается, тебе что, влом обьяснить?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Ты, дорогой, не крути кормой. Ты сказал "расчет", а не эмпирическое исследование. Тут такое не прокатывает. Опиши РАСЧЕТНЫЙ, а не эмпирический способ определения центра масс. Про центр величины не спрашиваю, я ж не зверь какой. ;)))
А утром, если тебя ещё не забанят тут, я дам тебе именно расчетные определения и того и другого. Да, через интеграл по объему и по сечениям.
Все это к тому, что не нужно рассказывать про свою гениальность в иных областях знаний. Тут не форум помощи дуракам, а форум общения по интересам. Ты интересен? Только честно? Ты прямо сказал, что Ардуино не станет твоим хобби. Тогда зачем ты нам? Зачем тебе помогать? Если ради исправления кармы, то я лучше кошку бездомную покормлю. Сорри. ;))

rkit
Offline
Зарегистрирован: 23.11.2016

Попросил, по-человечески, расчет. Получил какой-то невнятный текст, расчетом не являющийся, с какой стороны ни посмотри, и обвинения во вшивости.

ssg
Offline
Зарегистрирован: 17.07.2021

Наверное прошло мимо:Эти эпюры суммируются в продольном и поперечном направлении и делятся на средний вес в продольной плоскости умноженной на среднее плечо и средний вес в поперечной плоскости умноженный на среднее плечо в поперечной плоскости.Затем полученные  величины сравнивают с расчетными. В случае необходимости в той или иной части судна добавляется балласт для выравнивания крена или дифферента. Кроме этого строятся графики которые остаются на заводе и другой экземпляр прикладываются к паспорту судна.

rkit
Offline
Зарегистрирован: 23.11.2016

Слушай, я понятия не имею что такое "эпюры", "дифферент", и не планирую узнавать. Объясни простыми словами, как сделать расчет.

lilik
Offline
Зарегистрирован: 19.10.2017

Проверил код из 16 сообщения на ИДЕ, две синтаксические мелочи. Вот подправленный.

void setup() 
{
   // инициализация всех 9 пинов микросхемы как выходы
   for (int i=0; i<=9; i=i+1) pinMode (i, OUTPUT);
}
void loop ()
{
//---------------------------ПЕРВЫЙ ЦИКЛ-------------------------------------------------------------
//ВРЕМЯ РАБОТЫ ПЕРВОГО ЦИКЛА  С ОГРАНИЧЕНИЕМ ПО СЛУЧАЙНОМУ КОЛ-ВУ ВКЛЮЧЕНИЙ.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ КОЛ-ВО ВКЛЮЧЕНИЙ ПЕРВОЙ ГРУППЫ ВЫХОДОВ ОТ 100 ДО 600 РАЗ.
//ТО ЕСТЬ СУМАРНОЕ КОЛ-ВО ВКЛЮЧЕНИЙ  ВЫХОДОВ С 0 ПО 5 (0+1+2+3+4) ДОЛЖНО СОСТАВЛЯТЬ РАНДОМНО ОТ 100 ДО 600 РАЗ.ФУНКЦИЯ for();
//СЛУЧАЙНЫМ ОБРАЗОМ ИЗ ВЫХОДОВ С 0 ПО 5 ВЫБИРАЕТСЯ ВЫХОД МИКРОКОНТРОЛЕРА КОТОРЫЙ БУДЕТ ВКЛЮЧЕН В ДАННЫЙ МОМЕНТ ВРЕМЕНИ.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ СВЕЧЕНИЯ СВЕТОДИОДА ВЫБРАННОГО ВЫХОДА.
//СЛУЧАЙНЫМ ОБРАЗОМ ГЕНЕРИРУЕТСЯ ВРЕМЯ ЗАДЕРЖКИ ПЕРЕД ВКЛЮЧЕНИЕМ СВЕТОДИОДА СЛЕДУЮЩЕГО СЛУЧАЙНОГО ВЫБРАННОГО ВЫХОДА.
//ЧИСЛО ВКЛЮЧЕНИЙ ПОЛУЧАЕМ int j=random (100, 600).

//генерируем случайное суммарное число включений случайных выводов 0,1,2,3,4.
//здесь будет храниться кол-во включений первого цикла 
//суммарное кол-во включений выходов с 0 по 5 (0+1+2+3+4) генерируется случайным образом от 100 до 600 раз.
int j=random (100, 600); 

for (int i = 0; i < j; i++)//пока значение счетчика меньше переменной j будут выполняться  команды ниже и продолжаться первый цикл.
 {
    // random (0, 5) генерирует сигналы для выбора случайных выходов с 0 по 5. Выход 5 не считается.   
    // при каждом проходе каждый раз будет выбираться новый выход, хотя возможны повторения
    int ran = random (0, 5);
    digitalWrite (ran, HIGH);// digitalWrite (random (0, 5), HIGH); // Включение светодиода случайно выбранного выхода. 
    
    // random (55, 100) генерирует случайное время  свечения выбранного выхода с 0 до 5  от 55мс. до 100мс. .
    delay (random (55, 100)); // Светим светодиодом случайно выбранного выхода.

    // после свечения случайно выбранный выход  с 0 по 5 гасится. Выход 5 не считается.
    digitalWrite (ran, LOW);// digitalWrite (random (0, 5), LOW);   // Выключение светодиода случайно выбранного выхода.

    // random (60, 100) генерирует случайное время  паузы между свечениями светодиодом случайно выбранного выхода с 0 до 5 от 60мс. до 100мс.
    delay (random (60, 100)); // Ждем

   if (i >= j) break; // в случае достижения случайно выбранного числа включений j выходим из цикла и переходим к исполнению следующей строки кода.
 }}

Как будет работать в "железе" сами проверите на Ардуино, если дело дойдёт.