Stap 2: Programma Teensy
http://www.pjrc.com/Store/teensy3.html
De pin belegging ziet er op de volgende link:
http://www.pjrc.com/teensy/pinout.html
Ik gebruikte de Teensy want het is heel gemakkelijk om te zetten in een USB-toetsenbord. Na het opzetten van uw Teensy en testen het uit met een eenvoudige knipperend licht, in het programma van de Arduino, klikt op "Tools" en onder "USB Type" Selecteer "Toetsenbord + muis + Joystick" overschakelen naar de volgende code:
* Opmerking * voor nu, maak je geen zorgen over welke knop resultaten in welke sleutel. In feite, is het wellicht beter om alle sleutels te #'s 4-9 en A-Z (gebruik KAPITALEN) veranderen en gebruiken van de symbolen zoals {} + ter vervanging van de sleutels die het label van 1,2,3. Dit maakt het gemakkelijker om te zitten en te testen om ervoor te zorgen dat u zijn eigenlijk de ontvangst van elke knop. (Die heb ik bij stap 5) Als u dit doet, gebruik niet de nummers 1,2 of 3 voor testdoeleinden. Deze sleutels worden toegewezen aan verwijderen, tab en shift.
Een initiaal, druk op shift, typt u vrijgeven en druk op ze belangrijke u wilt omzetten in hoofdletters.
/*
Toetsenblok schets
Afgedrukt van de toets ingedrukt op een toetsenbord op de seriële poort
Met succes getest 06/28/13
*/
Const int numRows = 6; aantal rijen in het toetsenblok
Const int numCols = 6; aantal kolommen
Const int debounceTime = 20; aantal milliseconden voor switch stabiel te zijn
/*
{ '6','7'}
*/
keymap definieert het teken als resultaat gegeven als de bijbehorende toets is ingedrukt
const char keymap [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'},
{'a ',' f', 'u', 'd ',' y ',' r'}
};
1 is verwijderen
2 is tabblad
3 is verschuiving
deze array bepaalt de pinnen gebruikt voor rijen en kolommen
Const int rowPins [numRows] = {1,2,3,4,5,6}; Rijen 0 t/m 3
Const int colPins [numCols] = {10,12,13,14,15,16}; Kolommen 0 t/m 2
sft char = "0";
VOID Setup
{
Serial.begin(9600);
voor (int rij = 0; rij < numRows; rij ++)
{
pinMode(rowPins[row],INPUT); Set rij pins als input
digitalWrite(rowPins[row],HIGH); Pull-ups inschakelen
}
voor (int kolom = 0; kolom < numCols; kolom ++)
{
pinMode(colPins[column],OUTPUT); Kolom pinnen als uitgang instellen
voor het schrijven
digitalWrite(colPins[column],HIGH); Alle kolommen inactief maken
}
}
void loop
{
char sleutel = getKey();
delay(debounceTime); Dit is een tijd van de 'Toetsenbord ontdendering'
Als (sleutel == '1') {}
Verwijderen
Keyboard.Press(KEY_BACKSPACE);
Keyboard.release(KEY_BACKSPACE);
toets = "0";
}
Als (sleutel == '2') {}
Tabblad
Keyboard.Press(KEY_TAB);
Keyboard.release(KEY_TAB);
toets = "0";
}
Als (sleutel == '3') {}
Shift
SFT = '1';
toets = "0";
}
Als (sft == '1') {}
Als (sleutel! = '0') {}
toets = toupper (key);
SFT = "0";
}
}
Als (sleutel! = '0') {/ / als het teken niet 0 then
het is een geldige indrukken van een toets
Keyboard.Print(Key);
}
}
keert terug met de toets ingedrukt, of 0 als geen toets wordt ingedrukt
char getKey()
{
char sleutel = "0"; 0 geeft aan dat geen toets ingedrukt
voor (int kolom = 0; kolom < numCols; kolom ++)
{
digitalWrite(colPins[column],LOW); Activeer de huidige kolom.
voor (int rij = 0; rij < numRows; rij ++) / / alle rijen voor scannen
een toets drukt.
{
if(digitalRead(rowPins[Row]) == LOW) / / Is een toets gedrukt?
{
delay(debounceTime); ontdendering
while(digitalRead(rowPins[Row]) == laag); wachten op de sleutel te zijn vrijgegeven
toets = keymap [rij] [kolom]; Vergeet niet welke toets
digitalWrite(rowPins[row],HIGH); geduwd resetknop op hoog
}
}
digitalWrite(colPins[column],HIGH); -Activeren van de huidige kolom.
}
terug toets; Deze eigenschap retourneert de toets ingedrukt of 0 als er geen
}