Звонок по кнопке

klark.charlz
Offline
Зарегистрирован: 07.10.2018

Здравствуйте скажите пожалуйста, мелодия начинает играть сразу же после загрузки, не требуется никакого нажатия на кнопку, кнопка подключена со стягивающим резистором, т.е. на входе LOW.

#include "pitches.h"
const int SPEAKER = 9;
const int BUTTON =2;
boolean lastButton = LOW;
boolean currentButton=LOW;
 
int notes[] = {
  392, 392, 392, 311, 466, 392, 311, 466, 392,
  587, 587, 587, 622, 466, 369, 311, 466, 392,
  784, 392, 392, 784, 739, 698, 659, 622, 659,
  415, 554, 523, 493, 466, 440, 466,
  311, 369, 311, 466, 392
};
 
int times[] = {
  350, 350, 350, 250, 100, 350, 250, 100, 700,
  350, 350, 350, 250, 100, 350, 250, 100, 700,
  350, 250, 100, 350, 250, 100, 100, 100, 450,
  150, 350, 250, 100, 100, 100, 450,
  150, 350, 250, 100, 750
};
 
void setup()
{
}
 
boolean debounce(boolean last)
{
boolean current=digitalRead(BUTTON);
if(last!=current)
{
delay(5);
current=digitalRead(BUTTON);
return current;
}
}
 
void loop()
{
currentButton = debounce(lastButton);
if (lastButton==LOW && currentButton ==HIGH)
{
for(int i=0; i<39; i++)
{
tone(SPEAKER, notes[i], times[i]);
delay(times[i]);
}
}
lastButton=currentButton;
}
klark.charlz
Offline
Зарегистрирован: 07.10.2018

Т.е., а хотелось бы что бы только после считывания HIGH  с нопки запускалось, пробывал в монитор порта выдавать что с кнопки считывается, всё нормально, пока не нажата 0, после нажатия 1, значит в коде нужно чтото исправить, подскажите пожалуйста.

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

1. Вставка программного кода в тему/комментарий

2. Ваш текст

klark.charlz пишет:

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

Содержит описание работы, но не содержит вопроса. Что именно Вам сказать? Что "принято к сведению" или что?

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

UPD: вижу, что вопрос появился в #1. Теперь код правильно выложите.

klark.charlz
Offline
Зарегистрирован: 07.10.2018

А как теперь изменить сообщение? Под вторым есть кнопка изменить, а под главным нету.

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

Никак, заново (в новом) выложите.

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

Не привыкайте так небрежно обращаться с кодами. Если бы Вы не поленились отформатировать код (хотя бы нажав Ctrl+T), Вы бы легко заметили ошибку.

Вот, я отворматировал Ваш код:

#include "pitches.h"
const int SPEAKER = 9;
const int BUTTON = 2;
boolean lastButton = LOW;
boolean currentButton = LOW;

int notes[] = {
  392, 392, 392, 311, 466, 392, 311, 466, 392,
  587, 587, 587, 622, 466, 369, 311, 466, 392,
  784, 392, 392, 784, 739, 698, 659, 622, 659,
  415, 554, 523, 493, 466, 440, 466,
  311, 369, 311, 466, 392
};

int times[] = {
  350, 350, 350, 250, 100, 350, 250, 100, 700,
  350, 350, 350, 250, 100, 350, 250, 100, 700,
  350, 250, 100, 350, 250, 100, 100, 100, 450,
  150, 350, 250, 100, 100, 100, 450,
  150, 350, 250, 100, 750
};

void setup()
{
}

boolean debounce(boolean last)
{
  boolean current = digitalRead(BUTTON);
  if (last != current)
  {
    delay(5);
    current = digitalRead(BUTTON);
    return current;
  }
}

void loop()
{
  currentButton = debounce(lastButton);
  if (lastButton == LOW && currentButton == HIGH)
  {
    for (int i = 0; i < 39; i++)
    {
      tone(SPEAKER, notes[i], times[i]);
      delay(times[i]);
    }
  }
  lastButton = currentButton;
}

А теперь посмотрите на функцию debounce и скажите, что она возвращает, если условие в строке №30 ложно? Вот и вся Ваша проблема.

klark.charlz
Offline
Зарегистрирован: 07.10.2018

Спасибо, исправил.