Мигание светодиодами

mag155
Offline
Зарегистрирован: 21.12.2017

Всем привет есть такой скетч

void setup () {
for (int i=4; i<=17; i++) {
pinMode (i, OUTPUT);
}
}
void loop() {
for (int i=17; i>=4; i--) {
for (int k=4; k<=i; k++){
digitalWrite(k,HIGH);
delay(50);
digitalWrite(k,LOW);
}
digitalWrite(i,HIGH);
}
for (int i=4; i>=4; i++) {
for (int k=17; k>=i; k--){
digitalWrite(k,0);
delay(50);
digitalWrite(k,1);
}
digitalWrite(i,0);

}
}

Но проблема в том что loop выполняется только один раз и больше не повторяется.Я так понимаю что не создается условия в начале loop for (int i=17; i>=4; i--). И код не выполняется подкиньте идейко как это исправить? 

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

все там выполняется, просто цикл for в строке 15 - бесконечный

mag155
Offline
Зарегистрирован: 21.12.2017

Но как тогда написать этот скетч ??? То есть огонек тухнет от 4 и дальше ++.Как по другому это написать ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mag155 пишет:

Но как тогда написать этот скетч ??? 

Что-то не заметил, чтобы Вы внятно объяснили что он делжен делать. П если непонятно что он должен делать, то писать можно как угодно - как-то он и сейчас работает.

mag155
Offline
Зарегистрирован: 21.12.2017

Смысл в том, что огонек бежит от 4 пина к 17 пину и 17 остается гореть, потом огонек опять бежит от 4го к 17 и уже 17 и 16 остаются гореть и так пока все пины не будут гореть. После чего, огонек бежит на оборот от 17 пина к 4 и 4 пин гаснет. Огонек опять бежит от 17 к 4 и уже 5 гаснит и так пока не погснут все потом все по кругу.

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

mag155 пишет:

Но как тогда написать этот скетч ??? То есть огонек тухнет от 4 и дальше ++.Как по другому это написать ?

огонет тухнет от пина 4 и дальше - как далеко дальше? у вас пины бесконечны? - нет, судя по другим строкам, номера пинов от 4 до 17. Ну так поставьте в строке 15 условие. чтобы цикл не поднимался выще 17-ого пина, делов то.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

mag155 пишет:

#1. огонек бежит от 4 пина к 17 пину и 17 остается гореть, потом огонек опять бежит от 4го к 17 и уже 17 и 16 остаются гореть и так пока все пины не будут гореть.

#2. После чего, огонек бежит на оборот от 17 пина к 4

Так не бывает. К моменту #2 все пины с 4 по 17 светятся - как может бедать огонёт, если они уже светястя?

ven-til
Offline
Зарегистрирован: 13.02.2018

ЕвгенийП пишет:
Так не бывает. К моменту #2 все пины с 4 по 17 светятся - как может бедать огонёт, если они уже светястя?

вероятно обратно бежит !огонек

mag155
Offline
Зарегистрирован: 21.12.2017

Я не совсем пойму как цыкл может быть бесконечным и подниматься если указанно что о4 го до 17 го.Тоесть потуши 17 огонек условие выполненно ? Идолжно выполняться следующее тоесть

