Пианино на Arduino

Murik_bro666
Offline
Зарегистрирован: 26.06.2017

Здравствуйте. Подскажите, в чем проблема в коде.

const int c = 261;
const int d = 294;
const int e = 329;
const int f = 349;
const int g = 391;
int buzzer = 9;
int PB=3;
int PBB=4;
int PBBB=5;
int PBBBB=6;
int PBBBBB=7;
void beep(int ton)
{
  tone(buzzer, ton);
  delay(1);
}
void setup(){
  pinMode(PB, INPUT_PULLUP);
  pinMode(PBB, INPUT_PULLUP);
  pinMode(PBBB, INPUT_PULLUP);
  pinMode(PBBBB, INPUT_PULLUP);
  pinMode(PBBBBB, INPUT_PULLUP);
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);
}
 
void loop() {
  int B= digitalRead(PB);
  if (B==0) {
  beep(c);
  }
  else {
    noTone(buzzer);
  }
  int BB= digitalRead(PBB);
 if (BB==0) {
  beep(d);
  }
  else {
    noTone(buzzer);
  }
  int BBB= digitalRead(PBBB);
if (BBB==0) {
  beep(e);
  }
  else {
    noTone(buzzer);
  }
  int BBBB= digitalRead(PBBBB);
if (BBBBB==0) {
  beep(f);
  }
  else {
    noTone(buzzer);
  }
  int BBBBB= digitalRead(PBBBBB);
if (BBBBB==0) {
  beep(g);
  }
  else {
    noTone(buzzer);
  }

}

Когда вставляю else, noTone, орет как бешенный

Murik_bro666
Offline
Зарегистрирован: 26.06.2017
const int c = 261;
const int d = 294;
const int e = 329;
const int f = 349;
const int g = 391;
int buzzer = 9;
int PB=3;
int PBB=4;
int PBBB=5;
int PBBBB=6;
int PBBBBB=7;
void setup(){
  pinMode(PB, INPUT_PULLUP);
  pinMode(PBB, INPUT_PULLUP);
  pinMode(PBBB, INPUT_PULLUP);
  pinMode(PBBBB, INPUT_PULLUP);
  pinMode(PBBBBB, INPUT_PULLUP);
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);
}
 
void loop() {
  int B= digitalRead(PB);
  if (B==0) {
  tone(buzzer ,c);
  }
  else {
    noTone(buzzer);
  }
  int BB= digitalRead(PBB);
  if (BB==0) {
  tone(buzzer ,d);
  }
  else {
    noTone(buzzer);
  }
  int BBB= digitalRead(PBBB);
  if (BBB==0) {
  tone(buzzer ,e);
  }
  else {
    noTone(buzzer);
  }
  int BBBB= digitalRead(PBBBB);
  if (BBBB==0) {
  tone(buzzer ,f);
  }
  else {
    noTone(buzzer);
  }
  int BBBBB= digitalRead(PBBBBB);
  if (BBBBB==0) {
  tone(buzzer ,g);
  }
  else {
    noTone(buzzer);
  }
}

Пробовал и так писать. Орет не те ноты

Murik_bro666
Offline
Зарегистрирован: 26.06.2017

А вот так прекрасно работает, но без остановки
 

const int c = 261;
const int d = 294;
const int e = 329;
const int f = 349;
const int g = 391;
int buzzer = 9;
int PB = 3;
int PBB = 4;
int PBBB = 5;
int PBBBB = 6;
int PBBBBB = 7;
void setup() {
  pinMode(PB, INPUT_PULLUP);
  pinMode(PBB, INPUT_PULLUP);
  pinMode(PBBB, INPUT_PULLUP);
  pinMode(PBBBB, INPUT_PULLUP);
  pinMode(PBBBBB, INPUT_PULLUP);
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int B = digitalRead(PB);
  if (B == 0) {
    tone(buzzer , c);
  }
  int BB = digitalRead(PBB);
  if (BB == 0) {
    tone(buzzer , d);
  }
  int BBB = digitalRead(PBBB);
  if (BBB == 0) {
    tone(buzzer , e);
  }
  int BBBB = digitalRead(PBBBB);
  if (BBBB == 0) {
    tone(buzzer , f);
  }
  int BBBBB = digitalRead(PBBBBB);
  if (BBBBB == 0) {
    tone(buzzer , g);
  }
}

 

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

Murik_bro666, чего Вы хотите?

Murik_bro666
Offline
Зарегистрирован: 26.06.2017

Пианино на ардуино. Есть 5 кнопок и динамик

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

Ну я немного сомневаюсь, что пианино - это 5 кнопок и динамик, ну да ладно.

Приведенный код к этому имеет какое отношение?

Напишите подробно, как по-Вашему должно работать "пианино".

kiril_vihrov7892
Offline
Зарегистрирован: 17.07.2019
Недавно видел проект "Синтезатор на Ардуино" в качестве клавиш используется почти вся клавиатура Пк
Из деталей всего Ардуино, динамик и компьютер.
Всю работу делает приложение на Пк, он Управляет Ардуино через com port
повторил, все работает, отличный. Посмотри может поможет
Видео с кодом 
Komandir
Offline
Зарегистрирован: 18.08.2018

ИМХО надо if ы заменить одним switch case ом 

kalapanga
Offline
Зарегистрирован: 23.10.2016

kiril_vihrov7892 пишет:

Недавно видел проект "Синтезатор на Ардуино" в качестве клавиш используется почти вся клавиатура Пк
Из деталей всего Ардуино, динамик и компьютер.
Всю работу делает приложение на Пк, он Управляет Ардуино через com port
повторил, все работает, отличный. 

Одно непонятно - на кой в этом проекте Ардуино? 

Morroc
Онлайн
Зарегистрирован: 24.10.2016

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

if ((BBBBB != 0) && (BBBB != 0) && (BBB != 0) && (BB != 0) && (B != 0)) noTone(buzzer);

 

kiril_vihrov7892
Offline
Зарегистрирован: 17.07.2019

kalapanga пишет:

kiril_vihrov7892 пишет:

Недавно видел проект "Синтезатор на Ардуино" в качестве клавиш используется почти вся клавиатура Пк
Из деталей всего Ардуино, динамик и компьютер.
Всю работу делает приложение на Пк, он Управляет Ардуино через com port
повторил, все работает, отличный. 

Одно непонятно - на кой в этом проекте Ардуино? 

Компьютер при нажатии на кнопки отправляет  по com порту на Ардуино код воспроизводимых нот. Ардуино принимает этот код и воспроизводит звук на динамик командой tone. Также компьютер может отправить на Ардуино целую нотную партию для воспроизведения.

kalapanga
Offline
Зарегистрирован: 23.10.2016

kiril_vihrov7892 пишет:

Компьютер при нажатии на кнопки отправляет  по com порту на Ардуино код воспроизводимых нот. Ардуино принимает этот код и воспроизводит звук на динамик командой tone. Также компьютер может отправить на Ардуино целую нотную партию для воспроизведения.

Да я понял, кто там что делает. А что, компьютер с воспроизведением ноты хуже ардуино справился бы? :) Если уж и так "Всю работу делает приложение на Пк"!

p.s. Не воспринимайте моё замечание слишком серьёзно. Автор проекта потренировался в передаче данных по последовательному порту, ну и молодец. Применит знания в следующих проектах.