Музыкальная клавиатура 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);
   }
}
→ Ссылка