Мечтал создать аналог пианино. Думал сделать тембр челесты (в перспективе). Пока Ищю помощи, как реализовать отдельной кнопкой (даже лучше потенциометром) условие для повышения частоты выходного сигнала на фиксированное значение. Я новичок и прошу помочь с кодом, в чём буду безмерно благодарен (не понимаю почему октава изменяется при нажатии произвольной клавиши).
В данный момент код выглядит так.
#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 строчек) комментарии, как Вы хотели, чтобы эта строчка работала. Тогда по разнице между тем, что написано в коде, и тем, что написано в комментариях, можно будет попытаться догадаться, что же Вы имели в виду.
Что по задумке автора происходит в стр.53?
Было - бы интересно прочитать комментарий.
Почитайте про операторы if …else и фигурные скобки
Здравствуйте. Я хотел прописать условие ,что заданные кнопки при нажатии кнопки-shifta при нажатии выдавали сигнал с вдвое уменьшенной частотой звука (чтобы синтезировать звук понижения на октаву)
Прописать, прописать. Хотел. Чего не прописываешь?
У меня со фразы «прописать» сразу 90е пред глазами предстают….
Не понимаю как можно задать условие, от которого будет данное действие происходить.
Здравствуйте. Алгоритм я предполагал такой: 1) Включение; 2) Настройка клавиш и настройка клавиши отвечающей за смену октавы (то есть кнопки ,которая в зависимости от количества нажатий повышает частоту , выдаваемую клавишами).
Это алгоритм чего?
И зачем нужна настройка клавиши? Что, просто кнопки, которые повышают/понижают строй на 1-2 октавы не подходят?
Но вообще, я остаюсь при своем мнении, что Вам нужно начать с проектирования устройства. Хотя бы с того, чтобы определиться со списком функций, которое Ваше устройство будет поддерживать.
И еще - совет. Лучше изначально разделить функции взаимодействия с клавишами и функции генерации звука. Это существенно упростит задачу.
Для примера:
здесь - работа с клавишами:
а здесь:
здесь:
и здесь:
работа со звуком.