Если вы просто хотите сделать клавиатуру без использования Makey Makey, вы можете сделать это, используя функциональность GPIO Raspberry Pi. Но, как уже говорилось ранее, Raspberry Pi не имеет достаточно контактов, чтобы сделать клавиатуру, которая действительно полезна.
Однако, если вы хотите добавить 2 микросхемы, вы можете сделать себе клавиатуру с таким количеством клавиш, что у вас возникнет проблема с функцией каждой клавиши!
Я предлагаю подключить 2 микросхемы I2C к шине 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. Хорошей отправной точкой может быть эта ссылка: Драйвер для клавиш на расширителе ввода-вывода TCA6416 I2C , это аналогичная идея, но используется только 16-клавишная клавиатура.
Надеюсь, это вам немного поможет.