#include #define DCSBIOS_DEFAULT_SERIAL #define USE_MATRIX_SWITCHES #include "DcsBios.h" volatile unsigned char in_mat[7][8] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //The first number in the square brackets [4] is the number of rows, the second is number of columns [3]. The number of "0"s needs to match the multiple of these two, in this case 3 X 4 = 12. byte rowPins[7] = { 24, 26, 28, 30, 32, 34, 36 }; byte colPins[8] = { 25, 27, 29, 31, 33, 35, 37, 39 }; int numRows = sizeof(rowPins); int numCols = sizeof(colPins); //Example Absolute momentary (button only on as long as it is held) DcsBios::MatActionButtonSet ufc1("UFC_1", &in_mat[0][0], LOW); DcsBios::MatActionButtonSet ufc2("UFC_2", &in_mat[0][1], LOW); DcsBios::MatActionButtonSet ufc3("UFC_3", &in_mat[0][2], LOW); DcsBios::MatActionButtonSet ufc4("UFC_4", &in_mat[1][0], LOW); DcsBios::MatActionButtonSet ufc5("UFC_5", &in_mat[1][1], LOW); DcsBios::MatActionButtonSet ufc6("UFC_6", &in_mat[1][2], LOW); DcsBios::MatActionButtonSet ufc7("UFC_7", &in_mat[2][0], LOW); DcsBios::MatActionButtonSet ufc8("UFC_8", &in_mat[2][1], LOW); DcsBios::MatActionButtonSet ufc9("UFC_9", &in_mat[2][2], LOW); DcsBios::MatActionButtonSet ufcClr("UFC_CLR", &in_mat[3][0], LOW); DcsBios::MatActionButtonSet ufc0("UFC_0", &in_mat[3][1], LOW); DcsBios::MatActionButtonSet ufcEnt("UFC_ENT", &in_mat[3][2], LOW); DcsBios::MatActionButtonSet masterCautionResetSw("MASTER_CAUTION_RESET_SW", &in_mat[4][0], LOW); DcsBios::MatActionButtonSet masterModeAa("MASTER_MODE_AA", &in_mat[5][0], LOW); DcsBios::MatActionButtonSet masterModeAg("MASTER_MODE_AG", &in_mat[6][0], LOW); DcsBios::MatActionButtonSet masterArmSw("MASTER_ARM_SW", &in_mat[4][1], LOW); DcsBios::MatActionButtonSet gearLever("GEAR_LEVER", &in_mat[5][1], LOW); DcsBios::MatActionButtonSet ifeiModeBtn("IFEI_MODE_BTN", &in_mat[6][1], LOW); DcsBios::MatActionButtonSet hookBypassSw("HOOK_BYPASS_SW", &in_mat[4][2], LOW); DcsBios::MatActionButtonSet ldgTaxiSw("LDG_TAXI_SW", &in_mat[5][2], LOW); DcsBios::MatActionButtonSet ifeiQtyBtn("IFEI_QTY_BTN", &in_mat[6][2], LOW); DcsBios::MatActionButtonSet ifeiUpBtn("IFEI_UP_BTN", &in_mat[0][3], LOW); DcsBios::MatActionButtonSet ifeiDwnBtn("IFEI_DWN_BTN", &in_mat[1][3], LOW); DcsBios::MatActionButtonSet ifeiZoneBtn("IFEI_ZONE_BTN", &in_mat[2][3], LOW); DcsBios::MatActionButtonSet ifeiEtBtn("IFEI_ET_BTN", &in_mat[3][3], LOW); DcsBios::MatActionButtonSet launchBarSw("LAUNCH_BAR_SW", &in_mat[4][3], LOW); DcsBios::MatActionButtonSet probeSw("PROBE_SW", &in_mat[5][3], LOW); DcsBios::MatActionButtonSet selJettBtn("SEL_JETT_BTN", &in_mat[6][3], LOW); DcsBios::MatActionButtonSet emergencyParkingBrakePull("EMERGENCY_PARKING_BRAKE_PULL", &in_mat[0][4], LOW); DcsBios::MatActionButtonSet emergencyParkingBrakeRotate("EMERGENCY_PARKING_BRAKE_ROTATE", &in_mat[1][4], LOW); DcsBios::MatActionButtonSet antiSkidSw("ANTI_SKID_SW", &in_mat[2][4], LOW); DcsBios::MatActionButtonSet ufcComm1Pull("UFC_COMM1_PULL", &in_mat[3][4], LOW); DcsBios::MatActionButtonSet apuControlSw("APU_CONTROL_SW", &in_mat[4][4], LOW); DcsBios::MatActionButtonSet obogsSw("OBOGS_SW", &in_mat[5][4], LOW); DcsBios::MatActionButtonSet hudSymBrtSelect("HUD_SYM_BRT_SELECT", &in_mat[6][4], LOW); DcsBios::MatActionButtonSet ufcAp("UFC_AP", &in_mat[0][5], LOW); DcsBios::MatActionButtonSet ufcIff("UFC_IFF", &in_mat[1][5], LOW); DcsBios::MatActionButtonSet ufcTcn("UFC_TCN", &in_mat[2][5], LOW); DcsBios::MatActionButtonSet ufcIls("UFC_ILS", &in_mat[3][5], LOW); DcsBios::MatActionButtonSet ufcDl("UFC_DL", &in_mat[4][5], LOW); DcsBios::MatActionButtonSet ufcBcn("UFC_BCN", &in_mat[5][5], LOW); DcsBios::MatActionButtonSet ufcOnoff("UFC_ONOFF", &in_mat[6][5], LOW); DcsBios::MatActionButtonSet hudAltSw("HUD_ALT_SW", &in_mat[0][6], LOW); DcsBios::MatActionButtonSet batterySw("BATTERY_SW", &in_mat[1][6], LOW); DcsBios::MatActionButtonSet ufcComm2Pull("UFC_COMM2_PULL", &in_mat[2][6], LOW); DcsBios::MatActionButtonSet ufcOs1("UFC_OS1", &in_mat[3][6], LOW); DcsBios::MatActionButtonSet ufcOs2("UFC_OS2", &in_mat[4][6], LOW); DcsBios::MatActionButtonSet ufcOs3("UFC_OS3", &in_mat[5][6], LOW); DcsBios::MatActionButtonSet ufcOs4("UFC_OS4", &in_mat[6][6], LOW); DcsBios::MatActionButtonSet ufcOs5("UFC_OS5", &in_mat[0][7], LOW); DcsBios::MatActionButtonSet wingFoldPull("WING_FOLD_PULL", &in_mat[1][7], LOW); DcsBios::MatActionButtonSet ltdRSw("LTD_R_SW", &in_mat[2][7], LOW); DcsBios::MatActionButtonSet fcsBitSw("FCS_BIT_SW", &in_mat[3][7], LOW); DcsBios::MatActionButtonSet hookLever("HOOK_LEVER", &in_mat[4][7], LOW); DcsBios::MatActionButtonSet lstNflrSw("LST_NFLR_SW", &in_mat[5][7], LOW); void setup() { DcsBios::setup(); for (int y = 0; y < numRows; y++) //Iterate through all the rows in the matrix to set the pinmode to input { pinMode(rowPins[y], INPUT_PULLUP); //INPUT_PULLUP stops the pin floating and picking up noise. If using external Pull-up resistors, this could be set to just INPUT. }; for (int x = 0; x < numCols; x++) //Iterate through all the column pins in the matrix to set the pinmode to OUTPUT-HIGH { pinMode(colPins[x], OUTPUT); digitalWrite(colPins[x], HIGH); }; } void loop() { for (int x = 0; x < numCols; x++) //Iterate through each Column pin { digitalWrite(colPins[x], LOW); //set the current column output to a low (current sink) for (int y = 0; y < numRows; y++) //Iterate through each row to detect which one is pressed (connected to the OUTPUT-LOW column) { in_mat[y][x] = digitalRead(rowPins[y]); //update the state of the button in the array, with array address is defined by the current row and column ([y] and [x]). } digitalWrite(colPins[x], HIGH); //set the current column output to a high +V source to so it is not recognised as a press when the other columns are LOW. } DcsBios::loop(); //DcsBios loop is here. }