Arduino Продолжить цикл for только при нажатии кнопки - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть массив мелодий int.Если я нажимаю кнопку, она воспроизводит всю песню, но если я ставлю перерыв после delay, то он просто сбрасывает i.Как сделать так, чтобы только после очередного нажатия кнопки оно продолжалось?(Я все еще новичок в этом извините, и спасибо заранее)

int buttonPin = 12;

void setup() 
{
 // put your setup code here, to run once:

   pinMode(buttonPin, INPUT);
}


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

  int buttonState = digitalRead(buttonPin);

  for(int i = 0; i < sizeof(mariomelody); i++)
  {
    if(buttonState == HIGH)
    {
      tone(8, mariomelody[i], 70); 
      delay();
    }  
  }
}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Я предполагаю, что вы хотите воспроизвести мелодию, пока кнопка нажата, и остановить, если кнопка отпущена.

Тогда это будет что-то вроде:

int i = 0;
void loop() 
{
    if(digitalRead(buttonPin) == HIGH)
    {
      tone(8, mariomelody[i], 70); 
      i = (i + 1) % sizeof(mariomelody);
      delay();
    }  
}

Чтобы не сбрасывать позицию в начало мелодии, вам нужно i быть глобальной переменной.

Если вы хотите, чтобы кнопка включала и выключала мелодию, вам понадобится другая глобальная переменная playing:

bool playing = false;
void loop()
{
    if(digitalRead(buttonPin) == HIGH)
    {
        playing = !playing;
        while (digitalRead(buttonPin) == HIGH)
             ; //wait for release
    }
    if (playing) {
        //the rest is the same
    }
}
0 голосов
/ 13 февраля 2019

Остановите петлю, пока нажата кнопка в:

int buttonPin = 12;

void setup() 
{
 // put your setup code here, to run once:

   pinMode(buttonPin, INPUT);
}


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

  int buttonState = digitalRead(buttonPin);

  for(int i = 0; i < sizeof(mariomelody); i++)
  {
    if(buttonState == HIGH)
    {
      tone(8, mariomelody[i], 70); 
      delay();
    }  
    while(digitalRead(buttonPin) == HIGH)
    {
    // wait until the button is released
    }
    while(digitalRead(buttonPin) == LOW)
    {
    //wait until the button is pressed again
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...