Насмотревшись видео про звуковые контроллеры на Arduino, я решил сделать собственный звуковой контроллер. В середине - клавиатура, которая позволяет воспроизводить 16 сэмплов. Рядом с ней - светодиод, который горит при отправке данных на компьютер. Структура данных <состояние>:<кнопка> Состояние - это p либо n. p - pressed n - not pressed Кнопка - это 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, *, #, A, B, C или D. Например, p:6 означает, что кнопка под названием 6 нажата. А n:6 означает, что кнопка под названием 6 отпущена. Программа Её делал в Visual Studio 2015. Ещё фото Как работает Все действия кнопок подписаны. Например: при нажатии кнопки D в программе можно выбрать сэмпл, который будет воспроизводиться при нажатии кнопки D на устройстве. Скетч: (к пину 10 подключён тот самый зелёный светодиод) Код (Text): int sendPins[4] = {2, 3, 4, 5}; int receivePins[4] = {6, 7, 8, 9}; char prev = ' '; void setup() { Serial.begin(115200); kbd_init(); pinMode(10, OUTPUT); } void loop() { char kbd = kbd_read(); if(kbd == ' '){ if(prev != ' '){ digitalWrite(10, HIGH); Serial.print("n:"); Serial.println(prev); delay(3); digitalWrite(10, LOW); } } else { if(prev != kbd){ digitalWrite(10, HIGH); Serial.print("p:"); Serial.println(kbd); delay(3); digitalWrite(10, LOW); } } prev = kbd; } void kbd_init() { for (int i = 0; i < 4; i++) { pinMode(sendPins[i], OUTPUT); } for (int i = 0; i < 4; i++) { pinMode(receivePins[i], INPUT); } } char kbd_read() { char btn; btn = ' '; for (int i = 0; i < 4; i++) { digitalWrite(sendPins[i], LOW); } digitalWrite(sendPins[3], HIGH); if (digitalRead(receivePins[3]) == 1) { btn = '1'; } if (digitalRead(receivePins[2]) == 1) { btn = '4'; } if (digitalRead(receivePins[1]) == 1) { btn = '7'; } if (digitalRead(receivePins[0]) == 1) { btn = '*'; } digitalWrite(sendPins[3], LOW); digitalWrite(sendPins[2], HIGH); if (digitalRead(receivePins[3]) == 1) { btn = '2'; } if (digitalRead(receivePins[2]) == 1) { btn = '5'; } if (digitalRead(receivePins[1]) == 1) { btn = '8'; } if (digitalRead(receivePins[0]) == 1) { btn = '0'; } digitalWrite(sendPins[2], LOW); digitalWrite(sendPins[1], HIGH); if (digitalRead(receivePins[3]) == 1) { btn = '3'; } if (digitalRead(receivePins[2]) == 1) { btn = '6'; } if (digitalRead(receivePins[1]) == 1) { btn = '9'; } if (digitalRead(receivePins[0]) == 1) { btn = '#'; } digitalWrite(sendPins[1], LOW); digitalWrite(sendPins[0], HIGH); if (digitalRead(receivePins[3]) == 1) { btn = 'A'; } if (digitalRead(receivePins[2]) == 1) { btn = 'B'; } if (digitalRead(receivePins[1]) == 1) { btn = 'C'; } if (digitalRead(receivePins[0]) == 1) { btn = 'D'; } digitalWrite(sendPins[0], LOW); return btn; }