Якщо ви просто хочете зробити клавіатуру, не використовуючи Makey Makey, ви можете це зробити, використовуючи функцію GPIO Raspberry Pi. Але, як і раніше, як це зазначалося, у Raspberry Pi немає достатньої кількості штифтів, щоб зробити клавіатуру, яка насправді корисна.
Однак якщо ви готові додати 2 ІС, ви можете зробити собі клавіатуру з такою кількістю клавіш, що у вас виникнуть проблеми придумати функцію для кожної клавіші!
Я пропоную підключити 2 I2C IC до шини I2C на Raspberry Pi і використовувати їх для створення власної матриці сканування.
Якщо ви використовуєте один PCF8574, у вас є 8 контактів вводу / виводу, якщо ви отримаєте PCF8575, у вас навіть 16 штифтів вводу / виводу. Поєднавши потім, ви можете отримати матрицю сканування:
- 64 клавіші: (2x PCF8574)
- 128 клавіш: (1x PCF8574 та 1x PCF8575)
- 256 клавіш: (2x PCF8575)
Ви завжди повинні використовувати один з них як вихідний, а один - як вхідний. На виході ви дозволяєте трохи "ходити" від біта 0 до біта n (7 або 15), це стовпці матриці. З іншого ви постійно читаєте значення вводу, і це рядки матриці. Комбінація того, який вихідний біт активний та який вхідний біт - "1" - це клавіша, яку натискають.
Насправді створення матриці є найбільшою роботою, і, хоча ви знаходитесь на ній, не забудьте додати діод після кожного перемикання, який ви введете в матрицю, цей діод (звичайний 1N4148 буде добре) повинен бути розміщений разом з анодом до вимикача і катода до рядкової лінії. Падіння напруги на 0,6 В над цим діодом не повинно бути проблемою, а решта (3,3 В - 0,6 В) 2,7 В все одно повинна бути логічною '1'.
Причина цього вантажопідйомності діодів полягає в тому, що це запобіжить такі речі, як привид і маскування клавіш. Привид - це ефект, що якщо натиснути більше, ніж три клавіші одночасно, можливо, це інтерпретується як абсолютно інша клавіша, оскільки більше рядків матиме логічне значення "1". Маскування - це ефект, який, якщо ви натискаєте кілька клавіш і відпускаєте клавішу, ця (в деяких ситуаціях) не буде виявлена, оскільки рядок для цієї клавіші все ще є логічним "1".
На малюнку показаний приклад привидів, натискаються кнопки A, B, D, окрім рядка 1 (для кнопки A) також рядок 2 (для кнопки C) високий, на даний момент стовпець 1 активний, що невірно.
Після всієї апаратної пригоди вам потрібно написати або адаптувати драйвер ядра, щоб фактично використовувати клавіатуру під Linux. Приємною відправною точкою може бути посилання: Драйвер клавіш на розширювачі IO TCA6416 I2C , це схожа ідея, але використовується лише клавіатура 16 клавіш.
Сподіваюсь, це вам трохи допоможе.