Halvklotet tangentbord (2 / 17 steg)
Steg 2: Program Teensy
http://www.pjrc.com/store/teensy3.html
Pin layout är på följande länk:
http://www.pjrc.com/teensy/pinout.html
Jag använde Teensy eftersom det är mycket lätt att förvandla den till ett USB-tangentbord. Efter att inrätta din Teensy och testa den med en enkel blinkande ljus, i programmet Arduino, klicka på "Verktyg" och sedan under "USB Type" väljer du "Tangentbord + mus + Joystick" och växla till följande kod:
* Obs * för nu, oroa dig inte som knappen resulterar i vilken nyckel. I själva verket kan det vara bättre att ändra alla nycklar till #'s 4-9 och A-Z (använda versaler) och använda symboler som {} + att ersätta tangenterna märkta 1,2,3. Detta gör det lättare att sitta där och testa för att se till att du faktiskt får varje knapp. (Som jag gjorde i steg 5) Om du gör det, Använd inte siffrorna 1,2 eller 3 för teständamål. Dessa tangenter mappas till Delete, fliken och SKIFT.
Om du vill skriva en bokstav, tryck på SKIFT, släpp och tryck sedan de viktigaste du vill omvandla till versaler.
/*
Knappsatsen skiss
skriver ut nyckeln trycks på en knappsats till den seriella porten
Framgångsrikt testat 06/28/13
*/
CONST int numRows = 6; antalet rader i knappsatsen
CONST int numCols = 6; antal kolumner
CONST int debounceTime = 20; antalet millisekunder för växeln stabil
/*
{ '6','7'}
*/
tangentlayout definierar karaktären återvände när motsvarande knapp trycks
CONST char tangentlayout [numRows] [numCols] = {
{"z", "b", "o", "x", "3","j"},
{ '.','m','l' , ',','"','k'},
{ '?',' ','p' , 'v','\'','n'},
{'2', 'w', t ', 'q', '1 ',' e'},
{ 's','g','i' , 'c','\n','h'},
{"en","f", 'u', 'd ',' y ',' r'}
};
1 är ta bort
2 är fliken
3 är SKIFT
denna matris bestämmer stiften används för rader och kolumner
CONST int rowPins [numRows] = {1,2,3,4,5,6}; 0 till 3 rader
CONST int colPins [numCols] = {10,12,13,14,15,16}; Kolumnerna 0 till 2
char sft = "0";
void setup()
{
Serial.BEGIN(9600);
för (int rad = 0; rad < numRows; rad ++)
{
pinMode(rowPins[row],INPUT); Ange raden pins som indata
digitalWrite(rowPins[row],HIGH); slå på Pull-ups
}
för (int kolumn = 0; kolumnen < numCols; kolumn ++)
{
pinMode(colPins[column],OUTPUT); Ange kolumnen stift som utgångar
för att skriva
digitalWrite(colPins[column],HIGH); Göra alla kolumner inaktiva
}
}
void loop()
{
char nyckel = getKey();
Delay(debounceTime); Detta är en 'tangentbord debounce' tid
om (nyckel == '1') {
Ta bort
Keyboard.Press(KEY_BACKSPACE);
Keyboard.release(KEY_BACKSPACE);
nyckel = "0";
}
om (nyckel == "2") {
Fliken
Keyboard.Press(KEY_TAB);
Keyboard.release(KEY_TAB);
nyckel = "0";
}
om (nyckel == "3") {
Skift
SFT = '1';
nyckel = "0";
}
om (sft == '1') {
om (nyckel! = "0") {
nyckel = toupper (nyckel);
SFT = "0";
}
}
om (nyckel! = "0") {/ / om karaktären inte är 0 då
Det är en giltig nyckel pressa
Keyboard.Print(Key);
}
}
Returnerar den nedtryckt, eller 0 om ingen knapp trycks
char getKey()
{
char nyckel = "0"; 0 anger ingen tangent nedtryckt
för (int kolumn = 0; kolumnen < numCols; kolumn ++)
{
digitalWrite(colPins[column],LOW); Aktivera den aktuella kolumnen.
för (int rad = 0; rad < numRows; rad ++) / / skanna alla rader för
en knapptryckning.
{
IF(digitalRead(rowPins[Row]) == låg) / / trycks en nyckel?
{
Delay(debounceTime); Debounce
While(digitalRead(rowPins[Row]) == låg); vänta för nyckel till vara befriaren
nyckel = tangentlayout [rad] [kolumn]. Kom ihåg vilken nyckel
digitalWrite(rowPins[row],HIGH); återställningsknapp skjuts till hög
}
}
digitalWrite(colPins[column],HIGH); De-aktivera aktuell kolumn.
}
returnera nyckel; Returnerar den nedtryckt eller 0 om ingen
}