Om du bara vill skapa ett tangentbord utan att använda din Makey Makey kan du göra det med GPIO-funktionaliteten i Raspberry Pi. Men som kommenterat tidigare har Raspberry Pi inte tillräckligt med stift för att göra ett tangentbord som faktiskt är användbart.
Men om du är villig att lägga till 2 IC kan du skapa ett tangentbord med så många tangenter. att du kommer att ha problem med att komma med en funktion för varje tangent!
Mitt förslag är att ansluta 2 I2C IC: er till I2C-bussen på Raspberry Pi, och använda dem för att skapa din egen skanningsmatris.
Om du använder en PCF8574 har du 8 I / O-stift tillgängliga, om du får en PCF8575 har du till och med 16 I / O-stift tillgängliga. Genom att kombinera kan du få en skannmatris med:
- 64 tangenter: (2x PCF8574)
- 128 tangenter: (1x PCF8574 & 1x PCF8575)
- 256 tangenter: (2x PCF8575)
Du måste alltid använda en av dem som utgång och en som ingång. På utgången låter du lite "gå" från bit 0 till bit n (7 eller 15), det här är matrisens kolumner. På den andra läser du ständigt värdet på ingången och det här är matrisens rader. Kombinationen av vilken utgångsbit som är aktiv och vilken inmatningsbit som är '1' är den tangent som trycks in.
Att skapa matrisen är faktiskt mest arbete, och medan du håller på med det, glöm inte att lägga till en diod efter varje omkopplare du matar in i matrisen, den här dioden (en normal 1N4148 klarar sig bra) måste placeras med anoden till omkopplaren och katoden till radlinjen . Spänningsfallet på 0,6V över denna diod borde inte vara ett problem, den återstående (3,3V-0,6V) 2,7V bör fortfarande vara en logisk '1'.
Anledningen till denna lastbil med dioder är att den kommer att förhindra saker som spöken och maskering av nycklar. Ghosting är effekten att om du trycker på mer än tre tangenter samtidigt, är det möjligt att det tolkas som en helt annan tangent eftersom fler rader har en logisk '1'. Maskering är effekten att om du trycker på flera tangenter och släpper en tangent kommer detta (i vissa situationer) inte att upptäckas eftersom raden för den tangenten fortfarande är en logisk "1".
Bilden visar ett exempel på ghosting, knapparna A, B, D trycks in och förutom rad 1 (för knapp A) är även rad 2 (för knapp C) hög, just nu är kolumn 1 aktiv , vilket inte är korrekt.
Efter hela hårdvaruäventyret måste du skriva eller anpassa en kärndrivrutin för att faktiskt använda tangentbordet under Linux. En trevlig utgångspunkt kan vara den här länken: Drivrutin för nycklar på TCA6416 I2C IO-expander, det här är en liknande idé, men använder bara ett tangentbord på 16 tangenter.
Hoppas det hjälper dig lite.