Музыкальная клавиатура Arduino
Почему моя клавиатура не воспроизводит звуков? Нельзя использовать сторонние библиотеки для клавиатуры, например Keypad.h
Вот кот для обработки нажатий:
int PinOut[4] {7, 6, 5, 4}; // пины выходы клавиатуры
int PinIn[4] {11, 10, 9, 8}; // пины входа клавиатуры
const int value[4][4]
{ {250, 275, 300, 325},
{350, 375, 400, 425},
{450, 475, 500, 525},
{260, 360, 460, 310}
};
// двойной массив, обозначающий частоту для определенной кнопки
void setup()
{
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, INPUT);
digitalWrite(6, HIGH);
pinMode (7, INPUT);
digitalWrite(7, HIGH);
pinMode (8, INPUT);
digitalWrite(8, HIGH);
pinMode (10, INPUT);
digitalWrite(10, HIGH);
pinMode(9, OUTPUT);
}
void loop() // создаем функцию для чтения данных с кнопок
{
for (int i = 1; i <= 4; i++)
{
digitalWrite(PinOut[i - 1], LOW);
for (int j = 1; j <= 4; j++)
{
if (digitalRead(PinIn[j - 1]) == LOW)
{
tone(9, value[i - 1][j - 1], 100); // tone(порт зуммера, значение массива, задержка)
delay(150); // задержка перед обновлением значения с клавиатуры
noTone(9); // выключение зуммера
}
}
digitalWrite(PinOut[i - 1], HIGH);
}
}
Ответы (1 шт):
Автор решения: Vanyamba Electronics
→ Ссылка
Примерно так надо исправить:
int PinOut[4] {7, 6, 5, 4}; // пины выходы клавиатуры
int PinIn[4] {11, 10, 9, 8}; // пины входа клавиатуры
const int value[4][4] = {
{250, 275, 300, 325},
{350, 375, 400, 425},
{450, 475, 500, 525},
{260, 360, 460, 310}
}; // двойной массив, обозначающий частоту для определенной кнопки
#define SND_OUT 3
void setup()
{
pinMode (PinOut[0], OUTPUT);
pinMode (PinOut[1], OUTPUT);
pinMode (PinOut[2], OUTPUT);
pinMode (PinOut[3], OUTPUT);
pinMode (PinIn[0], INPUT);
digitalWrite(PinIn[0], HIGH);
pinMode (PinIn[1], INPUT);
digitalWrite(PinIn[1], HIGH);
pinMode (PinIn[2], INPUT);
digitalWrite(PinIn[2], HIGH);
pinMode (PinIn[3], INPUT);
digitalWrite(PinIn[3], HIGH);
pinMode(SND_OUT, OUTPUT);
}
void loop() // создаем функцию для чтения данных с кнопок
{
for (int i = 0; i < 4; i++)
{
digitalWrite(PinOut[i], LOW);
for (int j = 0; j < 4; j++)
{
if (digitalRead(PinIn[j]) == LOW)
{
tone(SND_OUT, value[i][j], 100); // tone(порт зуммера, значение массива, задержка)
delay(150); // задержка перед обновлением значения с клавиатуры
noTone(SND_OUT); // выключение зуммера
}
}
digitalWrite(PinOut[i], HIGH);
}
}
