Обойти return и сделать один раз

Привет. Нужна помощь. У меня void loop() начинается с опроса кнопки:

...
void loop(){
if(notPressed && digitalRead(BUTTON)==HIGH){
delay(5);
return;
}
notPressed = false;
...

Далее… мне нужно поставить часть кода для воспроизведения голосовой подсказки Только один раз при включении ардуино:

...
mp3_play(9);
delay(2000);
...

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

не надо куски, весь код нужен

сетап выполняется на старте 1 раз

1 лайк

А что такое mp3_play может надо вызывать mp3_stop

#include  <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>

SoftwareSerial mySerial(4, 7);

#define TEST_LED 47

bool notPressed = true;

void setup(){
mySerial.begin(9600);
mp3_set_serial(mySerial);
delay(5);
mp3_set_volume(30);
pinMode(TEST_LED, OUTPUT);
digitalWrite(TEST_LED, HIGT);
mp3_play(9);
delay(2000);
}

void loop(){
if(notPressed && digitalRead(BUTTON)==HIGH){
delay(5);
return;
}
notPressed = false;

digitalWrite(TEST_LED, LOW);

Вроде ничего не забыл.
Да setup выполняется один раз, но когда кнопка не нажата и выполняется return; он снова воспроизводит запись номер 9.

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

1 лайк

Не в коем случае. Код на самом деле на 460 строчек (двигатели, датчики, другие модули). Я писал код от руки в чате, т.к. нет перед глазами основного.
Прошу прощения, искренне.

Здрасьте, девочки (в смысле, “С добрым утром, тётя Хая!”)!.

Чтобы Вам хоть как-то можно было помочь, нужен минимальный код, который реально работает и демонстрирует проблему! Реальный код, перенесённый прямо из IDE тупым копипастом. Без это Вам никто не поможет!

И ещё, если бы Вы прежде, чем постить, хоть немного почитали бы форум, Вы бы уже давно решили проблему с 9-м треком. Потому, что единственная причина - Ваш код перегружается и начинается с начала! Поставьте печать чего-нибудь в начале setup, и Вы это увидите.

Почему перегружается, а хрен же Вас знает. Вы не написали что у Вас за Ардуина и не привели кода.

И ещё обижаетесь на троллинг. А что с Вами ещё делать-то?

1 лайк

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

#define TEST_LED 47

void setup() {

  pinMode(TEST_LED, OUTPUT);
  digitalWrite(TEST_LED, HIGH);
  delay(2000);
}

void loop() {

  digitalWrite(TEST_LED, LOW);
  return;
}

и понимал что return не кидает на начало setup.
вангую вы питаете все ваши моторы и сервы от ардуино и как правильно сказали имеете аппаратный сброс по провалу питания.

1 лайк