Цикл Loop(){};

VictorArx

★★✩✩✩✩✩
22 Мар 2021
533
86
В теме оператора For(закрытой) мне ответили, что цикл Loop бесконечно повторяется(петля). Про это я читал. Вопрос то в следующем. Например число 5 будет повторяться бесконечно в цикле, но если я впишу число 50 должно число 50 повторяться. Другими словами яркость светодиода должна меняться или хоть период переключения. Код то я не сам делал, а с инета скачал. В setupe сработает один раз.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
если ты напишешь цикл 50 в цикле loop то скорее всего ты не увидешь разницы между 50, 5, 3 или 123. Т.к. циклы будут повторяться без задержек один за другим. Поэтому я и предложил поставить задержку после выполнения цикла. Тогда будут серии по 50,5,3, или 123 раза с промежутком в 2 секунды (там было делей 2000).
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
533
86
Наверно ты невнимательно прочитал мой пост. Я ставил даже значение 32172. Задержку между строк 2000 делей тоже ставил не помогло. Жаль тему удалили, ты бы увидел.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
Я помню текст программы. Скорее всего ты неверно что то сделал. Даже в исправлении. Я тебе объяснил сейчас суть того, что ты делал и как это исправить. Можешь дальше упрямиться.
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
не... так не интересно.
Я думал вы новый вопрос зададите... а вы опять эту нудотину?
В приведенном вами утром коде НЕ БЫЛО НИ МАЛЕЙШЕЙ РАЗНИЦЫ, что там стоит в for - 5, 50 или 32000.
Более того, там вообще цикл for можно выкинуть - работать будет так же
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
533
86
Я помню текст программы. Скорее всего ты неверно что то сделал. Даже в исправлении. Я тебе объяснил сейчас суть того, что ты делал и как это исправить. Можешь дальше упрямиться.
Не упрямлюсь, а пытаюсь разобраться. Сделал , как ты говорил, вставил делей между строк, какие указал.
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
такой код-то был?
C++:
int LED_PIN = 12;
void setup(0 {
pinMode(LED_PIN, OUTPUT);
}

void loop() {
for (int i=0; i< 5; i++) {
digitalWrite(LED_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
delay(200);
}
}
от пятерки в строке 7 тут ровно ничего не зависит, можно поставить 50, 500, 5000... - разницы не будет
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
Так мне хочется понять работу этого цикла.
Простите, а что в нем понимать-то? он у вас бесполезный, ничего не делает, только место в программе занимает

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

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
@VictorArx,
1) https://community.alexgyver.ru/threads/onlajn-simuljator-arduino.5028/ - тут симулятор. мучай его, не теребонькай ардуину. Ссылку на свой код можно размешать
2) Ты привязался к циклу, тебе уже раз 200 ответили, что разницы нет. У тебя 2 (два, ДВА!!!) цикла. Внешний бесконечный loop и еще какой то левый внутри. Представь что ты в бесконечном цикле говоришь фразу "хочу разобраться!" Сколько ты раз ее скажешь ? а если ты ее повторишь 2 раза , то сколько ?
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
@VictorArx, Это же не первый вопрос здесь. И снова бесполезная постановка задачи, неправильное решение и упрямство в том, что "ничего не понимаю".
Что, как Вы считаете, должно поменяться? Надо не только спрашивать, но и учиться на ошибках!
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
Так вот я для этого.. упрямца сделал изменения:
Если он не увидит разницы... то у него просто нет слуха и в пении делать ему нечего.. Я сегодня злой. Поддерживаю админов по снесению курочке яичка.. темы

Еще попрошу не сносить тему пару дней... Потом можно. Дайте узнать чем дело кончится.
 
Изменено:

VictorArx

★★✩✩✩✩✩
22 Мар 2021
533
86
for (int i=0; i<= 500; i++)
for (int i=500; i>= 0; i--)
Вот теперь всё меняется в цикле. Больше вас тревожить не буду.
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,703
474
Господа-товарищи инженеры, давайте успокоимся и не будем нервничать. Мы имеем дело с arduino IDE, или я чего-то не понимаю? Так вот, в любой среде разработки присутствует "main", чего нет в arduino IDE, тама просто включён бесконечный цикл. О чём мы говорим, господа-товарищи?
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
for (int i=0; i<= 500; i++)
for (int i=500; i>= 0; i--)
Вот теперь всё меняется в цикле. Больше вас тревожить не буду.
бред какой-то.
Если взять код из прошлой темы - там что цикл от 0 до 500, что от 500 до 0 - никакой разницы. В вашем коде цикл for просто лишний.

@VictorArx, я бы вам посоветовал на будущее четче формулировать вопросы. Не буду говорить за всех - но для меня так и осталось неясным. что именно вы не понимали в цикле for раньше, и что вам стало понятно теперь.
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
Судя по коду - непонятно ничего. "Если не знаешь что хочешь - любой путь приведёт тебя к цели."
 
  • Лойс +1
Реакции: Старик Похабыч

bort707

