Попытка создать кнопку октавер или использовать потенциометр для изменения высоты звучания

Мечтал создать аналог пианино. Думал сделать тембр челесты (в перспективе). Пока Ищю помощи, как реализовать отдельной кнопкой (даже лучше потенциометром) условие для повышения частоты выходного сигнала на фиксированное значение. Я новичок и прошу помочь с кодом, в чём буду безмерно благодарен (не понимаю почему октава изменяется при нажатии произвольной клавиши).

В данный момент код выглядит так.

#define LED 13
#define PIEZO 12
#define NOTE_G4 7  
#define NOTE_GS4 6 
#define NOTE_A4 5  
#define NOTE_AS4 4 
#define NOTE_B4 3  
#define OCTAVER 2


void setup() {
  for (int i = 2; i <= 10; i++) {
    pinMode(i, INPUT_PULLUP);
  }
  pinMode(LED, OUTPUT);
  pinMode(PIEZO, OUTPUT);

} 
void loop()  {
  if (digitalRead(OCTAVER) == LOW)
    {
    
  while (digitalRead(NOTE_G4) == LOW)
  {
    tone(PIEZO, 392, 200);
    digitalWrite(LED, HIGH);
  }
  
  while (digitalRead(NOTE_GS4) == LOW)
  {
    tone(PIEZO, 415, 200);
    digitalWrite(LED, HIGH);
  }

  while (digitalRead(NOTE_A4) == LOW)
  {
    tone(PIEZO, 440, 200);
    digitalWrite(LED, HIGH);
  }

  while (digitalRead(NOTE_AS4) == LOW)
  {
    tone(PIEZO, 466, 200);
    digitalWrite(LED, HIGH);
  }

  while (digitalRead(NOTE_B4) == LOW)
  {
    tone(PIEZO, 494, 200);
    digitalWrite(LED, HIGH);
  }
 
 } else (digitalRead(OCTAVER) == HIGH);
  
    while (digitalRead(NOTE_G4) == LOW)
  
  {
    tone(PIEZO, 196, 200);
    digitalWrite(LED, HIGH);
  }
  
  while (digitalRead(NOTE_GS4) == LOW)
  {
    tone(PIEZO, 207.5, 200);
    digitalWrite(LED, HIGH);
  }

  while (digitalRead(NOTE_A4) == LOW)
  {
    tone(PIEZO, 220, 200);
    digitalWrite(LED, HIGH);
  }

  while (digitalRead(NOTE_AS4) == LOW)
  {
    tone(PIEZO, 233, 200);
    digitalWrite(LED, HIGH);
  }

  while (digitalRead(NOTE_B4) == LOW)
  {
    tone(PIEZO, 247, 200);
    digitalWrite(LED, HIGH);
  }
}

Беглый просмотр кода привел меня к заключению, что код надо писать заново с нуля.
Но перед тем, как начинать это делать, следовало бы составить алгоритм, как это все должно работать.
Тот код, что Вами опубликован, работает в точности так, как Вы его написали, и по нему невозможно понять, чего же Вы на самом деле хотели.
Поэтому для начала расставьте практически в каждой строчке (или в группе из 2-3 строчек) комментарии, как Вы хотели, чтобы эта строчка работала. Тогда по разнице между тем, что написано в коде, и тем, что написано в комментариях, можно будет попытаться догадаться, что же Вы имели в виду.

2 лайка

Что по задумке автора происходит в стр.53?
Было - бы интересно прочитать комментарий.

Почитайте про операторы if …else и фигурные скобки

Здравствуйте. Я хотел прописать условие ,что заданные кнопки при нажатии кнопки-shifta при нажатии выдавали сигнал с вдвое уменьшенной частотой звука (чтобы синтезировать звук понижения на октаву)

Прописать, прописать. Хотел. Чего не прописываешь?
У меня со фразы «прописать» сразу 90е пред глазами предстают….

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

Здравствуйте. Алгоритм я предполагал такой: 1) Включение; 2) Настройка клавиш и настройка клавиши отвечающей за смену октавы (то есть кнопки ,которая в зависимости от количества нажатий повышает частоту , выдаваемую клавишами).

Это алгоритм чего?
И зачем нужна настройка клавиши? Что, просто кнопки, которые повышают/понижают строй на 1-2 октавы не подходят?

Но вообще, я остаюсь при своем мнении, что Вам нужно начать с проектирования устройства. Хотя бы с того, чтобы определиться со списком функций, которое Ваше устройство будет поддерживать.
И еще - совет. Лучше изначально разделить функции взаимодействия с клавишами и функции генерации звука. Это существенно упростит задачу.
Для примера:
здесь - работа с клавишами:

а здесь:

здесь:

и здесь:

работа со звуком.