Не могу по кнопке выйти из цикла

Ваннафлай
Offline
Зарегистрирован: 01.07.2021

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


if (customKey == '7'){//если нажата кнопка 7
                Serial.println(customKey);//выводим нажатый символ в монитор порта
                Mp3Player.controller->volume (50);
                Mp3Player.controller->playSDSong ("0007.mp3");               
                for (int o = 0; o < LED_COUNT; o++) //тушим диоды на ленте
                {
                strip.setPixelColor(o, strip.Color(0, 0, 0));
                strip.show();
                }  


                                                                        
               for (int o = 0; o < 119; o++) //зажигаем диоды на ленте
                {
                strip.setPixelColor(o, strip.Color(0, 0, 255));
                strip.show();
                char customKey = customKeypad.getKey();//записывем нажатый символ
                if (customKey != '7') break;// Если нажата любая кнопка кроме "7" прерываем цикл 
                }
                }
b707
Offline
Зарегистрирован: 26.05.2017

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

ну почему, если нажать кнопку в самом конце песни - она сработает

Ваннафлай
Offline
Зарегистрирован: 01.07.2021

А как сделать чтобы не нужно было ждать? Чтобы следующая кнопка срабатывала. Там не одна кнопка, а семь.

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

Ваннафлай пишет:

А как сделать чтобы не нужно было ждать? Чтобы следующая кнопка срабатывала. Там не одна кнопка, а семь.

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

В том виде, как он сейчас, ничего сказать нельзя. 

Ваннафлай
Offline
Зарегистрирован: 01.07.2021

хорошо, сейчас

Ваннафлай
Offline
Зарегистрирован: 01.07.2021
BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Даже не открывал ссылку. Но как совет (вроде соображалка работает, не?) такой алгоритм: Заведи отдельную  кнопку «прервать» повесить на прерывание, в прерывании ранее установленный «флаг» «брейка» установить в положение «прервать» и в каждой итерации цикла проверять его состояние, если состояние равно «прервать», то 1. Сбросить флаг в состояние «не прерывать», 2. Выйти из цикла по «брейку». 
Или я опять что то не верно понял? Или нужно без прерываний? 

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

Можно и все 7 кнопок повесить на прерывание.
Но так же можно тупо опрашивать кнопки внутри цикла из которого нужно выйти.

Ваннафлай
Offline
Зарегистрирован: 01.07.2021

Что-то не сработала соображалка, можешь, пожалуйста, кодом написать?

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

Ваннафлай пишет:

Что-то не сработала соображалка, можешь, пожалуйста, кодом написать?

"кодом" тут помогают в платном разделе

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

Ваннафлай пишет:

Что-то не сработала соображалка, можешь, пожалуйста, кодом написать?

Мы ещё Вашего кода не видели. Хотя, я просил Вас выложить.