for (int i=17; i>=4; i--
mag155
Offline
Зарегистрирован: 21.12.2017

Да гонек бежит обратно.

mag155
Offline
Зарегистрирован: 21.12.2017

Всем спасибо вы правы цыкл бесконечный получался в строке 15 нужно вот так 

for (int i=4; i<=17; i++) {

 

mag155
Offline
Зарегистрирован: 21.12.2017

Еще вопрос как заставить выполнятся цыкл определенное количество раз ? То есть, например пробежал огонек три раза и потом начал выполнятся следующий цыкл ?

ven-til
Offline
Зарегистрирован: 13.02.2018

mag155 пишет:

Еще вопрос как заставить выполнятся цыкл определенное количество раз ? То есть, например пробежал огонек три раза и потом начал выполнятся следующий цыкл ?

 

for (int runningLight=1; runningLight<=3; runningLight++){
//здесь весь код бегающих огоньков
}
//далее другой цикл

 

mag155
Offline
Зарегистрирован: 21.12.2017

Не совсем понял. Если не сложно обясните по подробнее?

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

mag155 пишет:

Еще вопрос как заставить выполнятся цыкл определенное количество раз ? То есть, например пробежал огонек три раза и потом начал выполнятся следующий цыкл ?

положить его внутрь другого цикла For

mag155
Offline
Зарегистрирован: 21.12.2017

Типерь понял .Но как записать к примеру это 

for (int i=4; i>=4; i++) {
16
for (int k=17; k>=i; k--){
17
digitalWrite(k,0);
18
delay(50);
19
digitalWrite(k,1);
20
}
21
digitalWrite(i,0);

Одним выражение чтоб положить его во внутрь цыкла?

mag155
Offline
Зарегистрирован: 21.12.2017

Напишите примерчик пожалуйста.

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

mag155 пишет:

Типерь понял .Но как записать к примеру это одним выражение чтоб положить его во внутрь цыкла?

зачем писать это "одним выражением"? Внутри цикла может быть сколько угодно операторов. Все, что вам нужно выполнить трижды - напишите между открывающей и закрывающей фигурной скобкой вместо слова "ЭТО" :)

for (int i =0; i<3; i++) {

ЭТО....

}

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

mag155 пишет:

Напишите примерчик пожалуйста.

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

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

kalapanga пишет:

Так примерчик у Вас самого написан.

судя по вопросам, примерчик не НАписан. а Списан...

mag155
Offline
Зарегистрирован: 21.12.2017

Давайте разберем на примере 


void setup () {
for (int i=26; i<=33; i++) {
pinMode (i, OUTPUT);
}
}
void loop() {

//В одну сторону

for (int i=26; i<=33; i++) {
digitalWrite(i,HIGH);
delay(50);
digitalWrite(i,LOW);
}

Мы указываем что и это выход .Но чтоб выполнялся код определенное количество раз 

for (int i =0; i<3; i++) {
2
 
3
ЭТО....
Нужно указать что i это именно цыкл ?

 

mag155
Offline
Зарегистрирован: 21.12.2017

Примерчик написан 

void setup () {
for (int i=26; i<=33; i++) {
pinMode (i, OUTPUT);
}
}
void loop() {

//В одну сторону

for (int i=26; i<=33; i++) {
digitalWrite(i,HIGH);
delay(50);
digitalWrite(i,LOW);
}

Вот с такого примера не скрываю 

mag155
Offline
Зарегистрирован: 21.12.2017

Я имел в виду не количество действий в цыкле . А количество раз которое пройдет кусок кода пока не перейдет к следующему действию.

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

ёпте... в строке  09 еще один for() от 0 до 3 никак не написать после того, как уже каждый это посоветовал?

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

mag155 пишет:

Я имел в виду не количество действий в цыкле . А количество раз которое пройдет кусок кода пока не перейдет к следующему действию.

Как-то Вы очень неудачно мысли формулируете. Лучше вернуться к конкретному примеру. Вставьте Ваш на данный момент окончательный вариант скетча (только без мусорных номеров строк, как у Вас тут в некоторых сообщениях получилось). И чётко опишите что он реально делает и чем это отличается от того что Вам хочется.

Ну или сначала вставьте for, как sadman41 говорит. Может он действительно Ваши хотелки лучше угадал :)

mag155
Offline
Зарегистрирован: 21.12.2017
void setup () {
for (int i=4; i<=17; i++) {
pinMode (i, OUTPUT);
}
}
void loop() {
for (int i=17; i>=4; i--) {
for (int k=4; k<=i; k++){
digitalWrite(k,HIGH);
delay(50);
digitalWrite(k,LOW);
}
digitalWrite(i,HIGH);
}
for (int i=4; i<=17; i++) {
for (int k=17; k>=i; k--){
digitalWrite(k,0);
delay(50);
digitalWrite(k,1);
}
digitalWrite(i,0);
}
for (int i=17; i>=4; i--) {
for (int k=17; k>=i; k--){
digitalWrite(k,0);
delay(50);
digitalWrite(k,1);
}
digitalWrite(i,0);
}
}

 

ven-til
Offline
Зарегистрирован: 13.02.2018

А тепер описание, что происходит и как хотелось бы на самом деле.

mag155
Offline
Зарегистрирован: 21.12.2017

Нужно чтоб действие с 7 строки по 14 повторилось к примеру 3 раза . А потом начало выполнятся действие строки 15 и дальше.?

mag155
Offline
Зарегистрирован: 21.12.2017

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

ven-til
Offline
Зарегистрирован: 13.02.2018

Засовывай строки с 7 по 14 внутрь ещё одного цикла.

 

for (int runningLight=1; runningLight<=3; runningLight++){
//здесь строки с 7 по 14
}

 

kalapanga
Offline
Зарегистрирован: 23.10.2016

mag155 пишет:

Нужно чтоб действие с 7 строки по 14 повторилось к примеру 3 раза . А потом начало выполнятся действие строки 15 и дальше.?

void setup () {
  for (int i = 4; i <= 17; i++) {
    pinMode (i, OUTPUT);
  }
}
void loop() {
  for (int j = 0; j < 3; j++) {
    for (int i = 17; i >= 4; i--) {
      for (int k = 4; k <= i; k++) {
        digitalWrite(k, HIGH);
        delay(50);
        digitalWrite(k, LOW);
      }
      digitalWrite(i, HIGH);
    }
  }
  for (int i = 4; i <= 17; i++) {
    for (int k = 17; k >= i; k--) {
      digitalWrite(k, 0);
      delay(50);
      digitalWrite(k, 1);
    }
    digitalWrite(i, 0);
  }
  for (int i = 17; i >= 4; i--) {
    for (int k = 17; k >= i; k--) {
      digitalWrite(k, 0);
      delay(50);
      digitalWrite(k, 1);
    }
    digitalWrite(i, 0);
  }
}

 

mag155
Offline
Зарегистрирован: 21.12.2017

Вот теперь понял . Изначально не до конца получается разобрался с for . Всем большое спасибо.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

mag155 пишет:

Вот теперь понял . Изначально не до конца получается разобрался с for . Всем большое спасибо.

Скорее , изначально даже не читалось ничего про цикл for...

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Kakmyc пишет:
Скорее , изначально даже не читалось ничего про цикл for...
ТС про цикл ничего не знал, он работал с цыклами. Зато теперь всё пучком! Можно корованы грабить!