GamePal (poor mans miniKeyboard)

Ein kleines individualisiertes Keyboard für verschiedeneAnforderungen. Einsatz zB als Streamdeck, Media-Steuerung,Shortcut-Board für oft benötigte Programme oder alsGamepad mit Programmierbaren Tasten und Macros
Ein Arduino Leonardo kann sich mittels der Keyboard.h Library als PC-USB-Keyboard ausgeben.
Ein einfaches Programm "Tippt" ein paar Buchstaben auf dem PC.
Bei der Verwendung von Keyboard.h ist Vorsicht geboten. Wenn Ihr Tastenbefehle automatisch sendet, landen diese natürlich im aktuellaktiven Programm.
Wenn der Arduino im Tastatur-Modus ist nimmt diese ggf. keineNeuprogrammierung an. Durch einen 2-fach Reset (RST + GND) hat ihr jedochein kurzes Zeitfenster um ein Programm neu aufzuspielen.
Wenn Ihr zusätzlich noch "Ausführliche Ausgabe während [x] Komilierung [x]Ausgabe" aktiviert (In der Arduino IDE unter "Datei -> Voreinstellungen) hat ihrein paar mehr Sekunden Zeit nach dem Reset.

EN:
An Arduino Leonardo can be used as PC-USB keyboard using the -Keyboard.h library.
Be careful when using Keyboard.h.
Your key commands are sent automatically to the currently active program.
If the Arduino is in keyboard mode, it may not accept reprogramming. With adouble reset (RST + GND), you have a short time window to reload a newprogram. If you also activate "Detailed output during [x] compilation [x] output" (in theArduino IDE under "File -> Preferences) you have a few more seconds after thereset to reupload your program.
#include <Keyboard.h>
void setup(){
// Button an PIN 2
pinMode(2,INPUT_PULLUP);
Keyboard.begin();
}

void loop(){
// Warte auf Button-press
if(digitalRead(2) ==LOW) {
//Tippe "Hallo!"
Keyboard.print("Hallo!");
}
Zur Steuerung des OLED-Display braucht ihr die -adafruit_SSD1306.h- und die -adafruit_GFX.h- libraries.
Diese könnt ihr in der Arduino-IDE installierenunter ->Sketch -> Bibliotheken einbinden -> Bibliotheken Verwalten". Hier sucht Ihr erst nach "SSD1306" und dann nach "GFX".
Ein Beispiel-Code findet Ihr dann unter ->Datei->Beispiele->Adafruit SSD1306-> ssd1306_128x64_i2c

1-Bit Paint tool:
https://sp4ce.berlin/tools/simple_draw.html
Die Tasten werden in einer Gitterstruktur (Key Matrix) verlötet.
Zum auslesen der Tasten-Matrix dient Keypad.h
#
include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 3;
char hexaKeys[ROWS][COLS] = {
{ '1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'0','#','+'}
};
byte rowPins[ROWS] = {9,8,7,6};
byte colPins[COLS] = {5,4,3};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
	Serial.begin(9600);
}

void loop(){
	char customKey = customKeypad.
	getKey();
	if(customKey){
		Serial.println(customKey);
	}
}

Wenn die Tasten als Gitter verbunden sind, werden nur wenige Pins amMicrokontroller benötigt:
9 Tasten (3x3) = 6 Pins.
12 Tasten (3x4) = 7 Pins.
16 Tasten (4x4) = 8 Pins.
.... 100 Tasten (10x10) 20 Pins.

// Keyboard Keycodes
#define KEY_LEFT_CTRL 0x80
#define KEY_LEFT_SHIFT 0x81
#define KEY_LEFT_ALT 0x82
#define KEY_LEFT_GUI 0x83
#define KEY_RIGHT_CTRL 0x84
#define KEY_RIGHT_SHIFT 0x85
#define KEY_RIGHT_ALT 0x86
#define KEY_RIGHT_GUI 0x87
#define KEY_UP_ARROW 0xDA
#define KEY_DOWN_ARROW 0xD9
#define KEY_LEFT_ARROW 0xD8
#define KEY_RIGHT_ARROW 0xD7
#define KEY_BACKSPACE 0xB2
#define KEY_TAB 0xB3
#define KEY_RETURN 0xB0
#define KEY_ESC 0xB1
#define KEY_INSERT 0xD1
#define KEY_DELETE 0xD4
#define KEY_PAGE_UP 0xD3
#define KEY_PAGE_DOWN 0xD6
#define KEY_HOME 0xD2
#define KEY_END 0xD5
#define KEY_CAPS_LOCK 0xC1
#define KEY_F1 0xC2
#define KEY_F2 0xC3
#define KEY_F3 0xC4
#define KEY_F4 0xC5
#define KEY_F5 0xC6
#define KEY_F6 0xC7
#define KEY_F7 0xC8
#define KEY_F8 0xC9
#define KEY_F9 0xCA
#define KEY_F10 0xCB
#define KEY_F11 0xCC
#define KEY_F12 0xCD
// Keycodes for special keys:
// function keys
Aug 31, 2021 ? ?
#define KEY_F13 0x68
#define KEY_F14 0x69
#define KEY_F15 0x6A
#define KEY_F16 0x6B
#define KEY_F17 0x6C
#define KEY_F18 0x6D
#define KEY_F19 0x6E
#define KEY_F20 0x6F
#define KEY_F21 0x70
#define KEY_F22 0x71
#define KEY_F23 0x72
#define KEY_F24 0x73
#define KEY_F24 0x73
// sound control keys
#define KEY_MUTE 0x7F
#define KEY_VOLUMEUP 0x80
#define KEY_VOLUMEDOWN 0x81
// Numeric keypad
#define KEY_KEYPAD_0 0x62
#define KEY_KEYPAD_1 0x59
#define KEY_KEYPAD_2 0x5A
#define KEY_KEYPAD_3 0x5B
#define KEY_KEYPAD_4 0x5C
#define KEY_KEYPAD_5 0x5D
#define KEY_KEYPAD_6 0x5E
#define KEY_KEYPAD_7 0x5F
#define KEY_KEYPAD_8 0x60
#define KEY_KEYPAD_9 0x61
#define KEY_KEYPAD_DECIMAL 0x63
#define KEY_KEYPAD_ENTER 0x58
#define KEY_KEYPAD_PLUS 0x57
#define KEY_KEYPAD_MINUS 0x56
#define KEY_KEYPAD_MULTIPLY 0x55
#define KEY_KEYPAD_DIVIDE 0x54
#define KEY_KEYPAD_NUMLOCK 0x53
#define KEY_KEYPAD_EQUALS 0x67
// send key:
// Keyboard.press(KEY_F1);
// Keyboard.releaseAll();