Выйти из цикла, который в цикле, по нажатию кнопки

Igoreck
Offline
Зарегистрирован: 01.03.2017

Как выйти из цикла который в цикле, по нажатию кнопки?

void closeDoor(){//закрытие дверей
  while((PIND & 1<<4)){
    for (int i=128; i>=-(34*6); i--)//нужно выйти, по нажатии кнопки.
    {
      myOLED.clrScr();
      myOLED.print("THE DOOR IS CLOSE", CENTER,0 );
      myOLED.print("PRESS THE START BUTTON TO OPEN THE DOOR", i, 25 );
      myOLED.update();
      if(!(PIND & 1<<4)){
            void loop();
    }
   } 
  }
}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

void loop(); заменить на break;

с учетом дребезга сложнее.

а так я х.з. откуда зовется эта функция.

Green
Offline
Зарегистрирован: 01.10.2015

А лучше внятно, членораздельно сказать что надо.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Green пишет:

А лучше внятно, членораздельно сказать что надо.

хрена се, а что мы тогда будем делать? )))

Igoreck
Offline
Зарегистрирован: 01.03.2017

Девятая строка, не будет учтена, пока цикл фор не завершит свой цикл!

Igoreck
Offline
Зарегистрирован: 01.03.2017

Девятая строка, не будет учтена, пока цикл фор не завершит свой цикл!
Выйти нужно не дожидаясь.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ты пьяный чтоль? тогда от отсылаю к совету Green.

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

Igoreck пишет:
Девятая строка, не будет учтена, пока цикл фор не завершит свой цикл!

не прав, девятая строка "учитывается" на каждом проходе for. А вот в десятой написан бред

Green
Offline
Зарегистрирован: 01.10.2015

В 10-й должно быть это образно. Но даже если это так, галиматню писать не надо.
Выйти из цикла в цикле проще всего по goto, но считается что это не эстетично.
"Зато дёшево, удобно и практично".

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

А что, return уже религия не позволяет?

Igoreck
Offline
Зарегистрирован: 01.03.2017

b707 пишет:

Igoreck пишет:
Девятая строка, не будет учтена, пока цикл фор не завершит свой цикл!

не прав, девятая строка "учитывается" на каждом проходе for. А вот в десятой написан бред

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

А то что в десятой написано, дык это я для примера. 

Igoreck
Offline
Зарегистрирован: 01.03.2017

andriano пишет:

А что, return уже религия не позволяет?

Это тоже сработает после отработки всех проходов цыкла фор. 

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

Igoreck, не пишите бреда, строка 9 работает при каждом проходе FOR.

Если у вас не так - ищите ошибку в программе или в методах тестирования

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

Igoreck
Offline
Зарегистрирован: 01.03.2017

Green пишет:

В 10-й должно быть это образно. Но даже если это так, галиматню писать не надо.
Выйти из цикла в цикле проще всего по goto, но считается что это не эстетично.
"Зато дёшево, удобно и практично".

Подскажи как правильно, и как надо. И как вообще делают?

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

Igoreck пишет:

Подскажи как правильно, и как надо. И как вообще делают?

правильно - break

https://ravesli.com/urok-70-operatory-break-i-continue/#toc-1

Igoreck
Offline
Зарегистрирован: 01.03.2017

b707 пишет:

Igoreck, не пишите бреда, строка 9 работает при каждом проходе FOR.

Если у вас не так - ищите ошибку в программе или в методах тестирования

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

Как скажеш. Проверю еще раз!

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

Igoreck пишет:

andriano пишет:

А что, return уже религия не позволяет?

Это тоже сработает после отработки всех проходов цыкла фор. 

Правда?

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

Igoreck,

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

В строке №9 есть конструкция

PIND & 1<<4

А теперь вопрос на засыпку, что она означает:

(PIND & 1)<<4

или

PIND & (1<<4)

?????

Боюсь, что означает она не то, что Вы хотели!

Не делайте так никогда, от слова совсем! Скобки, если брать оптом, стоят совсем недорого!

Igoreck
Offline
Зарегистрирован: 01.03.2017

Парни все ок. Дело зделано. Спасибо Вам.

void closeDoor() { //закрытие дверей
  while ((PIND & 1 << 4)) {
    for (int i = 128; i >= -(34 * 6); i--) //нужно выйти, по нажатии кнопки.
    {
      myOLED.clrScr();
      myOLED.print("THE DOOR IS CLOSE", CENTER, 0 );
      myOLED.print("PRESS THE START BUTTON TO OPEN THE DOOR", i, 25 );
      myOLED.update();
      if (!(PIND & 1 << 4)) {
        break;
      }
    }
  }
}

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ЕвгенийП пишет:

Igoreck,

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

В строке №9 есть конструкция

PIND & 1<<4

А теперь вопрос на засыпку, что она означает:

(PIND & 1)<<4

или

PIND & (1<<4)

?????

Боюсь, что означает она не то, что Вы хотели!

Не делайте так никогда, от слова совсем! Скобки, если брать оптом, стоят совсем недорого!

разве приоритет тут не исправит ситуацию?

Logik
Offline
Зарегистрирован: 05.08.2014

может и исправит. Но то ж его помнить нужно. Я за скобки. Явное лучше неявного!

Igoreck
Offline
Зарегистрирован: 01.03.2017

xDriver пишет:

ЕвгенийП пишет:

Igoreck,

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

В строке №9 есть конструкция

PIND & 1<<4

А теперь вопрос на засыпку, что она означает:

(PIND & 1)<<4

или

PIND & (1<<4)

?????

Боюсь, что означает она не то, что Вы хотели!

Не делайте так никогда, от слова совсем! Скобки, если брать оптом, стоят совсем недорого!

разве приоритет тут не исправит ситуацию?

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

Green
Offline
Зарегистрирован: 01.10.2015

Да верно у тебя всё написано. Но приоритеты знать надо.

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

xDriver пишет:

разве приоритет тут не исправит ситуацию?

Исправит, но делать так не стоит (а ТС - так просто нельзя), но судя по тому, как он "зделал", он плевать хотел на эти советы :(

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Igoreck пишет:
Объясните, как правильно написать эту конструкцию, и я буду знать в дальнейшем.

Вот я ваще не понимаю зачем экономят скобки... 

Нужно писать так, как бы ты хотел, что бы оно работало. Или ты не понимаешь вообще что означают эти бесскобочные конструкции ?

Igoreck
Offline
Зарегистрирован: 01.03.2017

brokly пишет:

Igoreck пишет:
Объясните, как правильно написать эту конструкцию, и я буду знать в дальнейшем.

Вот я ваще не понимаю зачем экономят скобки... 

Нужно писать так, как бы ты хотел, что бы оно работало. Или ты не понимаешь вообще что означают эти бесскобочные конструкции ?

Ну напишите же правильно, и я на следующий раз, буду понимать как надо!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Математику в школе учил? Реши (без интернета и подсказок) три уравнения:

1) 2 + (2 * 2) =

2) (2 + 2) * 2 =

3) 2 + 2 * 2 =

Это к слову - «зачем скобки» и какую они играют роль.

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

Igoreck пишет:

Парни все ок. Дело зделано. Спасибо Вам.

_с_делано...

Так в чем дело то было? Код, насколько я вижу, не изменился. Или признаешь, что о том что строчка не выполняется до конца FOR - была брехня? :)

SLKH
Offline
Зарегистрирован: 17.08.2015

Igoreck пишет:

brokly пишет:

Igoreck пишет:
Объясните, как правильно написать эту конструкцию, и я буду знать в дальнейшем.

Вот я ваще не понимаю зачем экономят скобки... 

Нужно писать так, как бы ты хотел, что бы оно работало. Или ты не понимаешь вообще что означают эти бесскобочные конструкции ?

Ну напишите же правильно, и я на следующий раз, буду понимать как надо!

правильно  на данном этапе if (digitalRead(....) и не выёживаться. 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

brokly пишет:
Вот я ваще не понимаю зачем экономят скобки...

Ладно что не экономят на пробелах. Ведь логично же что бы разделять слова от другого слова нужен разделительный твердый знакhttps://youtu.be/0tna4zsK9jo?t=160

SLKH
Offline
Зарегистрирован: 17.08.2015

Green пишет:

Да верно у тебя всё написано. Но приоритеты знать надо.

главное, что написано оригинально.

например, строка 03 доставляет. и вообще целесообразность скоростного мигания оледом в цикле.

Green
Offline
Зарегистрирован: 01.10.2015

Не надо цитировать не к месту.
Вопрос в данном случае был о конструкции PIND & 1 << 4,
а не о выходе не пойми куда из не пойми какого цикла.

Logik
Offline
Зарегистрирован: 05.08.2014

Igoreck пишет:

Как выйти из цикла который в цикле, по нажатию кнопки?

не благодари, не мое http://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p?page=10#comment-639312