★★★★★★✩
21 Сен 2020
3,067
915
я думаю, что в реальности ТС запускает совсем другой скетч. Но тот код он то ли стесняется показать, то ли боится что мы у него украдем . Поэтому для форума он написал "примерный код", который должен иллюстрировать ошибку.. Но поскольку ТС не представляет, в чем эта ошибка состоит - то и пример у него получился ни о чем
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
533
86
C++:
int LED = 11;


void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:

  for (byte i = 0; i <= 5; i++) {


    digitalWrite(11, HIGH);
    delay(15);
  }

  {

    for (byte i = 5; i > 0; i--) {

      digitalWrite(11, LOW);
      delay(15);

    }

  }
}
Может так понятнее. Теперь при изменении числа(вместо 5 ставлю 50) и т.д. меняется период переключения светодиода. Как Вам объяснить, что я не делаю проект, а просто изучаю операторы в работе. Также отговаривали от switch.
PS. Как заметил музыкальный критик у меня нет музыкального слуха, но я и не собираюсь петь в вашем хоре первым голосом.
PS.. Я не злопамятный просто злой и память у меня хорошая.
 
Изменено:

Boroda

✩✩✩✩✩✩✩
20 Янв 2020
35
3
Ну таким способом вы изучили скорее не "for", а "delay" :) Т.к. тот же результат мог быть получен изменением значения делея в старом скетче. Но, как я уже писал в удалённой ветке, смысл был в практическом изучении, так что вполне подойдет.
To VictorArx: у Гайвера на сайте есть урок как заставить мигать светодиод 20-ю разными способами. Посмотрите повнимательней с остановками - занимательное видео.
 
Изменено:

VictorArx

★★✩✩✩✩✩
22 Мар 2021
533
86
, смысл был в практическом изучении
Хоть один человек понял, что я хотел. Обязательно посмотрю.
ЗЫ. С делеем уж точно разобрался :)
ЗЫ..Посмотрел видео. Простые вещи понятны, но многое наверно всё таки для программистов понятно.
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
3,067
915
Может так понятнее. Теперь при изменении числа(вместо 5 ставлю 50) и т.д. меняется период переключения светодиода. Как Вам объяснить, что я не делаю проект, а просто изучаю операторы в работе.
вы занимаетесь ерундой, а не изучаете. Ваш код - яркий пример бессмысленного нагромождения операторов.
Смотрим ваш цикл:
C++:
for (byte i = 0; i <= 50; i++) {
    digitalWrite(11, HIGH);
    delay(15);
  }
вы 50 раз! подряд записываете в один и тот же пин состояние HIGH. ЗАЧЕМ? Вы думаете, оно с первого разу туда не записалось?
Весь ваш код - аналогичен вот этим строчкам
C++:
digitalWrite(11, HIGH);
delay(15*50);
и никакой цикл тут опять не нужен, как и в первом случае.

Но если хотите цикл - можно и с циклом:
C++:
digitalWrite(11, HIGH);
for (byte i = 0; i <= 50; i++) {
  delay(15);
 }
но обратите внимание, как я его изменил - я вынес неизменный оператор до цикла, потому что его совершенно не нужно выполнять 50 раз

Хотите учиться - учитесь сразу правильно.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
533
86
:)
Хотите учиться - учитесь сразу правильно.
Я что против что ли. Нашёл в интернете строчку про For и начал её изучать. Вы написали правильно, но я то не знал как правильно . Нахожу в инете разные коды и изучаю.Вот немного изучил и написал код про бегущие огни в разные направления и регулировкой скорости. Может Вам покажется опять неправильным, но не знаю, как правильно, не обучен.
C++:
int val = 0;
int pot = A0;
int i = 0;
int first_pin = 2;
int last_pin = 7; //Кол-во светодиодов
//блок для инициализации входов-выходов и других исходных данных
void setup() {
  for (int i = 2; i < last_pin; i++) // цикл
    pinMode(i, OUTPUT);  // инициализируем пины как выходы
  pinMode(pot, INPUT);  // инициализируем пины как выходы

}
// Основной цикл
void loop() {

  val = map(analogRead(pot), 0, 1023, 0, 255);

for ( i = 2; i < last_pin; i++) { //перебираем пины с 0 до last_pin
    digitalWrite(i, HIGH); //зажигание следующего светодиода
    delay(val); //
    digitalWrite(i, LOW); //гасим все светодиоды
 }

 for (int last_pin = 7; i >= 2; i--) {
    // turn the pin on:

    digitalWrite(i, HIGH); //зажигание следующего светодиода
    delay(val); //
    digitalWrite(i, LOW); //гасим все светодиоды
}
}
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
уже лучше, в этом коде уже видна идея...

Маленькое замечание - если уж вы завели переменные
int first_pin = 2;
int last_pin = 7;
то и используйте их в циклах, не пишите пины цифрами:
C++:
for (int i = first_pin; i < last_pin; i++)
и так во всех трех for
Тогда, если надо будет поменять пины - можно будет поменять только эти две переменные, а не искать по всему коду, где эти пины используются
 
  • Лойс +1
Реакции: VictorArx