#define DCSBIOS_IRQ_SERIAL // For direct USB Testing. Only #define either #include "DcsBios.h" #include "Adafruit_Keypad.h" #include "Arduino.h" const byte ROWS = 7; const byte COLS = 8; char keys[ROWS][COLS] = { { '1', '2', '3', 'a', 'b', 'c', 'd', 'e' }, { '4', '5', '6', 'f', 'g', 'h', 'i', 'j' }, { '7', '8', '9', 'k', 'l', 'm', 'n', 'o' }, { '-', '0', '+', 'p', 'q', 'r', 's', 't' }, { 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B' }, { 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' }, { 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R' }, }; byte rowPins[ROWS] = { 24, 26, 28, 30, 32, 34, 36 }; byte colPins[COLS] = { 25, 27, 29, 31, 33, 35, 37, 39 }; Adafruit_Keypad customKeypad = Adafruit_Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); void setup() { DcsBios::setup(); customKeypad.begin(); } void loop() { DcsBios::loop(); customKeypad.tick(); while (customKeypad.available()) { keypadEvent e = customKeypad.read(); if (e.bit.EVENT == KEY_JUST_PRESSED) { char key = e.bit.KEY; switch (key) { case 'a': sendDcsBiosMessage("IFEI_UP_BTN", "1"); break; case 'b': sendDcsBiosMessage("EMERGENCY_PARKING_BRAKE_PULL", "1"); break; case 'c': sendDcsBiosMessage("UFC_AP", "1"); break; case 'd': sendDcsBiosMessage("HUD_ALT_SW", "1"); break; case 'e': sendDcsBiosMessage("UFC_OS5", "1"); break; case 'f': sendDcsBiosMessage("IFEI_DWN_BTN", "1"); break; case 'g': sendDcsBiosMessage("EMERGENCY_PARKING_BRAKE_ROTATE", "1"); break; case 'h': sendDcsBiosMessage("UFC_IFF", "1"); break; case 'i': sendDcsBiosMessage("BATTERY_SW", "1"); break; case 'j': sendDcsBiosMessage("WING_FOLD_PULL", "1"); break; case 'k': sendDcsBiosMessage("IFEI_ZONE_BTN", "1"); break; case 'l': sendDcsBiosMessage("ANTI_SKID_SW", "1"); break; case 'm': sendDcsBiosMessage("UFC_TCN", "1"); break; case 'n': sendDcsBiosMessage("UFC_COMM2_PULL", "1"); break; case 'o': sendDcsBiosMessage("LTD_R_SW", "1"); break; case 'p': sendDcsBiosMessage("IFEI_ET_BTN", "1"); break; case 'q': sendDcsBiosMessage("UFC_COMM1_PULL", "1"); break; case 'r': sendDcsBiosMessage("UFC_ILS", "1"); break; case 's': sendDcsBiosMessage("UFC_OS1", "1"); break; case 't': sendDcsBiosMessage("FCS_BIT_SW", "1"); break; case 'u': sendDcsBiosMessage("MASTER_CAUTION_RESET_SW", "1"); break; case 'v': sendDcsBiosMessage("MASTER_ARM_SW", "1"); break; case 'w': sendDcsBiosMessage("HOOK_BYPASS_SW", "1"); break; case 'x': sendDcsBiosMessage("LAUNCH_BAR_SW", "1"); break; case 'y': sendDcsBiosMessage("APU_CONTROL_SW", "1"); break; case 'z': sendDcsBiosMessage("UFC_DL", "1"); break; case '0': sendDcsBiosMessage("UFC_0", "1"); break; case '1': sendDcsBiosMessage("UFC_1", "1"); break; case '2': sendDcsBiosMessage("UFC_2", "1"); break; case '3': sendDcsBiosMessage("UFC_3", "1"); break; case '4': sendDcsBiosMessage("UFC_4", "1"); break; case '5': sendDcsBiosMessage("UFC_5", "1"); break; case '6': sendDcsBiosMessage("UFC_6", "1"); break; case '7': sendDcsBiosMessage("UFC_7", "1"); break; case '8': sendDcsBiosMessage("UFC_8", "1"); break; case '9': sendDcsBiosMessage("UFC_9", "1"); break; case '+': sendDcsBiosMessage("UFC_ENT", "1"); break; case '-': sendDcsBiosMessage("UFC_CLR", "1"); break; case 'A': sendDcsBiosMessage("UFC_OS2", "1"); break; case 'B': sendDcsBiosMessage("HOOK_LEVER", "1"); break; case 'C': sendDcsBiosMessage("MASTER_MODE_AA", "1"); break; case 'D': sendDcsBiosMessage("GEAR_LEVER", "1"); break; case 'E': sendDcsBiosMessage("LDG_TAXI_SW", "1"); break; case 'F': sendDcsBiosMessage("PROBE_SW", "1"); break; case 'G': sendDcsBiosMessage("OBOGS_SW", "1"); break; case 'H': sendDcsBiosMessage("UFC_BCN", "1"); break; case 'I': sendDcsBiosMessage("UFC_OS3", "1"); break; case 'J': sendDcsBiosMessage("LST_NFLR_SW", "1"); break; case 'K': sendDcsBiosMessage("MASTER_MODE_AG", "1"); break; case 'L': sendDcsBiosMessage("IFEI_MODE_BTN", "1"); break; case 'M': sendDcsBiosMessage("IFEI_QTY_BTN", "1"); break; case 'N': sendDcsBiosMessage("SEL_JETT_BTN", "1"); break; case 'O': sendDcsBiosMessage("HUD_SYM_BRT_SELECT", "1"); break; case 'P': sendDcsBiosMessage("UFC_ONOFF", "1"); break; case 'Q': sendDcsBiosMessage("UFC_OS4", "1"); break; case 'R': sendDcsBiosMessage("", "1"); break; default: break; } } else if (e.bit.EVENT == KEY_JUST_RELEASED) { char key = e.bit.KEY; switch (key) { case 'a': sendDcsBiosMessage("IFEI_UP_BTN", "0"); break; case 'b': sendDcsBiosMessage("EMERGENCY_PARKING_BRAKE_PULL", "0"); break; case 'c': sendDcsBiosMessage("UFC_AP", "0"); break; case 'd': sendDcsBiosMessage("HUD_ALT_SW", "0"); break; case 'e': sendDcsBiosMessage("UFC_OS5", "0"); break; case 'f': sendDcsBiosMessage("IFEI_DWN_BTN", "0"); break; case 'g': sendDcsBiosMessage("EMERGENCY_PARKING_BRAKE_ROTATE", "0"); break; case 'h': sendDcsBiosMessage("UFC_IFF", "0"); break; case 'i': sendDcsBiosMessage("BATTERY_SW", "0"); break; case 'j': sendDcsBiosMessage("WING_FOLD_PULL", "0"); break; case 'k': sendDcsBiosMessage("IFEI_ZONE_BTN", "0"); break; case 'l': sendDcsBiosMessage("ANTI_SKID_SW", "0"); break; case 'm': sendDcsBiosMessage("UFC_TCN", "0"); break; case 'n': sendDcsBiosMessage("UFC_COMM2_PULL", "0"); break; case 'o': sendDcsBiosMessage("LTD_R_SW", "0"); break; case 'p': sendDcsBiosMessage("IFEI_ET_BTN", "0"); break; case 'q': sendDcsBiosMessage("UFC_COMM1_PULL", "0"); break; case 'r': sendDcsBiosMessage("UFC_ILS", "0"); break; case 's': sendDcsBiosMessage("UFC_OS1", "0"); break; case 't': sendDcsBiosMessage("FCS_BIT_SW", "0"); break; case 'u': sendDcsBiosMessage("MASTER_CAUTION_RESET_SW", "0"); break; case 'v': sendDcsBiosMessage("MASTER_ARM_SW", "0"); break; case 'w': sendDcsBiosMessage("HOOK_BYPASS_SW", "0"); break; case 'x': sendDcsBiosMessage("LAUNCH_BAR_SW", "0"); break; case 'y': sendDcsBiosMessage("APU_CONTROL_SW", "0"); break; case 'z': sendDcsBiosMessage("UFC_DL", "0"); break; case '0': sendDcsBiosMessage("UFC_0", "0"); break; case '1': sendDcsBiosMessage("UFC_1", "0"); break; case '2': sendDcsBiosMessage("UFC_2", "0"); break; case '3': sendDcsBiosMessage("UFC_3", "0"); break; case '4': sendDcsBiosMessage("UFC_4", "0"); break; case '5': sendDcsBiosMessage("UFC_5", "0"); break; case '6': sendDcsBiosMessage("UFC_6", "0"); break; case '7': sendDcsBiosMessage("UFC_7", "0"); break; case '8': sendDcsBiosMessage("UFC_8", "0"); break; case '9': sendDcsBiosMessage("UFC_9", "0"); break; case '+': sendDcsBiosMessage("UFC_ENT", "0"); break; case '-': sendDcsBiosMessage("UFC_CLR", "0"); break; case 'A': sendDcsBiosMessage("UFC_OS2", "0"); break; case 'B': sendDcsBiosMessage("HOOK_LEVER", "0"); break; case 'C': sendDcsBiosMessage("MASTER_MODE_AA", "0"); break; case 'D': sendDcsBiosMessage("GEAR_LEVER", "0"); break; case 'E': sendDcsBiosMessage("LDG_TAXI_SW", "0"); break; case 'F': sendDcsBiosMessage("PROBE_SW", "0"); break; case 'G': sendDcsBiosMessage("OBOGS_SW", "0"); break; case 'H': sendDcsBiosMessage("UFC_BCN", "0"); break; case 'I': sendDcsBiosMessage("UFC_OS3", "0"); break; case 'J': sendDcsBiosMessage("LST_NFLR_SW", "0"); break; case 'K': sendDcsBiosMessage("MASTER_MODE_AG", "0"); break; case 'L': sendDcsBiosMessage("IFEI_MODE_BTN", "0"); break; case 'M': sendDcsBiosMessage("IFEI_QTY_BTN", "0"); break; case 'N': sendDcsBiosMessage("SEL_JETT_BTN", "0"); break; case 'O': sendDcsBiosMessage("HUD_SYM_BRT_SELECT", "0"); break; case 'P': sendDcsBiosMessage("UFC_ONOFF", "0"); break; case 'Q': sendDcsBiosMessage("UFC_OS4", "0"); break; case 'R': sendDcsBiosMessage("", "0"); break; default: break; } } } }